summaryrefslogtreecommitdiff
path: root/giscanner/scannermain.py
diff options
context:
space:
mode:
authorTomasz Miąsko <tomasz.miasko@gmail.com>2018-02-15 00:00:00 +0000
committerChristoph Reiter <reiter.christoph@gmail.com>2018-07-28 19:00:55 +0200
commitb80fff2e5a8f327c3128378c12c290dd8e4f7c01 (patch)
treebdf8e8dd62436a99513e35645245e4641a93245f /giscanner/scannermain.py
parent8bf05589bba98a13dacce1312075af9f04145b82 (diff)
downloadgobject-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.py23
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)