| Support passing arguments to g-ir-scanner through a file |
| |
| --- gobject-introspection-1.60.1/Makefile.introspection.orig 2019-04-20 19:49:44.101084900 +0200 |
| +++ gobject-introspection-1.60.1/Makefile.introspection 2019-04-20 19:49:56.487025600 +0200 |
| @@ -132,6 +132,7 @@ |
| # needs to be added manually. |
| $(1): $$($(_gir_name)_FILES) |
| @ $(MKDIR_P) $(dir $(1)) |
| + @ echo $$^ > $(1).files |
| $(_gir_silent_scanner_prefix) $(_gir_default_scanner_env) $(INTROSPECTION_SCANNER_ENV) $(INTROSPECTION_SCANNER) $(_gir_silent_scanner_opts) \ |
| $(INTROSPECTION_SCANNER_ARGS) \ |
| --namespace=$(_gir_namespace) \ |
| @@ -148,7 +149,7 @@ |
| $($(_gir_name)_CFLAGS) \ |
| --cflags-end \ |
| $($(_gir_name)_LDFLAGS) \ |
| - $$^ \ |
| + --argfile=$(1).files \ |
| --output $(1) |
| endef |
| |
| --- a/giscanner/scannermain.py |
| +++ a/giscanner/scannermain.py |
| @@ -470,8 +470,9 @@ def write_output(data, options): |
| |
| |
| def scanner_main(args): |
| + loaded_args = utils.maybe_load_args_from_file(args) |
| parser = _get_option_parser() |
| - (options, args) = parser.parse_args(args) |
| + (options, args) = parser.parse_args(loaded_args) |
| |
| if options.passthrough_gir: |
| passthrough_gir(options.passthrough_gir, sys.stdout) |
| --- gobject-introspection-1.58.1/giscanner/utils.py.orig 2018-11-05 19:58:03.000000000 +0100 |
| +++ gobject-introspection-1.58.1/giscanner/utils.py 2018-11-18 12:24:53.599570100 +0100 |
| @@ -29,6 +29,7 @@ |
| import platform |
| import shutil |
| import time |
| +import shlex |
| import giscanner.pkgconfig |
| |
| |
| @@ -83,6 +84,59 @@ |
| return name |
| |
| |
| +def cygmsys_mangle(arg): |
| + shell = which(os.environ.get('SHELL', 'sh.exe')) |
| + p = subprocess.Popen([shell, '-c', 'cmd //C echo ' + arg], stdout=subprocess.PIPE) |
| + result, _ = p.communicate() |
| + return result.decode('utf-8').rstrip('\n').rstrip('\r') if p.returncode == 0 else None |
| + |
| + |
| +def load_args_from_file(filename): |
| + with open(filename, 'rb') as source: |
| + contents = source.read().decode('UTF-8') |
| + result = shlex.split(contents) |
| + if os.name == 'nt': |
| + args = [] |
| + for arg in result: |
| + mangled = cygmsys_mangle(arg) |
| + if mangled is not None: |
| + args.append(mangled) |
| + result = args |
| + return result |
| + |
| + |
| +def maybe_load_args_from_file(args): |
| + if os.name != 'nt': |
| + return args |
| + |
| + processed_args = [] |
| + skip = False |
| + is_input_file = False |
| + argfilelen = len('--argfile=') |
| + for argn, arg in enumerate(args): |
| + if skip: |
| + processed_args.append(arg) |
| + continue |
| + elif arg == '--': |
| + skip = True |
| + processed_args.append(arg) |
| + continue |
| + |
| + if is_input_file: |
| + processed_args.extend(load_args_from_file(arg)) |
| + is_input_file = False |
| + continue |
| + |
| + if arg == '--argfile' and argn + 1 < len(args): |
| + is_input_file = True |
| + continue |
| + elif arg.startswith('--argfile=') and len(arg) > argfilelen: |
| + processed_args.extend(load_args_from_file(arg[argfilelen:])) |
| + continue |
| + processed_args.append(arg) |
| + return processed_args |
| + |
| + |
| _libtool_pat = re.compile("dlname='([A-z0-9\\.\\-\\+]+)'\n") |
| |
| |