diff options
author | zhanyong.wan <zhanyong.wan@861a406c-534a-0410-8894-cb66d6ee9925> | 2009-09-30 23:55:07 (GMT) |
---|---|---|
committer | zhanyong.wan <zhanyong.wan@861a406c-534a-0410-8894-cb66d6ee9925> | 2009-09-30 23:55:07 (GMT) |
commit | 95279071b17f9f147c8f627b51984a55c1338e78 (patch) | |
tree | 52cadfc5b7ac934b228f5f726758274e6502fd5a /scons | |
parent | bd851333e89517762c91a3fef67cf25a6f1bd37a (diff) | |
download | googletest-95279071b17f9f147c8f627b51984a55c1338e78.zip googletest-95279071b17f9f147c8f627b51984a55c1338e78.tar.gz googletest-95279071b17f9f147c8f627b51984a55c1338e78.tar.bz2 |
Refactors the scons script (by Vlad Losev).
Fixes a typo in __GNUC__ (by Zhanyong Wan).
Diffstat (limited to 'scons')
-rw-r--r-- | scons/SConscript | 116 | ||||
-rw-r--r-- | scons/SConstruct.common | 109 |
2 files changed, 112 insertions, 113 deletions
diff --git a/scons/SConscript b/scons/SConscript index 51a7584..11a105d 100644 --- a/scons/SConscript +++ b/scons/SConscript @@ -1,5 +1,4 @@ -#!/usr/bin/python2.4 -# +# -*- Python -*- # Copyright 2008 Google Inc. All Rights Reserved. # # Redistribution and use in source and binary forms, with or without @@ -96,118 +95,9 @@ import os ############################################################ # Environments for building the targets, sorted by name. - -class EnvCreator: - """Creates new customized environments from a base one.""" - - @staticmethod - def _Remove(env, attribute, value): - """Removes the given attribute value from the environment.""" - - attribute_values = env[attribute] - if value in attribute_values: - attribute_values.remove(value) - - @staticmethod - def Create(base_env, modifier=None): - # User should NOT create more than one environment with the same - # modifier (including None). - new_env = env.Clone() - if modifier: - modifier(new_env) - else: - new_env['OBJ_SUFFIX'] = '' # Default suffix for unchanged environment. - - return new_env; - - # Each of the following methods modifies the environment for a particular - # purpose and can be used by clients for creating new environments. Each - # one needs to set the OBJ_SUFFIX variable to a unique suffix to - # differentiate targets built with that environment. Otherwise, SCons may - # complain about same target built with different settings. - - @staticmethod - def UseOwnTuple(env): - """Instructs Google Test to use its internal implementation of tuple.""" - - env['OBJ_SUFFIX'] = '_use_own_tuple' - env.Append(CPPDEFINES = 'GTEST_USE_OWN_TR1_TUPLE=1') - - @staticmethod - def WarningOk(env): - """Does not treat warnings as errors. - - Necessary for compiling gtest_unittest.cc, which triggers a gcc - warning when testing EXPECT_EQ(NULL, ptr).""" - - env['OBJ_SUFFIX'] = '_warning_ok' - if env['PLATFORM'] == 'win32': - EnvCreator._Remove(env, 'CCFLAGS', '-WX') - else: - EnvCreator._Remove(env, 'CCFLAGS', '-Werror') - - @staticmethod - def WithExceptions(env): - """Re-enables exceptions.""" - - # We compile gtest_unittest in this environment which means we need to - # allow warnings here as well. - EnvCreator.WarningOk(env) - env['OBJ_SUFFIX'] = '_ex' # Overrides the suffix supplied by WarningOK. - if env['PLATFORM'] == 'win32': - env.Append(CCFLAGS=['/EHsc']) - env.Append(CPPDEFINES='_HAS_EXCEPTIONS=1') - # Undoes the _TYPEINFO_ hack, which is unnecessary and only creates - # trouble when exceptions are enabled. - EnvCreator._Remove(env, 'CPPDEFINES', '_TYPEINFO_') - EnvCreator._Remove(env, 'CPPDEFINES', '_HAS_EXCEPTIONS=0') - else: - env.Append(CCFLAGS='-fexceptions') - EnvCreator._Remove(env, 'CCFLAGS', '-fno-exceptions') - - @staticmethod - def LessOptimized(env): - """Disables certain optimizations on Windows. - - We need to disable some optimization flags for some tests on - Windows; otherwise the redirection of stdout does not work - (apparently because of a compiler bug).""" - - env['OBJ_SUFFIX'] = '_less_optimized' - if env['PLATFORM'] == 'win32': - for flag in ['/O1', '/Os', '/Og', '/Oy']: - EnvCreator._Remove(env, 'LINKFLAGS', flag) - - @staticmethod - def WithThreads(env): - """Allows use of threads. - - Currently only enables pthreads under GCC.""" - - env['OBJ_SUFFIX'] = '_with_threads' - if env['PLATFORM'] != 'win32': - # Assuming POSIX-like environment with GCC. - # TODO(vladl@google.com): sniff presence of pthread_atfork instead of - # selecting on a platform. - env.Append(CCFLAGS=['-pthread']) - env.Append(LINKFLAGS=['-pthread']) - - @staticmethod - def NoRtti(env): - """Disables RTTI support.""" - - # We compile gtest_unittest in this environment which means we need to - # allow warnings here as well. - EnvCreator.WarningOk(env) - env['OBJ_SUFFIX'] = '_no_rtti' # Overrides suffix supplied by WarningOK. - if env['PLATFORM'] == 'win32': - env.Append(CCFLAGS=['/GR-']) - else: - env.Append(CCFLAGS=['-fno-rtti']) - env.Append(CPPDEFINES='GTEST_HAS_RTTI=0') - - Import('env') + +EnvCreator = SConscript('SConstruct.common').EnvCreator env = EnvCreator.Create(env) # Note: The relative paths in SConscript files are relative to the location diff --git a/scons/SConstruct.common b/scons/SConstruct.common index 92300c1..65c8053 100644 --- a/scons/SConstruct.common +++ b/scons/SConstruct.common @@ -247,5 +247,114 @@ class SConstructHelper: variant_dir=env['BUILD_DIR'], duplicate=0) + class EnvCreator: + """Creates new customized environments from a base one.""" + + def _Remove(cls, env, attribute, value): + """Removes the given attribute value from the environment.""" + + attribute_values = env[attribute] + if value in attribute_values: + attribute_values.remove(value) + _Remove = classmethod(_Remove) + + def Create(cls, base_env, modifier=None): + # User should NOT create more than one environment with the same + # modifier (including None). + env = base_env.Clone() + if modifier: + modifier(env) + else: + env['OBJ_SUFFIX'] = '' # Default suffix for unchanged environment. + return env; + Create = classmethod(Create) + + # Each of the following methods modifies the environment for a particular + # purpose and can be used by clients for creating new environments. Each + # one needs to set the OBJ_SUFFIX variable to a unique suffix to + # differentiate targets built with that environment. Otherwise, SCons may + # complain about same target built with different settings. + + def UseOwnTuple(cls, env): + """Instructs Google Test to use its internal implementation of tuple.""" + + env['OBJ_SUFFIX'] = '_use_own_tuple' + env.Append(CPPDEFINES = 'GTEST_USE_OWN_TR1_TUPLE=1') + UseOwnTuple = classmethod(UseOwnTuple) + + def WarningOk(cls, env): + """Does not treat warnings as errors. + + Necessary for compiling gtest_unittest.cc, which triggers a gcc + warning when testing EXPECT_EQ(NULL, ptr).""" + + env['OBJ_SUFFIX'] = '_warning_ok' + if env['PLATFORM'] == 'win32': + cls._Remove(env, 'CCFLAGS', '-WX') + else: + cls._Remove(env, 'CCFLAGS', '-Werror') + WarningOk = classmethod(WarningOk) + + def WithExceptions(cls, env): + """Re-enables exceptions.""" + + # We compile gtest_unittest in this environment which means we need to + # allow warnings here as well. + cls.WarningOk(env) + env['OBJ_SUFFIX'] = '_ex' # Overrides the suffix supplied by WarningOK. + if env['PLATFORM'] == 'win32': + env.Append(CCFLAGS=['/EHsc']) + env.Append(CPPDEFINES='_HAS_EXCEPTIONS=1') + # Undoes the _TYPEINFO_ hack, which is unnecessary and only creates + # trouble when exceptions are enabled. + cls._Remove(env, 'CPPDEFINES', '_TYPEINFO_') + cls._Remove(env, 'CPPDEFINES', '_HAS_EXCEPTIONS=0') + else: + env.Append(CCFLAGS='-fexceptions') + cls._Remove(env, 'CCFLAGS', '-fno-exceptions') + WithExceptions = classmethod(WithExceptions) + + def LessOptimized(cls, env): + """Disables certain optimizations on Windows. + + We need to disable some optimization flags for some tests on + Windows; otherwise the redirection of stdout does not work + (apparently because of a compiler bug).""" + + env['OBJ_SUFFIX'] = '_less_optimized' + if env['PLATFORM'] == 'win32': + for flag in ['/O1', '/Os', '/Og', '/Oy']: + cls._Remove(env, 'LINKFLAGS', flag) + LessOptimized = classmethod(LessOptimized) + + def WithThreads(cls, env): + """Allows use of threads. + + Currently only enables pthreads under GCC.""" + + env['OBJ_SUFFIX'] = '_with_threads' + if env['PLATFORM'] != 'win32': + # Assuming POSIX-like environment with GCC. + # TODO(vladl@google.com): sniff presence of pthread_atfork instead of + # selecting on a platform. + env.Append(CCFLAGS=['-pthread']) + env.Append(LINKFLAGS=['-pthread']) + WithThreads = classmethod(WithThreads) + + def NoRtti(cls, env): + """Disables RTTI support.""" + + # We compile gtest_unittest in this environment which means we need to + # allow warnings here as well. + cls.WarningOk(env) + env['OBJ_SUFFIX'] = '_no_rtti' # Overrides suffix supplied by WarningOK. + if env['PLATFORM'] == 'win32': + env.Append(CCFLAGS=['/GR-']) + else: + env.Append(CCFLAGS=['-fno-rtti']) + env.Append(CPPDEFINES='GTEST_HAS_RTTI=0') + NoRtti = classmethod(NoRtti) + + sconstruct_helper = SConstructHelper() Return('sconstruct_helper') |