#!/usr/bin/env python3

import sys
import os
import os.path

def main (argv):
    import sea
    import sea.commands
    import sea.cex
    import sea.yama

    cmds = [sea.commands.Bpf,
            sea.commands.BndFrontEnd,
            sea.commands.CutLoops(),
            sea.commands.BndSmt,
            sea.commands.Pf,
            sea.commands.Smt,
            sea.commands.Clp,
            sea.commands.LfeSmt,
            sea.commands.LfeClp,
            sea.commands.Clang(),
            sea.commands.Seapp(),
            sea.commands.MixedSem(),
            sea.commands.Seaopt(),
            sea.commands.Seahorn(),
            sea.commands.SeahornClp(),
            sea.commands.Boogie,
            sea.commands.FrontEnd,
            sea.commands.LegacyFrontEnd(),
            sea.commands.CrabInst(),
            sea.commands.Crab,
            sea.commands.Unroll(),
            sea.commands.ClangPP,
            sea.commands.seaIncSmt,
            sea.commands.seaTerm,
            sea.commands.NdcInst(),
            sea.commands.Ndc,
            sea.commands.LinkRt(),
            sea.commands.WrapMem(),
            sea.commands.Exe,
            sea.commands.InspectBitcode(),
            sea.commands.Inspect,
            sea.commands.SimpleMemoryChecks(),
            sea.commands.Smc,
            sea.commands.RemoveTargetFeatures(),
            sea.commands.Fpf,
            sea.commands.Fpcf,
            sea.commands.Spf,
            sea.yama.Yama(),
            sea.cex.CexGen(),
            sea.cex.SeaExeCex(),
    ]

    cmd = sea.AgregateCmd('sea', 'SeaHorn Verification Framework', cmds)
    return cmd.main (argv)

if __name__ == '__main__':
    path = os.path.abspath (sys.argv[0])
    path = os.path.dirname(path)

    ## update system PATH to location of the package
    if os.path.isdir (path):
        os.environ['PATH'] = path + os.pathsep + os.environ['PATH']


    path = os.path.abspath (os.path.join(path, '..', 'lib', 'seapy'))
    if os.path.isdir (path): sys.path.insert(0, path)

    z3_path = os.path.abspath (os.path.join(path, '..', 'z3py'))

    if os.path.isdir (z3_path): sys.path.insert(0, z3_path)

    sys.exit (main (sys.argv[1:]))
