From 04fb86b1ea6d55acaade400cf4c40da92160902c Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Wed, 14 Nov 2012 21:07:03 +0000 Subject: [PATCH] Added a new SCons configuration variable 'warning_flags' This allows use of more extensive warning settings for the code that's actually part of Cantera without generating excessive warnings on code automatically generated code (e.g. f2c) or code that isn't part of Cantera proper (e.g. gtest, libexecstream). --- SConstruct | 19 +++++++++++++++---- src/SConscript | 1 + test/SConscript | 3 ++- test_problems/SConscript | 1 + 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/SConstruct b/SConstruct index da6c00acb..76abb58ae 100644 --- a/SConstruct +++ b/SConstruct @@ -187,36 +187,40 @@ defaults.debugCcFlags = '' defaults.noDebugCcFlags = '' defaults.debugLinkFlags = '' defaults.noDebugLinkFlags = '' +defaults.warningFlags = '' if env['CC'] == 'gcc' or env['CC'] == 'llvm-gcc': defaults.cxxFlags = '-ftemplate-depth-128' - defaults.ccFlags = '-Wall -Wno-deprecated-declarations' defaults.debugCcFlags = '-g' defaults.noOptimizeCcFlags = '-O0 -fno-inline' defaults.optimizeCcFlags = '-O3 -DNDEBUG -finline-functions -Wno-inline' + defaults.warningFlags = '-Wall -Wno-deprecated-declarations' elif env['CC'] == 'cl': # Visual Studio defaults.cxxFlags = '/EHsc' - defaults.ccFlags = ' '.join(['/MD', '/nologo', '/W3', '/Zc:wchar_t', '/Zc:forScope', + defaults.ccFlags = ' '.join(['/MD', '/nologo', '/Zc:wchar_t', '/Zc:forScope', '/D_SCL_SECURE_NO_WARNINGS', '/D_CRT_SECURE_NO_WARNINGS', '/wd4996']) defaults.debugCcFlags = '/Zi /Fd${TARGET}.pdb' defaults.noOptimizeCcFlags = '/Od /Ob0' defaults.optimizeCcFlags = '/O2 /DNDEBUG' defaults.debugLinkFlags = '/DEBUG' + defaults.warningFlags = '/W3' elif env['CC'] == 'icc': defaults.cxxFlags = '-ftemplate-depth-128' - defaults.ccFlags = '-Wcheck -vec-report0 -diag-disable 1478' + defaults.ccFlags = '-vec-report0 -diag-disable 1478' defaults.debugCcFlags = '-g' defaults.noOptimizeCcFlags = '-O0 -fno-inline' defaults.optimizeCcFlags = '-O3 -finline-functions -DNDEBUG' + defaults.warningFlags = '-Wcheck' elif env['CC'] == 'clang': defaults.cxxFlags = '' - defaults.ccFlags = '-Wall -fcolor-diagnostics -Wno-deprecated-declarations' + defaults.ccFlags = '-fcolor-diagnostics -Wno-deprecated-declarations' defaults.debugCcFlags = '-g' defaults.noOptimizeCcFlags = '-O0' defaults.optimizeCcFlags = '-O3 -DNDEBUG' + defaults.warningFlags = '-Wall' else: print "WARNING: Unrecognized C compiler '%s'" % env['CC'] @@ -467,6 +471,11 @@ opts.AddVariables( ('no_debug_linker_flags', 'Additional options passed to the linker when debug=yes', defaults.noDebugLinkFlags), + ('warning_flags', + """Additional compiler flags passed to the C/C++ compiler to enable + extra warnings. Used only when compiling source code that part of + Cantera (e.g. excluding code in the 'ext' directory).""", + defaults.warningFlags), ('extra_inc_dirs', 'Additional directories to search for header files (colon-separated list)', ''), @@ -709,6 +718,8 @@ env['CXXFLAGS'] = listify(env['cxx_flags']) env['CCFLAGS'] = listify(env['cc_flags']) + listify(env['thread_flags']) env['LINKFLAGS'] += listify(env['thread_flags']) +env['warning_flags'] = listify(env['warning_flags']) + if env['optimize']: env['CCFLAGS'] += listify(env['optimize_flags']) else: diff --git a/src/SConscript b/src/SConscript index 4e81fb772..82f5c1d81 100644 --- a/src/SConscript +++ b/src/SConscript @@ -40,6 +40,7 @@ for subdir, extensions, setup in libs: localenv = env.Clone() localenv.Prepend(CPPPATH=Dir('#include')) localenv.Prepend(CPPPATH=Dir('#src')) # todo: remove when not needed + localenv.Append(CCFLAGS=env['warning_flags']) source = setup(localenv, subdir, extensions) objects = localenv.SharedObject(source) localenv.Depends(objects, localenv['config_h_target']) diff --git a/test/SConscript b/test/SConscript index 67fd227aa..e933d6525 100644 --- a/test/SConscript +++ b/test/SConscript @@ -6,7 +6,8 @@ localenv = env.Clone() localenv.Prepend(CPPPATH=['#ext/gtest/include', '#include'], LIBPATH='#build/lib') -localenv.Append(LIBS=['gtest'] + localenv['cantera_libs']) +localenv.Append(LIBS=['gtest'] + localenv['cantera_libs'], + CCFLAGS=env['warning_flags']) localenv['ENV']['PYTHONPATH'] = Dir('#interfaces/python').abspath localenv['ENV']['CANTERA_DATA'] = Dir('#build/data').abspath diff --git a/test_problems/SConscript b/test_problems/SConscript index 8317aa280..89320d595 100644 --- a/test_problems/SConscript +++ b/test_problems/SConscript @@ -3,6 +3,7 @@ from buildutils import * Import('env','build','install') localenv = env.Clone() localenv.Prepend(CPPPATH=['#include', '#src', 'shared']) +localenv.Append(CCFLAGS=env['warning_flags']) os.environ['PYTHONPATH'] = pjoin(os.getcwd(), '..', 'interfaces', 'python') os.environ['CANTERA_DATA'] = pjoin(os.getcwd(), '..', 'build', 'data')