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).
This commit is contained in:
Ray Speth 2012-11-14 21:07:03 +00:00
parent 9fdb345fdd
commit 04fb86b1ea
4 changed files with 19 additions and 5 deletions

View file

@ -187,36 +187,40 @@ defaults.debugCcFlags = ''
defaults.noDebugCcFlags = '' defaults.noDebugCcFlags = ''
defaults.debugLinkFlags = '' defaults.debugLinkFlags = ''
defaults.noDebugLinkFlags = '' defaults.noDebugLinkFlags = ''
defaults.warningFlags = ''
if env['CC'] == 'gcc' or env['CC'] == 'llvm-gcc': if env['CC'] == 'gcc' or env['CC'] == 'llvm-gcc':
defaults.cxxFlags = '-ftemplate-depth-128' defaults.cxxFlags = '-ftemplate-depth-128'
defaults.ccFlags = '-Wall -Wno-deprecated-declarations'
defaults.debugCcFlags = '-g' defaults.debugCcFlags = '-g'
defaults.noOptimizeCcFlags = '-O0 -fno-inline' defaults.noOptimizeCcFlags = '-O0 -fno-inline'
defaults.optimizeCcFlags = '-O3 -DNDEBUG -finline-functions -Wno-inline' defaults.optimizeCcFlags = '-O3 -DNDEBUG -finline-functions -Wno-inline'
defaults.warningFlags = '-Wall -Wno-deprecated-declarations'
elif env['CC'] == 'cl': # Visual Studio elif env['CC'] == 'cl': # Visual Studio
defaults.cxxFlags = '/EHsc' 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']) '/D_SCL_SECURE_NO_WARNINGS', '/D_CRT_SECURE_NO_WARNINGS', '/wd4996'])
defaults.debugCcFlags = '/Zi /Fd${TARGET}.pdb' defaults.debugCcFlags = '/Zi /Fd${TARGET}.pdb'
defaults.noOptimizeCcFlags = '/Od /Ob0' defaults.noOptimizeCcFlags = '/Od /Ob0'
defaults.optimizeCcFlags = '/O2 /DNDEBUG' defaults.optimizeCcFlags = '/O2 /DNDEBUG'
defaults.debugLinkFlags = '/DEBUG' defaults.debugLinkFlags = '/DEBUG'
defaults.warningFlags = '/W3'
elif env['CC'] == 'icc': elif env['CC'] == 'icc':
defaults.cxxFlags = '-ftemplate-depth-128' defaults.cxxFlags = '-ftemplate-depth-128'
defaults.ccFlags = '-Wcheck -vec-report0 -diag-disable 1478' defaults.ccFlags = '-vec-report0 -diag-disable 1478'
defaults.debugCcFlags = '-g' defaults.debugCcFlags = '-g'
defaults.noOptimizeCcFlags = '-O0 -fno-inline' defaults.noOptimizeCcFlags = '-O0 -fno-inline'
defaults.optimizeCcFlags = '-O3 -finline-functions -DNDEBUG' defaults.optimizeCcFlags = '-O3 -finline-functions -DNDEBUG'
defaults.warningFlags = '-Wcheck'
elif env['CC'] == 'clang': elif env['CC'] == 'clang':
defaults.cxxFlags = '' defaults.cxxFlags = ''
defaults.ccFlags = '-Wall -fcolor-diagnostics -Wno-deprecated-declarations' defaults.ccFlags = '-fcolor-diagnostics -Wno-deprecated-declarations'
defaults.debugCcFlags = '-g' defaults.debugCcFlags = '-g'
defaults.noOptimizeCcFlags = '-O0' defaults.noOptimizeCcFlags = '-O0'
defaults.optimizeCcFlags = '-O3 -DNDEBUG' defaults.optimizeCcFlags = '-O3 -DNDEBUG'
defaults.warningFlags = '-Wall'
else: else:
print "WARNING: Unrecognized C compiler '%s'" % env['CC'] print "WARNING: Unrecognized C compiler '%s'" % env['CC']
@ -467,6 +471,11 @@ opts.AddVariables(
('no_debug_linker_flags', ('no_debug_linker_flags',
'Additional options passed to the linker when debug=yes', 'Additional options passed to the linker when debug=yes',
defaults.noDebugLinkFlags), 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', ('extra_inc_dirs',
'Additional directories to search for header files (colon-separated list)', '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['CCFLAGS'] = listify(env['cc_flags']) + listify(env['thread_flags'])
env['LINKFLAGS'] += listify(env['thread_flags']) env['LINKFLAGS'] += listify(env['thread_flags'])
env['warning_flags'] = listify(env['warning_flags'])
if env['optimize']: if env['optimize']:
env['CCFLAGS'] += listify(env['optimize_flags']) env['CCFLAGS'] += listify(env['optimize_flags'])
else: else:

View file

@ -40,6 +40,7 @@ for subdir, extensions, setup in libs:
localenv = env.Clone() localenv = env.Clone()
localenv.Prepend(CPPPATH=Dir('#include')) localenv.Prepend(CPPPATH=Dir('#include'))
localenv.Prepend(CPPPATH=Dir('#src')) # todo: remove when not needed localenv.Prepend(CPPPATH=Dir('#src')) # todo: remove when not needed
localenv.Append(CCFLAGS=env['warning_flags'])
source = setup(localenv, subdir, extensions) source = setup(localenv, subdir, extensions)
objects = localenv.SharedObject(source) objects = localenv.SharedObject(source)
localenv.Depends(objects, localenv['config_h_target']) localenv.Depends(objects, localenv['config_h_target'])

View file

@ -6,7 +6,8 @@ localenv = env.Clone()
localenv.Prepend(CPPPATH=['#ext/gtest/include', '#include'], localenv.Prepend(CPPPATH=['#ext/gtest/include', '#include'],
LIBPATH='#build/lib') 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']['PYTHONPATH'] = Dir('#interfaces/python').abspath
localenv['ENV']['CANTERA_DATA'] = Dir('#build/data').abspath localenv['ENV']['CANTERA_DATA'] = Dir('#build/data').abspath

View file

@ -3,6 +3,7 @@ from buildutils import *
Import('env','build','install') Import('env','build','install')
localenv = env.Clone() localenv = env.Clone()
localenv.Prepend(CPPPATH=['#include', '#src', 'shared']) localenv.Prepend(CPPPATH=['#include', '#src', 'shared'])
localenv.Append(CCFLAGS=env['warning_flags'])
os.environ['PYTHONPATH'] = pjoin(os.getcwd(), '..', 'interfaces', 'python') os.environ['PYTHONPATH'] = pjoin(os.getcwd(), '..', 'interfaces', 'python')
os.environ['CANTERA_DATA'] = pjoin(os.getcwd(), '..', 'build', 'data') os.environ['CANTERA_DATA'] = pjoin(os.getcwd(), '..', 'build', 'data')