cmake_minimum_required (VERSION 3.13...3.22) project(googletest-download NONE) # Enable ExternalProject CMake module include(ExternalProject) option(ALLOW_DOWNLOADING_GOOGLETEST "If googletest src tree is not found in location specified by GOOGLETEST_PATH, do fetch the archive from internet" OFF) set(GOOGLETEST_PATH "/usr/src/googletest" CACHE PATH "Path to the googletest root tree. Should contain googletest and googlemock subdirs. And CMakeLists.txt in root, and in both of these subdirs") # Download and install GoogleTest message(STATUS "Looking for Google Test sources") message(STATUS "Looking for Google Test sources in ${GOOGLETEST_PATH}") if(EXISTS "${GOOGLETEST_PATH}" AND IS_DIRECTORY "${GOOGLETEST_PATH}" AND EXISTS "${GOOGLETEST_PATH}/CMakeLists.txt" AND EXISTS "${GOOGLETEST_PATH}/googletest" AND IS_DIRECTORY "${GOOGLETEST_PATH}/googletest" AND EXISTS "${GOOGLETEST_PATH}/googletest/CMakeLists.txt" AND EXISTS "${GOOGLETEST_PATH}/googlemock" AND IS_DIRECTORY "${GOOGLETEST_PATH}/googlemock" AND EXISTS "${GOOGLETEST_PATH}/googlemock/CMakeLists.txt") message(STATUS "Found Google Test in ${GOOGLETEST_PATH}") ExternalProject_Add( googletest PREFIX "${CMAKE_BINARY_DIR}" DOWNLOAD_DIR "${CMAKE_BINARY_DIR}/download" SOURCE_DIR "${GOOGLETEST_PATH}" # use existing src dir. BINARY_DIR "${CMAKE_BINARY_DIR}/build" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" TEST_COMMAND "" ) else() if(NOT ALLOW_DOWNLOADING_GOOGLETEST) message(SEND_ERROR "Did not find Google Test sources! Either pass correct path in GOOGLETEST_PATH, or enable BENCHMARK_DOWNLOAD_DEPENDENCIES, or disable BENCHMARK_USE_BUNDLED_GTEST, or disable BENCHMARK_ENABLE_GTEST_TESTS / BENCHMARK_ENABLE_TESTING.") return() else() message(WARNING "Did not find Google Test sources! Fetching from web...") ExternalProject_Add( googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG "v1.14.0" PREFIX "${CMAKE_BINARY_DIR}" STAMP_DIR "${CMAKE_BINARY_DIR}/stamp" DOWNLOAD_DIR "${CMAKE_BINARY_DIR}/download" SOURCE_DIR "${CMAKE_BINARY_DIR}/src" BINARY_DIR "${CMAKE_BINARY_DIR}/build" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" TEST_COMMAND "" ) endif() endif() ExternalProject_Get_Property(googletest SOURCE_DIR BINARY_DIR) file(WRITE googletest-paths.cmake "set(GOOGLETEST_SOURCE_DIR \"${SOURCE_DIR}\") set(GOOGLETEST_BINARY_DIR \"${BINARY_DIR}\") ")