Supports building gtest as a DLL (by Vlad Losev).
This commit is contained in:
@@ -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.
|
||||
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user