From 08d26a80859023963bc2ffb41a0b6aed942685a9 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Fri, 15 May 2015 03:36:45 -0400 Subject: [PATCH 1/3] setupext: respect $PKG_CONFIG When cross-compiling, it is common to set the PKG_CONFIG env var to a custom pkg-config that knows about the target. Make sure we respect that just like the standard pkg-config tools suggest (pkg.m4). If it isn't set, we use the same default as today -- "pkg-config". --- setupext.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/setupext.py b/setupext.py index 80b2a6c4d783..29cddf96b058 100755 --- a/setupext.py +++ b/setupext.py @@ -253,7 +253,8 @@ def __init__(self): self.has_pkgconfig = False else: self.set_pkgconfig_path() - status, output = getstatusoutput("pkg-config --help") + self.pkgconfig = os.environ.get('PKG_CONFIG', 'pkg-config') + status, output = getstatusoutput("%s --help" % self.pkgconfig) self.has_pkgconfig = (status == 0) if not self.has_pkgconfig: print("IMPORTANT WARNING:") @@ -286,7 +287,7 @@ def setup_extension(self, ext, package, default_include_dirs=[], executable = alt_exec if self.has_pkgconfig: - executable = 'pkg-config {0}'.format(package) + executable = '%s %s' % (self.pkgconfig, package) use_defaults = True @@ -330,7 +331,7 @@ def get_version(self, package): return None status, output = getstatusoutput( - "pkg-config %s --modversion" % (package)) + '%s %s --modversion' % (self.pkgconfig, package)) if status == 0: return output return None From 3761303016cab0542891374032eca87e74d585bf Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Fri, 15 May 2015 03:43:17 -0400 Subject: [PATCH 2/3] setupext: do not mess with PKG_CONFIG_PATH The current code always sets PKG_CONFIG_PATH to build paths in / which breaks cross-compiling -- things like /usr/lib are for the build system (e.g. x86) and not for the target (e.g. arm). Since we're adding paths that are already the default for pkg-config, there's no point in trying to be smart here. Just punt the code. This basically reverts commit 101beb975d3a1218350f02bf68dc2a43ac8ff148. --- setupext.py | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/setupext.py b/setupext.py index 29cddf96b058..57d80e79eb60 100755 --- a/setupext.py +++ b/setupext.py @@ -252,7 +252,6 @@ def __init__(self): if sys.platform == 'win32': self.has_pkgconfig = False else: - self.set_pkgconfig_path() self.pkgconfig = os.environ.get('PKG_CONFIG', 'pkg-config') status, output = getstatusoutput("%s --help" % self.pkgconfig) self.has_pkgconfig = (status == 0) @@ -262,20 +261,6 @@ def __init__(self): " pkg-config is not installed.\n" " matplotlib may not be able to find some of its dependencies") - def set_pkgconfig_path(self): - pkgconfig_path = sysconfig.get_config_var('LIBDIR') - if pkgconfig_path is None: - return - - pkgconfig_path = os.path.join(pkgconfig_path, 'pkgconfig') - if not os.path.isdir(pkgconfig_path): - return - - try: - os.environ['PKG_CONFIG_PATH'] += ':' + pkgconfig_path - except KeyError: - os.environ['PKG_CONFIG_PATH'] = pkgconfig_path - def setup_extension(self, ext, package, default_include_dirs=[], default_library_dirs=[], default_libraries=[], alt_exec=None): From 43af6b9b64953eef1a1c1f14b32ad3f667da5954 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Fri, 15 May 2015 03:49:02 -0400 Subject: [PATCH 3/3] setupext: do not hardcode system -I/-L paths when pkg-config is available If we have pkg-config, then there's no need to hardcode the system -I/-L paths as the pkg-config files will give us all the info we need. --- setupext.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/setupext.py b/setupext.py index 57d80e79eb60..8d2d34cd8602 100755 --- a/setupext.py +++ b/setupext.py @@ -218,7 +218,7 @@ def make_extension(name, files, *args, **kwargs): """ Make a new extension. Automatically sets include_dirs and library_dirs to the base directories appropriate for this - platform. + platform when pkg-config is not available. `name` is the name of the extension. @@ -228,14 +228,15 @@ def make_extension(name, files, *args, **kwargs): `distutils.core.Extension` constructor. """ ext = DelayedExtension(name, files, *args, **kwargs) - for dir in get_base_dirs(): - include_dir = os.path.join(dir, 'include') - if os.path.exists(include_dir): - ext.include_dirs.append(include_dir) - for lib in ('lib', 'lib64'): - lib_dir = os.path.join(dir, lib) - if os.path.exists(lib_dir): - ext.library_dirs.append(lib_dir) + if not self.has_pkgconfig: + for dir in get_base_dirs(): + include_dir = os.path.join(dir, 'include') + if os.path.exists(include_dir): + ext.include_dirs.append(include_dir) + for lib in ('lib', 'lib64'): + lib_dir = os.path.join(dir, lib) + if os.path.exists(lib_dir): + ext.library_dirs.append(lib_dir) ext.include_dirs.append('.') return ext