From 4e394b3341b2d30294a14b96b7e528b441b675a5 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Fri, 6 Oct 2017 11:48:08 -0700 Subject: dependencies: Add function to strip system -L paths PkgConfig automatically removes -L paths from libdirs if the -L points to a system path. It knows what these paths are by taking this as a configure option at build time, which the distro maintainers set appropriately and everything works. This allows one to have two versions of a package installed, a system and non system, and then override PKG_CONFIG_PATH to use the non system version, and everything just works. For non-pkgconfig dependencies (such as LLVM) meson needs to strip these themselves to avoid breaking the above use case. --- mesonbuild/dependencies/base.py | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'mesonbuild/dependencies/base.py') diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py index 0d9742d..9913a0b 100644 --- a/mesonbuild/dependencies/base.py +++ b/mesonbuild/dependencies/base.py @@ -640,3 +640,14 @@ def find_external_dependency(name, env, kwargs): raise pkg_exc mlog.log('Dependency', mlog.bold(name), 'found:', mlog.red('NO')) return pkgdep + + +def strip_system_libdirs(environment, link_args): + """Remove -L arguments. + + leaving these in will break builds where a user has a version of a library + in the system path, and a different version not in the system path if they + want to link against the non-system path version. + """ + exclude = {'-L{}'.format(p) for p in environment.get_compiler_system_dirs()} + return [l for l in link_args if l not in exclude] -- cgit v1.1