From 6f4c15d0779dc6c96c0dac4dab08a4a6981ed7b8 Mon Sep 17 00:00:00 2001 From: Mickey Rose Date: Sun, 18 Aug 2019 23:01:11 +0200 Subject: [PATCH] scons: improve parsing CUSTOM_LDFLAGS With the help of SCons.Environment.ParseFlags, split user-supplied CUSTOM_LDFLAGS into appropriate option lists: LIBPATH, LIBS, etc. Known non-linker options (like -Dx -I.) will be reported and ignored, unrecognized options will be appended to LINKFLAGS. --- SConstruct | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/SConstruct b/SConstruct index 13f6395f0..e1dd2e6c3 100644 --- a/SConstruct +++ b/SConstruct @@ -495,6 +495,7 @@ pickle_store = [# Scons internal variables 'LIBPATH', 'LIBS', 'LINKFLAGS', + 'RPATH', 'CUSTOM_LDFLAGS', # user submitted 'CUSTOM_DEFINES', # user submitted 'CUSTOM_CXXFLAGS', # user submitted @@ -1420,7 +1421,23 @@ if not preconfigured: env.Append(CXXFLAGS = env['CUSTOM_CXXFLAGS']) env.Append(CFLAGS = env['CUSTOM_CFLAGS']) env.Append(LINKFLAGS = DEFAULT_CXX14_LINKFLAGS) - env.Append(LINKFLAGS = env['CUSTOM_LDFLAGS']) + + custom_ldflags = env.ParseFlags(env['CUSTOM_LDFLAGS']) + # ParseFlags puts everything it does not recognize into CCFLAGS, + # but let's assume the user knows better, put those in LINKFLAGS + env.Append(LINKFLAGS = custom_ldflags.pop('CCFLAGS')) + env.Append(LINKFLAGS = custom_ldflags.pop('LINKFLAGS'), + LIBS = custom_ldflags.pop('LIBS')) + env.AppendUnique(FRAMEWORKS = custom_ldflags.pop('FRAMEWORKS'), + LIBPATH = custom_ldflags.pop('LIBPATH'), + RPATH = custom_ldflags.pop('RPATH')) + + invalid_ldflags = {k:v for k,v in custom_ldflags.items() if v} + if invalid_ldflags: + color_print(3, 'Warning: CUSTOM_LDFLAGS contained some flags that SCons recognized as not for linker.') + color_print(3, 'The following flags will be ignored:') + for key, value in invalid_ldflags.items(): + color_print(3, '\t%s = %r' % (key, value)) ### platform specific bits