@@ -18,140 +18,136 @@ find_package(PkgConfig)
1818pkg_check_modules(PC_GTEST QUIET gtest)
1919
2020set (GTEST_ROOT "" CACHE PATH "Set the location of the Google Test library and header" )
21- if (NOT GTEST_ROOT AND GTEST_DIR)
22- set (GTEST_ROOT "${GTEST_DIR} " CACHE PATH "Set the location of the Google Test library and header" FORCE)
23- endif ()
2421
22+ if (NOT DEFINED GTEST_TAG)
23+ set (GTEST_TAG "release-1.8.1" CACHE PATH "Git tag for automatic download of GTest" )
24+ endif ()
25+ string (REGEX REPLACE "release-" "" GTEST_VERSION_NUM ${GTEST_TAG} )
2526
26- find_path (GTEST_INCLUDE_DIR
27- NAMES gtest/gtest.h
28- HINTS ${PC_GTEST_INCLUDEDIR} ${PC_GTEST_INCLUDE_DIRS} ${GTEST_ROOT} $ENV{GTEST_DIR}
29- PATH_SUFFIXES . include
30- )
31-
32- find_library (GTEST_LIBRARY
33- NAMES gtest
34- HINTS ${PC_GTEST_INCLUDEDIR} ${PC_GTEST_INCLUDE_DIRS} ${GTEST_ROOT} $ENV{GTEST_DIR}
35- PATH_SUFFIXES . lib lib64
36- )
37- find_library (GTEST_MAIN_LIBRARY
38- NAMES gtest_main
39- HINTS ${PC_GTEST_INCLUDEDIR} ${PC_GTEST_INCLUDE_DIRS} ${GTEST_ROOT} $ENV{GTEST_DIR}
40- PATH_SUFFIXES . lib lib64
41- )
42-
43- find_library (GTEST_LIBRARY_DEBUG
44- NAMES gtest-d
45- HINTS ${PC_GTEST_INCLUDEDIR} ${PC_GTEST_INCLUDE_DIRS} ${GTEST_ROOT} $ENV{GTEST_DIR}
46- PATH_SUFFIXES . lib lib64
47- )
48- find_library (GTEST_MAIN_LIBRARY_DEBUG
49- NAMES gtest_main-d
50- HINTS ${PC_GTEST_INCLUDEDIR} ${PC_GTEST_INCLUDE_DIRS} ${GTEST_ROOT} $ENV{GTEST_DIR}
51- PATH_SUFFIXES . lib lib64
52- )
53-
54- find_path (GMOCK_INCLUDE_DIR_TEST
55- NAMES gmock/gmock.h
56- HINTS ${PC_GMOCK_INCLUDEDIR} ${PC_GMOCK_INCLUDE_DIRS} ${GMOCK_ROOT} $ENV{GMOCK_DIR}
57- PATH_SUFFIXES . include
58- )
59-
60- find_library (GMOCK_LIBRARY_TEST
61- NAMES gmock
62- HINTS ${PC_GMOCK_INCLUDEDIR} ${PC_GMOCK_INCLUDE_DIRS} ${GMOCK_ROOT} $ENV{GMOCK_DIR}
63- PATH_SUFFIXES . lib lib64
64- )
65- find_library (GMOCK_MAIN_LIBRARY_TEST
66- NAMES gmock_main
67- HINTS ${PC_GMOCK_INCLUDEDIR} ${PC_GMOCK_INCLUDE_DIRS} ${GMOCK_ROOT} $ENV{GMOCK_DIR}
68- PATH_SUFFIXES . lib lib64
69- )
70-
71- if (NOT GTEST_INCLUDE_DIR OR NOT GTEST_LIBRARY OR NOT GTEST_MAIN_LIBRARY OR NOT GMOCK_INCLUDE_DIR_TEST OR NOT GMOCK_LIBRARY_TEST OR NOT GMOCK_MAIN_LIBRARY_TEST)
7227
28+ # OR NOT GMOCK_INCLUDE_DIR_TEST OR NOT GMOCK_LIBRARY_TEST OR NOT GMOCK_MAIN_LIBRARY_TEST
29+ if (NOT GTEST_INCLUDE_DIR OR NOT GTEST_LIBRARY OR NOT GTEST_MAIN_LIBRARY)
7330 if (NOT GTEST_INCLUDE_DIR)
7431 message (STATUS "GTest include directory not found - GTEST_ROOT: ${GTEST_ROOT} " )
7532 elseif (NOT GTEST_LIBRARY)
7633 message (STATUS "GTest library not found - GTEST_ROOT: ${GTEST_ROOT} " )
7734 elseif (NOT GTEST_MAIN_LIBRARY)
7835 message (STATUS "GTest main library not found - GTEST_ROOT: ${GTEST_ROOT} " )
7936 endif ()
80- if (MSVC )
81- set (USE_OWN_TR1_TUPLE 0)
82- else ()
83- set (USE_OWN_TR1_TUPLE 1)
84- endif ()
85- if (FORCE_SHARED_CRT)
37+
38+ if (NOT DISABLE_SHARED_CRT)
8639 message (STATUS "Enable Shared CRT for GTest" )
8740 set (gtest_force_shared_crt ON )
8841 else ()
8942 set (gtest_force_shared_crt OFF )
9043 endif ()
44+
9145 set (GTEST_PREFIX ${CMAKE_BINARY_DIR} /external/gtest)
92- if (FORCE_X86)
93- set (EXTRA_FLAGS " -m32" )
94- endif ()
95- if (MSVC )
96- set (EXTRA_FLAGS "${EXTRA_FLAGS} -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING=1" )
46+
47+ set (GTEST_LIBRARY_PATH ${GTEST_PREFIX} /dist/lib CACHE INTERNAL "Path to Google Test Library" )
48+ set (GTEST_MAIN_LIBRARY_DEBUG ${GTEST_LIBRARY_PATH} /${CMAKE_STATIC_LIBRARY_PREFIX} gtest_maind${CMAKE_STATIC_LIBRARY_SUFFIX} )
49+ set (GTEST_LIBRARY_DEBUG ${GTEST_LIBRARY_PATH} /${CMAKE_STATIC_LIBRARY_PREFIX} gtestd${CMAKE_STATIC_LIBRARY_SUFFIX} )
50+ set (GMOCK_LIBRARY_DEBUG ${GTEST_LIBRARY_PATH} /${CMAKE_STATIC_LIBRARY_PREFIX} gmockd${CMAKE_STATIC_LIBRARY_SUFFIX} )
51+
52+ set (GTEST_LIBRARY_RELEASE ${GTEST_LIBRARY_PATH} /${CMAKE_STATIC_LIBRARY_PREFIX} gtest${CMAKE_STATIC_LIBRARY_SUFFIX} )
53+ set (GMOCK_LIBRARY_RELEASE ${GTEST_LIBRARY_PATH} /${CMAKE_STATIC_LIBRARY_PREFIX} gmock${CMAKE_STATIC_LIBRARY_SUFFIX} )
54+ set (GTEST_MAIN_LIBRARY_RELEASE ${GTEST_LIBRARY_PATH} /${CMAKE_STATIC_LIBRARY_PREFIX} gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX} )
55+ set (GTEST_INCLUDE_DIR ${GTEST_PREFIX} /dist/include )
56+
57+ if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
58+ set (GMOCK_LIBRARY ${GMOCK_LIBRARY_DEBUG} )
59+ set (GTEST_LIBRARY ${GTEST_LIBRARY_DEBUG} )
60+ set (GTEST_MAIN_LIBRARY ${GTEST_MAIN_LIBRARY_DEBUG} )
61+ else ()
62+ set (GMOCK_LIBRARY ${GMOCK_LIBRARY_RELEASE} )
63+ set (GTEST_LIBRARY ${GTEST_LIBRARY_RELEASE} )
64+ set (GTEST_MAIN_LIBRARY ${GTEST_MAIN_LIBRARY_RELEASE} )
9765 endif ()
98- string (REPLACE ";" "$<SEMICOLON>" CMAKE_OSX_ARCHITECTURES_ "${CMAKE_OSX_ARCHITECTURES} " )
66+ string (REPLACE ";" "$<SEMICOLON>" CMAKE_OSX_ARCHITECTURES_NEW "${CMAKE_OSX_ARCHITECTURES} " )
67+ message (STATUS "CMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} " )
9968 include (ExternalProject)
10069 ExternalProject_Add(
101- gtest
70+ gtest_download
10271 PREFIX ${GTEST_PREFIX}
10372 GIT_REPOSITORY https://github.com/google/googletest.git
104- GIT_TAG release-1.7.0
105- CMAKE_ARGS "-DCMAKE_CXX_FLAGS=-DGTEST_USE_OWN_TR1_TUPLE=${USE_OWN_TR1_TUPLE}${EXTRA_FLAGS} "
106- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
107- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=${GTEST_PREFIX} /lib64
108- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG=${GTEST_PREFIX} /lib64
109- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE=${GTEST_PREFIX} /lib64
110- -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${GTEST_PREFIX} /lib64
111- -DCMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG=${GTEST_PREFIX} /lib64
112- -DCMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE=${GTEST_PREFIX} /lib64
113- -Dgtest_force_shared_crt=${gtest_force_shared_crt}
114- -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES_}
73+ GIT_TAG ${GTEST_TAG}
74+ CMAKE_ARGS
75+ "-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} "
76+ "-DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS} "
77+ "-DCMAKE_STATIC_LINKER_FLAGS=${CMAKE_STATIC_LINKER_FLAGS} "
78+ "-DCMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS} "
79+ "-DCMAKE_MODULE_LINKER_FLAGS=${CMAKE_MODULE_LINKER_FLAGS} "
80+ -G${CMAKE_GENERATOR}
81+ -DCMAKE_POLICY_VERSION_MINIMUM=3.5
82+ -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM}
83+ -DCMAKE_GENERATOR_TOOLSET=${CMAKE_GENERATOR_TOOLSET}
84+ -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
85+ -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES_NEW}
86+ -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=${GTEST_LIBRARY_PATH}
87+ -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG=${GTEST_LIBRARY_PATH}
88+ -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE=${GTEST_LIBRARY_PATH}
89+ -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${GTEST_LIBRARY_PATH}
90+ -DCMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG=${GTEST_LIBRARY_PATH}
91+ -DCMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE=${GTEST_LIBRARY_PATH}
92+ -Dgtest_force_shared_crt=${gtest_force_shared_crt}
93+ -DINSTALL_GTEST=OFF
11594 INSTALL_COMMAND ""
116- #SOURCE_DIR ${GTEST_PREFIX}/src/gtest
95+ UPDATE_DISCONNECTED ${UPDATE_DISCONNECTED}
11796 LOG_DOWNLOAD OFF
11897 LOG_CONFIGURE OFF
119- LOG_BUILD OFF )
120- ExternalProject_Get_Property(gtest source_dir)
121- set (GTEST_INCLUDE_DIR ${source_dir} /include )
122- set (GTEST_LIBRARY OFF )
123- set (GTEST_MAIN_LIBRARY OFF )
124-
125- ExternalProject_Get_Property(gtest binary_dir)
126- set (GTEST_LIBRARY_PATH ${GTEST_PREFIX} /lib64 CACHE INTERNAL "Path to Google Test Library" )
127- set (GTEST_LIBRARY_FILE ${GTEST_LIBRARY_PATH} /${CMAKE_STATIC_LIBRARY_PREFIX} gtest${CMAKE_STATIC_LIBRARY_SUFFIX} )
128- set (GTEST_MAIN_LIBRARY_FILE ${GTEST_LIBRARY_PATH} /${CMAKE_STATIC_LIBRARY_PREFIX} gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX} )
129- set (GTEST_TARGET gtest)
98+ LOG_BUILD OFF
99+ BUILD_BYPRODUCTS ${GTEST_LIBRARY} ${GTEST_MAIN_LIBRARY} ${GMOCK_LIBRARY} )
100+
101+ ExternalProject_Get_Property(gtest_download source_dir)
102+ message (STATUS "source_dir=${source_dir} " )
103+ set (GTEST_INCLUDE_DIR ${source_dir} /googletest/include )
104+ set (GMOCK_INCLUDE_DIR ${source_dir} /googlemock/include )
105+ file (MAKE_DIRECTORY ${GTEST_INCLUDE_DIR} )
106+ file (MAKE_DIRECTORY ${GMOCK_INCLUDE_DIR} )
107+
108+ message (STATUS "Download GTest ${GTEST_TAG} " )
109+ set_target_properties (gtest_download PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1)
130110endif ()
131111
132- if (GTEST_LIBRARY AND GTEST_LIBRARY_DEBUG)
133- get_filename_component (GTEST_RELEASE_EXT ${GTEST_LIBRARY} EXT )
134- get_filename_component (GTEST_DEBUG_EXT ${GTEST_LIBRARY_DEBUG} EXT )
135- if (GTEST_RELEASE_EXT STREQUAL GTEST_DEBUG_EXT)
136- set (GTEST_LIBRARY optimized ${GTEST_LIBRARY} debug ${GTEST_LIBRARY_DEBUG} )
137- endif ()
138- endif ()
139- if (GTEST_MAIN_LIBRARY AND GTEST_MAIN_LIBRARY_DEBUG)
140- get_filename_component (GTEST_RELEASE_EXT ${GTEST_MAIN_LIBRARY} EXT )
141- get_filename_component (GTEST_DEBUG_EXT ${GTEST_MAIN_LIBRARY_DEBUG} EXT )
142- if (GTEST_RELEASE_EXT STREQUAL GTEST_DEBUG_EXT)
143- set (GTEST_MAIN_LIBRARY optimized ${GTEST_MAIN_LIBRARY} debug ${GTEST_MAIN_LIBRARY_DEBUG} )
144- endif ()
145- endif ()
146-
147- set (GTEST_LIBRARIES ${GTEST_LIBRARY} )
148- set (GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR} )
112+ set (GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR} )
113+ set (GMOCK_INCLUDE_DIRS ${GMOCK_INCLUDE_DIR} )
149114include (FindPackageHandleStandardArgs)
150115find_package_handle_standard_args(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR)
151-
152-
153- set ( GTEST_USE_FILE ${CMAKE_CURRENT_LIST_DIR} /UseGTest.cmake )
154116mark_as_advanced (GTEST_LIBRARIES GTEST_INCLUDE_DIRS)
155117
118+ message (STATUS "GTEST_INCLUDE_DIRS=${GTEST_INCLUDE_DIRS} " )
119+ message (STATUS "GTEST_LIBRARY=${GTEST_LIBRARY} " )
120+ message (STATUS "GTEST_MAIN_LIBRARY=${GTEST_MAIN_LIBRARY} " )
121+ message (STATUS "GMOCK_LIBRARY=${GMOCK_LIBRARY} " )
122+ message (STATUS "GTEST_HAS_TR1_TUPLE=${GTEST_HAS_TR1_TUPLE} " )
123+
124+ if (NOT TARGET gtest)
125+ add_library (gtest INTERFACE )
126+ target_link_libraries (gtest INTERFACE
127+ $<BUILD_INTERFACE:${GTEST_LIBRARY} >
128+ $<BUILD_INTERFACE:${GMOCK_LIBRARY} >
129+ )
130+ target_include_directories (gtest
131+ SYSTEM INTERFACE ${GTEST_INCLUDE_DIRS}
132+ )
133+ target_include_directories (gtest
134+ SYSTEM INTERFACE ${GMOCK_INCLUDE_DIRS}
135+ )
136+ if (TARGET gtest_download)
137+ add_dependencies (gtest gtest_download)
138+ endif ()
156139
140+ add_library (gtest_main INTERFACE )
141+ target_link_libraries (gtest_main INTERFACE
142+ $<BUILD_INTERFACE:${GTEST_MAIN_LIBRARY} >
143+ )
144+ target_include_directories (gtest_main
145+ SYSTEM INTERFACE ${GTEST_INCLUDE_DIRS}
146+ )
147+
148+ if (TARGET gtest_download)
149+ add_dependencies (gtest_main gtest_download)
150+ endif ()
157151
152+ message (STATUS "GTEST include dir: ${GTEST_INCLUDE_DIR} " )
153+ endif ()
0 commit comments