gstreamer/generate_code.py
Thibault Saunier 2d00f898fb Move generated files to dedicated folders named by namespace
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.
2018-03-11 21:47:35 -03:00

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)