Skip to content

Commit

Permalink
cmake: build gtest if not found
Browse files Browse the repository at this point in the history
debian stopped shipping googletest binaries, but it offers googletest in
the source form. so we can use it instead.

Signed-off-by: Kefu Chai <[email protected]>
  • Loading branch information
tchaikov committed Jul 14, 2017
1 parent d72fac1 commit 76d5f35
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 2 deletions.
7 changes: 5 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@ set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} -std=c++11 -Wno-write-strings -Wall -pthread")

if (NOT(TARGET gtest AND TARGET gtest_main))
if(NOT(GTEST_FOUND))
find_package(GTest REQUIRED)
if (NOT GTEST_FOUND)
find_package(GTest QUIET)
if (NOT GTEST_FOUND)
include(BuildGTest)
endif()
endif()
endif()

Expand Down
67 changes: 67 additions & 0 deletions cmake/modules/BuildGTest.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
macro(_build_gtest gtest_root)
include(ExternalProject)
ExternalProject_Add(googletest
SOURCE_DIR ${gtest_root}
CMAKE_ARGS -DBUILD_GMOCK=OFF -DBUILD_GTEST=ON
INSTALL_COMMAND ""
LOG_CONFIGURE ON
LOG_BUILD ON)

ExternalProject_Get_Property(googletest source_dir)
set(GTEST_INCLUDE_DIRS ${source_dir}/googletest/include)
set(GMOCK_INCLUDE_DIRS ${source_dir}/googlemock/include)

find_package(Threads REQUIRED)

ExternalProject_Get_Property(googletest binary_dir)
set(GTEST_LIBRARY_PATH ${binary_dir}/googletest/${CMAKE_FIND_LIBRARY_PREFIXES}gtest.a)
set(GTEST_LIBRARY gtest)
add_library(${GTEST_LIBRARY} STATIC IMPORTED)
set_target_properties(${GTEST_LIBRARY} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}"
IMPORTED_LOCATION ${GTEST_LIBRARY_PATH}
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
IMPORTED_LINK_INTERFACE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
add_dependencies(${GTEST_LIBRARY} googletest)
set(GTEST_LIBRARIES ${GTEST_LIBRARY})

set(GTEST_MAIN_LIBRARY_PATH ${binary_dir}/googletest/${CMAKE_FIND_LIBRARY_PREFIXES}gtest_main.a)
set(GTEST_MAIN_LIBRARY gtest_main)
add_library(${GTEST_MAIN_LIBRARY} STATIC IMPORTED)
set_target_properties(${GTEST_MAIN_LIBRARY} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}"
IMPORTED_LOCATION ${GTEST_MAIN_LIBRARY_PATH}
IMPORTED_LINK_INTERFACE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
add_dependencies(${GTEST_MAIN_LIBRARY} googletest)

set(GMOCK_LIBRARY_PATH ${binary_dir}/googlemock/${CMAKE_FIND_LIBRARY_PREFIXES}gmock.a)
set(GMOCK_LIBRARY gmock)
add_library(${GMOCK_LIBRARY} STATIC IMPORTED)
set_target_properties(${GMOCK_LIBRARY} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${GMOCK_INCLUDE_DIRS}"
IMPORTED_LOCATION "${GMOCK_LIBRARY_PATH}"
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
IMPORTED_LINK_INTERFACE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
add_dependencies(${GMOCK_LIBRARY} googletest)

set(GMOCK_MAIN_LIBRARY_PATH ${binary_dir}/googlemock/${CMAKE_FIND_LIBRARY_PREFIXES}gmock_main.a)
set(GMOCK_MAIN_LIBRARY gmock_main)
add_library(${GMOCK_MAIN_LIBRARY} STATIC IMPORTED)
set_target_properties(${GMOCK_MAIN_LIBRARY} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${GMOCK_INCLUDE_DIRS}"
IMPORTED_LOCATION ${GMOCK_MAIN_LIBRARY_PATH}
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
IMPORTED_LINK_INTERFACE_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
add_dependencies(${GMOCK_MAIN_LIBRARY} ${GTEST_LIBRARY})
endmacro()

find_path(GTEST_ROOT src/gtest.cc
HINTS $ENV{GTEST_ROOT}
PATHS /usr/src/googletest/googletest /usr/src/gtest)

if(EXISTS ${GTEST_ROOT})
message(STATUS "Found googletest: ${GTEST_ROOT}")
_build_gtest(${GTEST_ROOT})
else()
message(SEND_ERROR "Could NOT find googletest")
endif()
1 change: 1 addition & 0 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ set_source_files_properties(${core_srcs} ${test_srcs}
)

add_executable(dmclock-tests ${test_srcs} ${support_srcs})
target_include_directories(dmclock-tests PRIVATE "${GTEST_INCLUDE_DIRS}")

if (TARGET gtest AND TARGET gtest_main)
add_dependencies(dmclock-tests gtest gtest_main)
Expand Down

0 comments on commit 76d5f35

Please sign in to comment.