Try to first find googletest in the system before downloading it (#125)

This commit is contained in:
Stanislav Angelovič
2020-11-16 17:05:36 +01:00
committed by GitHub
parent b190646aa5
commit d6fdacafbe

View File

@ -2,26 +2,44 @@
# DOWNLOAD AND BUILD OF GOOGLETEST # DOWNLOAD AND BUILD OF GOOGLETEST
#------------------------------- #-------------------------------
include(FetchContent) 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")
message("Fetching googletest...") find_package(GTest ${GOOGLETEST_VERSION} CONFIG)
FetchContent_Declare(googletest if (NOT TARGET GTest::gmock)
GIT_REPOSITORY https://github.com/google/googletest.git # Try pkg-config if GTest was not found through CMake config
GIT_TAG master find_package(PkgConfig)
GIT_SHALLOW 1 if (PkgConfig_FOUND)
UPDATE_COMMAND "") 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)
#FetchContent_MakeAvailable(googletest) # Not available in CMake 3.13 :-( Let's do it manually: message("Fetching googletest...")
FetchContent_GetProperties(googletest) FetchContent_Declare(googletest
if(NOT googletest_POPULATED) GIT_REPOSITORY ${GOOGLETEST_GIT_REPO}
FetchContent_Populate(googletest) GIT_TAG release-${GOOGLETEST_VERSION}
set(gtest_force_shared_crt ON CACHE INTERNAL "" FORCE) GIT_SHALLOW 1
set(BUILD_GMOCK ON CACHE INTERNAL "" FORCE) UPDATE_COMMAND "")
set(INSTALL_GTEST OFF CACHE INTERNAL "" FORCE)
set(BUILD_SHARED_LIBS_BAK ${BUILD_SHARED_LIBS}) #FetchContent_MakeAvailable(googletest) # Not available in CMake 3.13 :-( Let's do it manually:
set(BUILD_SHARED_LIBS OFF) FetchContent_GetProperties(googletest)
add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR}) if(NOT googletest_POPULATED)
set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_BAK}) 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() endif()
#------------------------------- #-------------------------------
@ -87,11 +105,11 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
add_executable(sdbus-c++-unit-tests ${UNITTESTS_SRCS}) add_executable(sdbus-c++-unit-tests ${UNITTESTS_SRCS})
target_compile_definitions(sdbus-c++-unit-tests PRIVATE LIBSYSTEMD_VERSION=${LIBSYSTEMD_VERSION}) 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}) add_executable(sdbus-c++-integration-tests ${INTEGRATIONTESTS_SRCS})
target_compile_definitions(sdbus-c++-integration-tests PRIVATE LIBSYSTEMD_VERSION=${LIBSYSTEMD_VERSION}) 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 # Manual performance and stress tests
option(ENABLE_PERF_TESTS "Build and install manual performance tests (default OFF)" OFF) option(ENABLE_PERF_TESTS "Build and install manual performance tests (default OFF)" OFF)