aboutsummaryrefslogtreecommitdiffstats
path: root/scons/SConscript.common
diff options
context:
space:
mode:
authorvladlosev <vladlosev@861a406c-534a-0410-8894-cb66d6ee9925>2009-10-14 22:33:03 +0000
committervladlosev <vladlosev@861a406c-534a-0410-8894-cb66d6ee9925>2009-10-14 22:33:03 +0000
commit060804deb8c05b5ea5735b875eaea2c7493e2262 (patch)
treec3499832d2951338fe843bfcceb51c934a9ee100 /scons/SConscript.common
parent9007cb4f8af796f545fe7e1f552e78bf7296d18a (diff)
downloadgoogletest-060804deb8c05b5ea5735b875eaea2c7493e2262.tar.gz
googletest-060804deb8c05b5ea5735b875eaea2c7493e2262.tar.bz2
googletest-060804deb8c05b5ea5735b875eaea2c7493e2262.zip
Fixes: Scons build file broken when used in another SConstruct; warning in VC 8.0 when compiled with /Wp64
Diffstat (limited to 'scons/SConscript.common')
-rw-r--r--scons/SConscript.common140
1 files changed, 140 insertions, 0 deletions
diff --git a/scons/SConscript.common b/scons/SConscript.common
new file mode 100644
index 00000000..a49cf0a3
--- /dev/null
+++ b/scons/SConscript.common
@@ -0,0 +1,140 @@
+# -*- Python -*-
+# Copyright 2008 Google Inc. All Rights Reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Author: vladl@google.com (Vlad Losev)
+#
+# Shared SCons utilities for building Google Test's own tests.
+#
+
+EnsurePythonVersion(2, 3)
+
+
+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)
+ 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."""
+
+ env['OBJ_SUFFIX'] = '_ex'
+ 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."""
+
+ env['OBJ_SUFFIX'] = '_no_rtti'
+ if env['PLATFORM'] == 'win32':
+ env.Append(CCFLAGS=['/GR-'])
+ else:
+ env.Append(CCFLAGS=['-fno-rtti'])
+ env.Append(CPPDEFINES='GTEST_HAS_RTTI=0')
+ NoRtti = classmethod(NoRtti)
+
+
+sconscript_exports = {'EnvCreator': EnvCreator}
+Return('sconscript_exports')