diff options
author | Tomasz Miąsko <tomasz.miasko@gmail.com> | 2018-02-15 00:00:00 +0000 |
---|---|---|
committer | Christoph Reiter <reiter.christoph@gmail.com> | 2018-07-28 19:00:55 +0200 |
commit | b80fff2e5a8f327c3128378c12c290dd8e4f7c01 (patch) | |
tree | bdf8e8dd62436a99513e35645245e4641a93245f /giscanner/scannermain.py | |
parent | 8bf05589bba98a13dacce1312075af9f04145b82 (diff) | |
download | gobject-introspection-b80fff2e5a8f327c3128378c12c290dd8e4f7c01.tar.gz |
Factor out pkg-config functionality to a separate module.
Functional changes:
* Consistently check that return code from pkg-config is zero.
* Use shell word splitting rules to process pkg-config output to match
behaviour obtained by running `cc program.cc $(pkg-config --cflags ...)`.
Fixes issue #171 .
* Use user preferred encoding to process output from pkg-config on
Python 3. Python 2 behaviour defaults to using ascii encoding as before.
edit creiter: still ignore pkg-config errors by default for now as we
depend on it when glib is a subproject.
Diffstat (limited to 'giscanner/scannermain.py')
-rw-r--r--[-rwxr-xr-x] | giscanner/scannermain.py | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/giscanner/scannermain.py b/giscanner/scannermain.py index 2f1d9095..e0af993a 100755..100644 --- a/giscanner/scannermain.py +++ b/giscanner/scannermain.py @@ -37,7 +37,7 @@ import platform import shlex import giscanner -from giscanner import message +from giscanner import message, pkgconfig from giscanner.annotationparser import GtkDocCommentBlockParser from giscanner.ast import Include, Namespace from giscanner.dumper import compile_introspection_binary @@ -288,7 +288,7 @@ def test_codegen(optstring, def process_options(output, allowed_flags): - for option in output.split(): + for option in output: for flag in allowed_flags: if not option.startswith(flag): continue @@ -297,19 +297,11 @@ def process_options(output, allowed_flags): def process_packages(options, packages): - args = [os.environ.get('PKG_CONFIG', 'pkg-config'), '--cflags'] - args.extend(packages) - output = subprocess.Popen(args, - stdout=subprocess.PIPE).communicate()[0] - if output is None: - # the error output should have already appeared on our stderr, - # so we just exit - return 1 - output = output.decode('ascii') + flags = pkgconfig.cflags(packages) # Some pkg-config files on Windows have options we don't understand, # so we explicitly filter to only the ones we need. options_whitelist = ['-I', '-D', '-U', '-l', '-L'] - filtered_output = list(process_options(output, options_whitelist)) + filtered_output = list(process_options(flags, options_whitelist)) parser = _get_option_parser() pkg_options, unused = parser.parse_args(filtered_output) options.cpp_includes.extend([os.path.realpath(f) for f in pkg_options.cpp_includes]) @@ -539,9 +531,10 @@ def scanner_main(args): packages = set(options.packages) packages.update(transformer.get_pkgconfig_packages()) if packages: - exit_code = process_packages(options, packages) - if exit_code: - return exit_code + try: + process_packages(options, packages) + except pkgconfig.PkgConfigError as e: + _error(str(e)) ss = create_source_scanner(options, args) |