def main()

in flexsai/p4/backend/json_stage/run-bmv2-test.py [0:0]


def main(argv):
    options = Options()

    options.binary = argv[0]
    if len(argv) <= 2:
        usage(options)
        sys.exit(FAILURE)

    options.compilerSrcDir = argv[1]
    argv = argv[2:]
    if not os.path.isdir(options.compilerSrcDir):
        print(options.compilerSrcDir + " is not a folder", file=sys.stderr)
        usage(options)
        sys.exit(FAILURE)

    while argv[0][0] == '-':
        if argv[0] == "-b":
            options.cleanupTmp = False
        elif argv[0] == "-v":
            options.verbose = True
        elif argv[0] == "-f":
            options.replace = True
        elif argv[0] == "-a":
            if len(argv) == 0:
                reportError("Missing argument for -a option")
                usage(options)
                sys.exit(FAILURE)
            else:
                options.compilerOptions += argv[1].split();
                argv = argv[1:]
        elif argv[0][1] == 'D' or argv[0][1] == 'I' or argv[0][1] == 'T':
            options.compilerOptions.append(argv[0])
        elif argv[0] == "-gdb":
            options.runDebugger = "gdb --args"
        elif argv[0] == '-observation-log':
            if len(argv) == 0:
                reportError("Missing argument for -observation-log option")
                usage(options)
                sys.exit(FAILURE)
            else:
                options.observationLog = argv[1]
                argv = argv[1:]
        elif argv[0] == "--pp":
            options.compilerOptions.append(argv[0])
            argv = argv[1:]
            options.compilerOptions.append(argv[0])
        else:
            reportError("Unknown option ", argv[0])
            usage(options)
            sys.exit(FAILURE)
        argv = argv[1:]

    config = ConfigH("config.h")
    if not config.ok:
        print("Error parsing config.h")
        sys.exit(FAILURE)

    options.hasBMv2 = "HAVE_SIMPLE_SWITCH" in config.vars
    if not options.hasBMv2:
        reportError("config.h indicates that BMv2 is not installed; will skip running BMv2 tests")

    options.p4filename=argv[-1]
    options.testName = None
    if options.p4filename.startswith(options.compilerSrcDir):
        options.testName = options.p4filename[len(options.compilerSrcDir):];
        if options.testName.startswith('/'):
            options.testName = options.testName[1:]
        if options.testName.endswith('.p4'):
            options.testName = options.testName[:-3]
        options.testName = "bmv2/" + options.testName

    if not options.observationLog:
        if options.testName:
            options.observationLog = os.path.join('%s.p4.obs' % options.testName)
        else:
            basename = os.path.basename(options.p4filename)
            base, ext = os.path.splitext(basename)
            dirname = os.path.dirname(options.p4filename)
            options.observationLog = os.path.join(dirname, '%s.p4.obs' % base)

    result = process_file(options, argv)
    if result != SUCCESS:
        reportError("Test failed")
    sys.exit(result)