Supports building gtest as a DLL (by Vlad Losev).

This commit is contained in:
zhanyong.wan
2009-12-18 05:23:04 +00:00
parent 88e97c822c
commit a3dd9d97c5
7 changed files with 834 additions and 2 deletions

View File

@@ -292,6 +292,25 @@ if BUILD_TESTS:
GtestBinary(env_without_rtti, 'gtest_no_rtti_test', gtest_main_no_rtti,
['../test/gtest_unittest.cc'])
# Tests that gtest works when built as a DLL on Windows.
# We don't need to actually run this test.
# Note: this is not supported under VC 7.1.
if env['PLATFORM'] == 'win32' and env.get('GTEST_BUILD_DLL_TEST', None):
test_env = EnvCreator.Create(env, EnvCreator.DllBuild)
dll_env = test_env.Clone()
dll_env.Append(LINKFLAGS=['-DEF:../src/gtest.def'])
gtest_dll = dll_env.SharedLibrary(
target='gtest_dll',
source=[dll_env.SharedObject('gtest_all_dll',
'../src/gtest-all.cc'),
dll_env.SharedObject('gtest_main_dll',
'../src/gtest_main.cc')])
# TODO(vladl@google.com): Get rid of the .data[1] hack. Find a proper
# way to depend on a shared library without knowing its path in advance.
test_env.Program('gtest_dll_test_',
['../test/gtest_dll_test_.cc', gtest_dll.data[1]])
############################################################
# Sample targets.

View File

@@ -132,6 +132,24 @@ class EnvCreator:
env.Append(CPPDEFINES='GTEST_HAS_RTTI=0')
NoRtti = classmethod(NoRtti)
def DllBuild(cls, env):
"""Enables building gtets as a DLL."""
env['OBJ_SUFFIX'] = '_dll'
# -MT(d) instructs MSVC to link to the static version of the C++
# runtime library; -MD(d) tells it to link to the DLL version.
flags = env['CCFLAGS']
if '-MTd' in flags:
flags.remove('-MTd')
flags.append('-MDd')
elif '-MT' in flags:
flags.remove('-MT')
flags.append('-MD')
# Disables the "non dll-interface class 'stdext::exception' used as
# base for dll-interface class" warning triggered by the STL code.
env.Append(CCFLAGS=['/wd4275'])
DllBuild = classmethod(DllBuild)
sconscript_exports = {'EnvCreator': EnvCreator}
Return('sconscript_exports')

View File

@@ -56,6 +56,8 @@ win_base = sconstruct_helper.MakeWinBaseEnvironment()
# setting for our users.
if win_base.get('MSVS_VERSION', None) == '7.1':
sconstruct_helper.EnableExceptions(win_base)
else:
win_base['GTEST_BUILD_DLL_TEST'] = True
sconstruct_helper.MakeWinDebugEnvironment(win_base, 'win-dbg')
sconstruct_helper.MakeWinOptimizedEnvironment(win_base, 'win-opt')