mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 09:10:36 +00:00
2d00f898fb
Making it cleaner and simpler to navigate and removing previous ugly and now useless hack where we were renaming files ourself to make meson happy.
93 lines
2.9 KiB
Python
93 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import glob
|
|
import os
|
|
import re
|
|
import shutil
|
|
import subprocess
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--api-raw")
|
|
parser.add_argument("--gapi-fixup")
|
|
parser.add_argument("--metadata")
|
|
parser.add_argument("--gapi-codegen")
|
|
parser.add_argument("--abi-includes", default="")
|
|
parser.add_argument("--abi-cs-usings", default="")
|
|
parser.add_argument("--assembly-name")
|
|
parser.add_argument("--extra-includes", action='append', default=[])
|
|
parser.add_argument("--out")
|
|
parser.add_argument("--files")
|
|
parser.add_argument("--symbols")
|
|
parser.add_argument("--schema")
|
|
parser.add_argument("--fake", action='store_true')
|
|
|
|
opts = parser.parse_args()
|
|
if opts.fake:
|
|
exit(0)
|
|
|
|
api_xml = os.path.join(opts.out, os.path.basename(
|
|
opts.api_raw).replace('.raw', '.xml'))
|
|
|
|
shutil.copyfile(opts.api_raw, api_xml)
|
|
|
|
if shutil.which('mono'):
|
|
launcher = ['mono', '--debug']
|
|
else:
|
|
launcher = []
|
|
|
|
cmd = [opts.gapi_fixup, "--api=" + api_xml]
|
|
if opts.metadata:
|
|
cmd += ["--metadata=" + opts.metadata]
|
|
if opts.symbols:
|
|
cmd.extend(['--symbols=' + opts.symbols])
|
|
subprocess.check_call(launcher + cmd)
|
|
|
|
cmd = [
|
|
opts.gapi_codegen, '--generate', api_xml,
|
|
'--outdir=' + opts.out,
|
|
'--assembly-name=' + opts.assembly_name,
|
|
'--glue-includes=' + opts.abi_includes,
|
|
'--abi-c-filename=' +
|
|
os.path.join(opts.out, opts.assembly_name + "-abi.c"),
|
|
'--abi-cs-filename=' +
|
|
os.path.join(opts.out, opts.assembly_name + "-abi.cs"),
|
|
]
|
|
|
|
if opts.schema:
|
|
cmd += ['--schema=' + opts.schema]
|
|
|
|
if opts.abi_cs_usings:
|
|
cmd += ['--abi-cs-usings=' + opts.abi_cs_usings]
|
|
|
|
cmd += ['-I' + i for i in opts.extra_includes]
|
|
|
|
subprocess.check_call(launcher + cmd)
|
|
|
|
# WORKAROUND: Moving files into the out directory with special names
|
|
# as meson doesn't like path separator in output names.
|
|
regex = re.compile('_')
|
|
dirs = set()
|
|
expected_files = set(opts.files.split(';'))
|
|
for _f in expected_files:
|
|
dirs.add(os.path.dirname(_f))
|
|
|
|
generated = set(glob.glob(os.path.join('*/*.cs')))
|
|
rcode = 0
|
|
not_listed = generated - expected_files
|
|
if not_listed:
|
|
print("Following files were generated but not listed:\n %s" %
|
|
'\n '.join(["'%s/%s'," % (m.split(os.path.sep)[-2], m.split(os.path.sep)[-1])
|
|
for m in not_listed]))
|
|
rcode = 1
|
|
|
|
not_generated = expected_files - generated
|
|
if not_generated:
|
|
print("Following files were generated but not listed:\n %s" %
|
|
'\n '.join(["'%s/%s'," % (m.split(os.path.sep)[-2], m.split(os.path.sep)[-1])
|
|
for m in not_generated]))
|
|
rcode = 1
|
|
|
|
exit(rcode)
|