11 if __name__ == "__main__":
12 parser = argparse.ArgumentParser()
13 parser.add_argument("--api-raw")
14 parser.add_argument("--gapi-fixup")
15 parser.add_argument("--metadata")
16 parser.add_argument("--gapi-codegen")
17 parser.add_argument("--glue-file", default="")
18 parser.add_argument("--glue-includes", default="")
19 parser.add_argument("--abi-cs-usings", default="")
20 parser.add_argument("--glue-libname", default="")
21 parser.add_argument("--assembly-name")
22 parser.add_argument("--extra-includes", action='append', default=[])
23 parser.add_argument("--out")
24 parser.add_argument("--files")
25 parser.add_argument("--symbols")
26 parser.add_argument("--schema")
27 parser.add_argument("--fakeglue", action='store_true')
29 opts = parser.parse_args()
33 if not opts.glue_libname:
34 opts.glue_libname = opts.assembly_name + 'sharpglue-3'
36 api_xml = os.path.join(opts.out, os.path.basename(
37 opts.api_raw).replace('.raw', '.xml'))
39 shutil.copyfile(opts.api_raw, api_xml)
41 if shutil.which('mono'):
42 launcher = ['mono', '--debug']
46 cmd = [opts.gapi_fixup, "--api=" + api_xml]
48 cmd += ["--metadata=" + opts.metadata]
50 cmd.extend(['--symbols=' + opts.symbols])
51 subprocess.check_call(launcher + cmd)
54 opts.gapi_codegen, '--generate', api_xml,
55 '--outdir=' + opts.out,
56 '--glue-filename=' + opts.glue_file,
57 '--gluelib-name=' + opts.glue_libname,
58 '--glue-includes=' + opts.glue_includes,
59 '--assembly-name=' + opts.assembly_name,
60 '--abi-c-filename=' + os.path.join(opts.out, opts.assembly_name + "-abi.c"),
61 '--abi-cs-filename=' + os.path.join(opts.out, opts.assembly_name + "-abi.cs"),
65 cmd += ['--schema=' + opts.schema]
67 if opts.abi_cs_usings:
68 cmd += ['--abi-cs-usings=' + opts.abi_cs_usings]
70 cmd += ['-I' + i for i in opts.extra_includes]
72 subprocess.check_call(launcher + cmd)
74 # WORKAROUND: Moving files into the out directory with special names
75 # as meson doesn't like path separator in output names.
76 regex = re.compile('_')
78 for _f in opts.files.split(';'):
79 fpath = os.path.join(opts.out, regex.sub("/", _f, 1))
80 dirs.add(os.path.dirname(fpath))
81 _f = os.path.join(opts.out, _f)
82 shutil.move(fpath, _f)
86 missing_files.extend(glob.glob(os.path.join(_dir, '*.cs')))
89 print("Following files were generated but not listed:\n %s" %
90 '\n '.join(["'%s_%s'," % (m.split(os.path.sep)[-2], m.split(os.path.sep)[-1])
91 for m in missing_files]))