From b073e1c2b9a8138da83300f598b9a56fc9762b4b Mon Sep 17 00:00:00 2001
|
From: =?UTF-8?q?Stanislav=20Angelovi=C4=8D?= <angelovic.s@gmail.com>
|
Date: Mon, 16 Nov 2020 17:05:36 +0100
|
Subject: [PATCH] Try to first find googletest in the system before downloading
|
it (#125)
|
|
Upstream-Status: Backport [d6fdaca]
|
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
|
|
---
|
tests/CMakeLists.txt | 62 ++++++++++++++++++++++++++++----------------
|
1 file changed, 40 insertions(+), 22 deletions(-)
|
|
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
|
index 97f7c1a..7ecc327 100644
|
--- a/tests/CMakeLists.txt
|
+++ b/tests/CMakeLists.txt
|
@@ -2,26 +2,44 @@
|
# DOWNLOAD AND BUILD OF GOOGLETEST
|
#-------------------------------
|
|
-include(FetchContent)
|
-
|
-message("Fetching googletest...")
|
-FetchContent_Declare(googletest
|
- GIT_REPOSITORY https://github.com/google/googletest.git
|
- GIT_TAG master
|
- GIT_SHALLOW 1
|
- UPDATE_COMMAND "")
|
-
|
-#FetchContent_MakeAvailable(googletest) # Not available in CMake 3.13 :-( Let's do it manually:
|
-FetchContent_GetProperties(googletest)
|
-if(NOT googletest_POPULATED)
|
- FetchContent_Populate(googletest)
|
- set(gtest_force_shared_crt ON CACHE INTERNAL "" FORCE)
|
- set(BUILD_GMOCK ON CACHE INTERNAL "" FORCE)
|
- set(INSTALL_GTEST OFF CACHE INTERNAL "" FORCE)
|
- set(BUILD_SHARED_LIBS_BAK ${BUILD_SHARED_LIBS})
|
- set(BUILD_SHARED_LIBS OFF)
|
- add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
|
- set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_BAK})
|
+set(GOOGLETEST_VERSION 1.10.0 CACHE STRING "Version of gmock to use")
|
+set(GOOGLETEST_GIT_REPO "https://github.com/google/googletest.git" CACHE STRING "A git repo to clone and build googletest from if gmock is not found in the system")
|
+
|
+find_package(GTest ${GOOGLETEST_VERSION} CONFIG)
|
+if (NOT TARGET GTest::gmock)
|
+ # Try pkg-config if GTest was not found through CMake config
|
+ find_package(PkgConfig)
|
+ if (PkgConfig_FOUND)
|
+ pkg_check_modules(GMock IMPORTED_TARGET GLOBAL gmock>=${GOOGLETEST_VERSION})
|
+ if(TARGET PkgConfig::GMock)
|
+ add_library(GTest::gmock ALIAS PkgConfig::GMock)
|
+ endif()
|
+ endif()
|
+ # GTest was not found in the system, build it on our own
|
+ if (NOT TARGET GTest::gmock)
|
+ include(FetchContent)
|
+
|
+ message("Fetching googletest...")
|
+ FetchContent_Declare(googletest
|
+ GIT_REPOSITORY ${GOOGLETEST_GIT_REPO}
|
+ GIT_TAG release-${GOOGLETEST_VERSION}
|
+ GIT_SHALLOW 1
|
+ UPDATE_COMMAND "")
|
+
|
+ #FetchContent_MakeAvailable(googletest) # Not available in CMake 3.13 :-( Let's do it manually:
|
+ FetchContent_GetProperties(googletest)
|
+ if(NOT googletest_POPULATED)
|
+ FetchContent_Populate(googletest)
|
+ set(gtest_force_shared_crt ON CACHE INTERNAL "" FORCE)
|
+ set(BUILD_GMOCK ON CACHE INTERNAL "" FORCE)
|
+ set(INSTALL_GTEST OFF CACHE INTERNAL "" FORCE)
|
+ set(BUILD_SHARED_LIBS_BAK ${BUILD_SHARED_LIBS})
|
+ set(BUILD_SHARED_LIBS OFF)
|
+ add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
|
+ set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_BAK})
|
+ add_library(GTest::gmock ALIAS gmock)
|
+ endif()
|
+ endif()
|
endif()
|
|
#-------------------------------
|
@@ -87,11 +105,11 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
|
add_executable(sdbus-c++-unit-tests ${UNITTESTS_SRCS})
|
target_compile_definitions(sdbus-c++-unit-tests PRIVATE LIBSYSTEMD_VERSION=${LIBSYSTEMD_VERSION})
|
-target_link_libraries(sdbus-c++-unit-tests sdbus-c++-objlib gmock gmock_main)
|
+target_link_libraries(sdbus-c++-unit-tests sdbus-c++-objlib GTest::gmock)
|
|
add_executable(sdbus-c++-integration-tests ${INTEGRATIONTESTS_SRCS})
|
target_compile_definitions(sdbus-c++-integration-tests PRIVATE LIBSYSTEMD_VERSION=${LIBSYSTEMD_VERSION})
|
-target_link_libraries(sdbus-c++-integration-tests sdbus-c++ gmock gmock_main)
|
+target_link_libraries(sdbus-c++-integration-tests sdbus-c++ GTest::gmock)
|
|
# Manual performance and stress tests
|
option(ENABLE_PERF_TESTS "Build and install manual performance tests (default OFF)" OFF)
|