diff options
author | Michael Adam <obnox@samba.org> | 2014-12-18 21:36:07 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2015-01-08 23:38:07 +0100 |
commit | 707dc16987c982b75c83cd5b06d4373c23e777e0 (patch) | |
tree | 89df72d7df059c190c953660d50a0b9f60b7e3a1 /buildtools | |
parent | dc808a466ef835535a3d4bb87f19316eeff1c567 (diff) | |
download | samba-707dc16987c982b75c83cd5b06d4373c23e777e0.tar.gz |
wafsamba: filter out standard library paths from RPATH and LIBPATH
We should avoid passing them explicitly to the compiler/linker.
We ask the compiler with the '-print-search-dirs' argument
or fallback to [ '/usr/lib', '/usr/lib64' ].
Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Michael Adam <obnox@samba.org>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'buildtools')
-rw-r--r-- | buildtools/wafsamba/samba_conftests.py | 29 | ||||
-rw-r--r-- | buildtools/wafsamba/samba_optimisation.py | 25 | ||||
-rwxr-xr-x | buildtools/wafsamba/wscript | 2 |
3 files changed, 55 insertions, 1 deletions
diff --git a/buildtools/wafsamba/samba_conftests.py b/buildtools/wafsamba/samba_conftests.py index 07dda2a3f8b..1afc6c94fbe 100644 --- a/buildtools/wafsamba/samba_conftests.py +++ b/buildtools/wafsamba/samba_conftests.py @@ -508,6 +508,35 @@ def CHECK_XSLTPROC_MANPAGES(conf): print "A local copy of the docbook.xsl wasn't found on your system" \ " consider installing package like docbook-xsl" +# +# Determine the standard libpath for the used compiler, +# so we can later use that to filter out these standard +# library paths when some tools like cups-config or +# python-config report standard lib paths with their +# ldflags (-L...) +# +@conf +def CHECK_STANDARD_LIBPATH(conf): + # at least gcc and clang support this: + try: + cmd = conf.env.CC + ['-print-search-dirs'] + out = Utils.cmd_output(cmd).split('\n') + except ValueError: + # option not supported by compiler - use a standard list of directories + dirlist = [ '/usr/lib', '/usr/lib64' ] + except: + raise Utils.WafError('Unexpected error running "%s"' % (cmd)) + else: + dirlist = [] + for line in out: + line = line.strip() + if line.startswith("libraries: ="): + dirliststr = line[len("libraries: ="):] + dirlist = [ os.path.normpath(x) for x in dirliststr.split(':') ] + break + + conf.env.STANDARD_LIBPATH = dirlist + waf_config_c_parse_flags = config_c.parse_flags; def samba_config_c_parse_flags(line1, uselib, env): diff --git a/buildtools/wafsamba/samba_optimisation.py b/buildtools/wafsamba/samba_optimisation.py index 1333f8b7407..583a6514d78 100644 --- a/buildtools/wafsamba/samba_optimisation.py +++ b/buildtools/wafsamba/samba_optimisation.py @@ -6,8 +6,9 @@ # overall this makes some build tasks quite a bit faster +import os import Build, Utils, Node -from TaskGen import feature, after +from TaskGen import feature, after, before import preproc, Task @feature('cc', 'cxx') @@ -308,3 +309,25 @@ def apply_lib_vars(self): val = self.env[v + '_' + x] if val: self.env.append_value(v, val) + +@feature('cprogram', 'cshlib', 'cstaticlib') +@after('apply_lib_vars') +@before('apply_obj_vars') +def samba_before_apply_obj_vars(self): + """before apply_obj_vars for uselib, this removes the standard pathes""" + + def is_standard_libpath(env, path): + for _path in env.STANDARD_LIBPATH: + if _path == os.path.normpath(path): + return True + return False + + v = self.env + + for i in v['RPATH']: + if is_standard_libpath(v, i): + v['RPATH'].remove(i) + + for i in v['LIBPATH']: + if is_standard_libpath(v, i): + v['LIBPATH'].remove(i) diff --git a/buildtools/wafsamba/wscript b/buildtools/wafsamba/wscript index c49b20e1153..c81a7b3b098 100755 --- a/buildtools/wafsamba/wscript +++ b/buildtools/wafsamba/wscript @@ -211,6 +211,8 @@ def configure(conf): conf.check_tool('compiler_cc') + conf.CHECK_STANDARD_LIBPATH() + # we need git for 'waf dist' conf.find_program('git', var='GIT') |