Author: brane Date: Wed Jun 25 01:34:51 2025 New Revision: 1926709 URL: http://svn.apache.org/viewvc?rev=1926709&view=rev Log: SERF-133: Don't override the user's optimization, debugging or C-standard flags that the user provided on the command line.
* build/scons_extras.py: Add required imports. (__env_munge_if): New. Invokes an environment method if the given filtering constraints are met. (AddEnvironmentMethods): New. Add methods SerfAppendIf and SerfPrependIf to the SCons environment class. Both use __env_munge_if. * SConstruct: Call build.scons_extras.AddEnvironmentMethods(), then add the -std=c89, -g and -O2 compiler flags only if equivalents were not already set by some other mechanism. Modified: serf/trunk/SConstruct serf/trunk/build/scons_extras.py Modified: serf/trunk/SConstruct URL: http://svn.apache.org/viewvc/serf/trunk/SConstruct?rev=1926709&r1=1926708&r2=1926709&view=diff ============================================================================== --- serf/trunk/SConstruct (original) +++ serf/trunk/SConstruct Wed Jun 25 01:34:51 2025 @@ -42,6 +42,7 @@ sys.path.insert(0, src_dir) import build.scons_extras import build.exports +build.scons_extras.AddEnvironmentMethods() custom_tests = {'CheckGnuCC': build.scons_extras.CheckGnuCC} # SCons 4.7 introduced the function argument list parameter to CheckFunc. @@ -326,16 +327,19 @@ if sys.platform != 'win32': env = conf.Finish() if have_gcc: - env.Append(CFLAGS=['-std=c89']) + # env.Append(CFLAGS=['-std=c89']) + env.SerfAppendIf(['CFLAGS'], r'-(ansi|std=c\d+)', CFLAGS=['-std=c89']) env.Append(CCFLAGS=['-Wdeclaration-after-statement', '-Wmissing-prototypes', '-Wall']) if debug: - env.Append(CCFLAGS=['-g']) + # env.Append(CCFLAGS=['-g']) + env.SerfAppendIf(['CFLAGS', 'CCFLAGS'], r'-g\S*', CCFLAGS=['-g']) env.Append(CPPDEFINES=['DEBUG', '_DEBUG']) else: - env.Append(CCFLAGS=['-O2']) + # env.Append(CCFLAGS=['-O2']) + env.SerfAppendIf(['CFLAGS', 'CCFLAGS'], r'-O\S*', CCFLAGS=['-O2']) env.Append(CPPDEFINES=['NDEBUG']) ### works for Mac OS. probably needs to change Modified: serf/trunk/build/scons_extras.py URL: http://svn.apache.org/viewvc/serf/trunk/build/scons_extras.py?rev=1926709&r1=1926708&r2=1926709&view=diff ============================================================================== --- serf/trunk/build/scons_extras.py (original) +++ serf/trunk/build/scons_extras.py Wed Jun 25 01:34:51 2025 @@ -19,6 +19,11 @@ # under the License. # =================================================================== +import re + +import SCons.Environment +import SCons.Util + def CheckGnuCC(context): '''Check if the compiler is compatible with gcc.''' @@ -35,6 +40,33 @@ oh noes! return result +def __env_munge_if(env, method, variables, pattern, **kwargs): + '''Invoke `env`.`method`(**`kwargs`), unless `pattern` matches the + values in `variables` that are also in `env`. + ''' + + rx = re.compile(pattern) + for var in variables: + values = env.get(var, []) + for value in values: + if rx.search(value): + return + getattr(env, method)(**kwargs) + + +def AddEnvironmentMethods(): + SCons.Util.AddMethod( + SCons.Environment.Environment, + lambda env, variables, pattern, **kwargs: + __env_munge_if(env, 'Append', variables, pattern, **kwargs), + 'SerfAppendIf') + SCons.Util.AddMethod( + SCons.Environment.Environment, + lambda env, variables, pattern, **kwargs: + __env_munge_if(env, 'Prepend', variables, pattern, **kwargs), + 'SerfPrependIf') + + # # The following code is derived from SCons, version 4.7.0. #