Skip to content

Commit 14fbe24

Browse files
committed
build gtest with an external project
1 parent 47662a6 commit 14fbe24

File tree

3 files changed

+81
-10
lines changed

3 files changed

+81
-10
lines changed

.travis.yml

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,10 @@ compiler:
55

66
before_install:
77
- sudo apt-get update -qq
8-
- sudo apt-get install -qq fglrx opencl-headers libboost-program-options-dev libgtest-dev
8+
- sudo apt-get install -qq fglrx opencl-headers libboost-program-options-dev
99
# Uncomment below to help verify the installs above work
1010
# - ls -la /usr/lib/libboost*
1111
# - ls -la /usr/include/boost
12-
# - ls -la /usr/src/gtest
13-
14-
install:
15-
- mkdir -p bin/gTest
16-
- cd bin/gTest
17-
- cmake -DCMAKE_BUILD_TYPE=Release /usr/src/gtest
18-
- make
19-
- sudo mv libg* /usr/lib
2012

2113
before_script:
2214
- cd ${TRAVIS_BUILD_DIR}

src/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ endif( )
198198
find_package( OpenCL )
199199

200200
# Find Google Test package
201-
find_package( GTest )
201+
include(gtest.cmake)
202202

203203
# Find Boost on the system, and configure the type of boost build we want
204204
set( Boost_USE_MULTITHREADED ON )

src/gtest.cmake

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
2+
option(USE_SYSTEM_GTEST "Use system installed gtest when set to ON, or build gtest locally when set to OFF" OFF)
3+
4+
if(USE_SYSTEM_GTEST)
5+
if( (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} VERSION_LESS 2.8) )
6+
message( STATUS "Cmake version 2.8 or greater needed to use GTest" )
7+
else()
8+
# This will define GTEST_FOUND
9+
find_package( GTest )
10+
endif()
11+
else()
12+
if(CMAKE_VERSION VERSION_LESS 3.2 AND CMAKE_GENERATOR MATCHES "Ninja")
13+
message(WARNING "Building GTest with Ninja has known issues with CMake older than 3.2")
14+
endif()
15+
16+
include(ExternalProject)
17+
18+
set(GTEST_LIBRARIES gtest gtest_main)
19+
# the binary dir must be know before creating the external project in order
20+
# to pass the byproducts
21+
set(prefix "${CMAKE_CURRENT_BINARY_DIR}/gtest-external-prefix")
22+
set(binary_dir "${prefix}/src/gtest-external-build")
23+
24+
set(byproducts)
25+
foreach(lib ${GTEST_LIBRARIES})
26+
set(${lib}_location
27+
${binary_dir}/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX})
28+
list(APPEND byproducts ${${lib}_location})
29+
endforeach()
30+
31+
if( MSVC )
32+
if( MSVC_VERSION LESS 1800 )
33+
set(EXTRA_FLAG "/D_VARIADIC_MAX=10 ")
34+
else()
35+
set(EXTRA_FLAG "")
36+
endif()
37+
else()
38+
set(EXTRA_FLAG "")
39+
endif()
40+
41+
ExternalProject_Add(
42+
gtest-external
43+
URL http://googletest.googlecode.com/files/gtest-1.7.0.zip
44+
URL_MD5 2d6ec8ccdf5c46b05ba54a9fd1d130d7
45+
PREFIX ${prefix}
46+
BINARY_DIR ${binary_dir}
47+
CMAKE_CACHE_ARGS
48+
-DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}
49+
-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}
50+
-DCMAKE_CXX_FLAGS_DEBUG:STRING=${EXTRA_FLAG}${CMAKE_CXX_FLAGS_DEBUG}
51+
-DCMAKE_CXX_FLAGS_MINSIZEREL:STRING=${EXTRA_FLAG}${CMAKE_CXX_FLAGS_MINSIZEREL}
52+
-DCMAKE_CXX_FLAGS_RELEASE:STRING=${EXTRA_FLAG}${CMAKE_CXX_FLAGS_RELEASE}
53+
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=${EXTRA_FLAG}${CMAKE_CXX_FLAGS_RELWITHDEBINFO}
54+
-DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}
55+
-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}
56+
-DCMAKE_C_FLAGS_DEBUG:STRING=${CMAKE_C_FLAGS_DEBUG}
57+
-DCMAKE_C_FLAGS_MINSIZEREL:STRING=${CMAKE_C_FLAGS_MINSIZEREL}
58+
-DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELEASE}
59+
-DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_C_FLAGS_RELWITHDEBINFO}
60+
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
61+
-Dgtest_force_shared_crt:BOOL=ON
62+
BUILD_BYPRODUCTS ${byproducts}
63+
INSTALL_COMMAND "")
64+
65+
foreach(lib ${GTEST_LIBRARIES})
66+
add_library(${lib} IMPORTED STATIC)
67+
add_dependencies(${lib} gtest-external)
68+
set_target_properties(${lib} PROPERTIES IMPORTED_LOCATION ${${lib}_location})
69+
endforeach()
70+
71+
ExternalProject_Get_Property(gtest-external source_dir)
72+
set(GTEST_INCLUDE_DIRS ${source_dir}/include)
73+
set(GTEST_FOUND ON)
74+
endif()
75+
76+
# Hack to get googletest v1.6 to work with vs2012
77+
if( MSVC11 )
78+
add_definitions( "/D_VARIADIC_MAX=10" )
79+
endif( )

0 commit comments

Comments
 (0)