From eed4d3ffc835ef61201547b3e907c4481fa5de6e Mon Sep 17 00:00:00 2001 From: patrick96 Date: Sat, 7 Apr 2018 23:35:47 +0200 Subject: [PATCH] fix(tests): Compile gtest at configure time Ubuntu (and thus travis CI) doesn't have the gtest library in its repos, only the header files and according to [1], gtest should be compiled in every project anyways [1]: https://github.com/google/googletest/blob/master/googletest/docs/FAQ.md#why-is-it-not-recommended-to-install-a-pre-compiled-copy-of-google-test-for-example-into-usrlocal --- .travis.yml | 1 - tests/CMakeLists.txt | 35 +++++++++++++++++++++++++++++++---- tests/CMakeLists.txt.in | 15 +++++++++++++++ 3 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 tests/CMakeLists.txt.in diff --git a/.travis.yml b/.travis.yml index d5e8c9c6..13201218 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,7 +35,6 @@ addons: - python-xcbgen - xcb-proto - xutils-dev - - libgtest0 - libgtest-dev env: diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index c8018f0f..eb9d4415 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -7,8 +7,36 @@ include_directories(${dirs}) include_directories(${PROJECT_SOURCE_DIR}/src) include_directories(${CMAKE_CURRENT_LIST_DIR}) -find_package(PkgConfig REQUIRED) -pkg_check_modules(GTEST REQUIRED gtest) +message(STATUS "BIN ${CMAKE_BINARY_DIR}") + +# Download and unpack googletest at configure time {{{ +configure_file( + CMakeLists.txt.in + ${CMAKE_BINARY_DIR}/googletest-download/CMakeLists.txt + ) +execute_process( COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download) + +if(result) + message(FATAL_ERROR "CMake step for googletest failed: ${result}") +endif() + +execute_process(COMMAND ${CMAKE_COMMAND} --build . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download ) + +if(result) + message(FATAL_ERROR "Build step for googletest failed: ${result}") +endif() + +# Add googletest directly to our build. This defines +# the gtest and gtest_main targets. +add_subdirectory(${CMAKE_BINARY_DIR}/googletest-src + ${CMAKE_BINARY_DIR}/googletest-build + EXCLUDE_FROM_ALL) + +# }}} function(unit_test file tests) set(multi_value_args SOURCES) @@ -27,8 +55,7 @@ function(unit_test file tests) add_executable(${name} unit_tests/${file}.cpp ${sources}) # Link against googletest - target_link_libraries(${name} ${GTEST_LDFLAGS}) - target_compile_options(${name} PUBLIC ${GTEST_CFLAGS}) + target_link_libraries(${name} gtest_main) add_test(NAME ${name} COMMAND ${name}) diff --git a/tests/CMakeLists.txt.in b/tests/CMakeLists.txt.in new file mode 100644 index 00000000..4c67ef5e --- /dev/null +++ b/tests/CMakeLists.txt.in @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 2.8.2) + +project(googletest-download NONE) + +include(ExternalProject) +ExternalProject_Add(googletest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG master + SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src" + BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" +)