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 ""
+)