From b073e1c2b9a8138da83300f598b9a56fc9762b4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanislav=20Angelovi=C4=8D?= 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 --- 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)