USE_TOP_LEVEL = False
+def is_standard_libpath(env, path):
+ for _path in env.STANDARD_LIBPATH:
+ if _path == os.path.normpath(path):
+ return True
+ return False
+
def get_cc_version(conf, cc, gcc=False, icc=False):
cmd = cc + ['-dM', '-E', '-']
v.append_value('LINKFLAGS', v['FULLSTATIC_MARKER'])
for i in v['RPATH']:
+ if is_standard_libpath(v, i):
+ continue
if i and rpath_st:
app('LINKFLAGS', rpath_st % i)
for i in v['LIBPATH']:
+ if is_standard_libpath(v, i):
+ continue
app('LINKFLAGS', libpath_st % i)
app('LINKFLAGS', staticlibpath_st % i)
import Build, Utils, Configure, Task, Options, Logs, TaskGen
from Constants import *
from Configure import conf, conftest
+import ccroot
cfg_ver = {
'atleast-version': '>=',
app('LIB_' + uselib, ot)
elif st == '-L':
if not ot: ot = lst.pop(0)
- app('LIBPATH_' + uselib, ot)
+ if not ccroot.is_standard_libpath(env, ot):
+ app('LIBPATH_' + uselib, ot)
elif x == '-pthread' or x.startswith('+'):
app('CCFLAGS_' + uselib, x)
app('CXXFLAGS_' + uselib, x)
# in too old versions of our internal libs.
#
elif x.startswith('-Wl,-R'):
- app('RPATH_' + uselib, x[6:])
+ if not ccroot.is_standard_libpath(env,x[6:]):
+ app('RPATH_' + uselib, x[6:])
elif x.startswith('-Wl,-rpath,'):
- app('RPATH_' + uselib, x[11:])
+ if not ccroot.is_standard_libpath(env, x[11:]):
+ app('RPATH_' + uselib, x[11:])
elif x.startswith('-Wl'):
app('LINKFLAGS_' + uselib, x)
elif x.startswith('-m') or x.startswith('-f'):
from TaskGen import extension, before, after, feature
from Configure import conf
from config_c import parse_flags
+import ccroot
EXT_PY = ['.py']
FRAG_2 = '''
result = conf.check(lib=name, uselib='PYEMBED', libpath=path)
if result:
- env['LIBPATH_PYEMBED'] = path
+ if not ccroot.is_standard_libpath(env, path[0]):
+ env['LIBPATH_PYEMBED'] = path
env.append_value('LIB_PYEMBED', name)
else:
conf.log.write("\n\n### LIB NOT FOUND\n")
help='tag release in git at the same time',
type='string', action='store', dest='TAG_RELEASE')
+#
+# 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...)
+#
+def get_cc_std_libpath(cc):
+ # at least gcc and clang support this:
+ try:
+ cmd = 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
+
+ return dirlist
@wafsamba.runonce
def configure(conf):
conf.check_tool('compiler_cc')
+ conf.env.STANDARD_LIBPATH = get_cc_std_libpath(conf.env.CC)
+
# we need git for 'waf dist'
conf.find_program('git', var='GIT')