From c207e8d223bddd3f391f9ce06f770901356fc50f Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Mon, 15 Jun 2015 22:04:14 +0200 Subject: [PATCH] build: fix pkg-config output parsing in configure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix parsing of `pkg-config --cflags-only-I`. The configure_library() step sometimes appended a list in a list instead of list of strings to include_dirs. This commit removes the default handling for includes and libpath options. They don't have defaults at the moment and I don't see that changing anytime soon. Fixing the code is more work and because it's dead code anyway, I opted to remove it instead. Fixes: https://github.com/nodejs/io.js/issues/1985 PR-URL: https://github.com/nodejs/io.js/pull/1986 Reviewed-By: Johan Bergström --- configure | 39 ++++++++++++++------------------------- 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/configure b/configure index ae994e5d49f27f..3f7992e0e4d482 100755 --- a/configure +++ b/configure @@ -366,12 +366,6 @@ def pkg_config(pkg): return retval -def format_libraries(list): - """Returns string of space separated libraries""" - libraries = list.split(',') - return ' '.join('-l{0}'.format(i) for i in libraries) - - def try_check_compiler(cc, lang): try: proc = subprocess.Popen(shlex.split(cc) + ['-E', '-P', '-x', lang, '-'], @@ -689,29 +683,24 @@ def configure_library(lib, output): output['variables']['node_' + shared_lib] = b(getattr(options, shared_lib)) if getattr(options, shared_lib): - default_cflags = getattr(options, shared_lib + '_includes') - default_lib = format_libraries(getattr(options, shared_lib + '_libname')) - default_libpath = getattr(options, shared_lib + '_libpath') - if default_libpath: - default_libpath = '-L' + default_libpath (pkg_libs, pkg_cflags, pkg_libpath) = pkg_config(lib) - # Remove empty strings from the list of include_dirs + if pkg_cflags: - cflags = filter(None, map(str.strip, pkg_cflags.split('-I'))) - else: - cflags = default_cflags - libs = pkg_libs if pkg_libs else default_lib - libpath = pkg_libpath if pkg_libpath else default_libpath + output['include_dirs'] += ( + filter(None, map(str.strip, pkg_cflags.split('-I')))) # libpath needs to be provided ahead libraries - if libpath: - output['libraries'] += [libpath] - if libs: - # libs passed to the linker cannot contain spaces. - # (libpath on the other hand can) - output['libraries'] += libs.split() - if cflags: - output['include_dirs'] += [cflags] + if pkg_libpath: + output['libraries'] += ( + filter(None, map(str.strip, pkg_cflags.split('-L')))) + + default_libs = getattr(options, shared_lib + '_libname') + default_libs = map('-l{0}'.format, default_libs.split(',')) + + if pkg_libs: + output['libraries'] += pkg_libs.split() + elif default_libs: + output['libraries'] += default_libs def configure_v8(o):