From 898fb3a7043bd5af6a42c18b21109f12138c977c Mon Sep 17 00:00:00 2001 From: Benjamin Barenblat Date: Wed, 26 Feb 2020 15:46:53 -0500 Subject: Support testing with a local googletest checkout Add a new variable, `ABSL_LOCAL_GOOGLETEST_DIR`, that points to a local checkout of googletest. Building with `-DABSL_RUN_TESTS=ON -DABSL_USE_GOOGLETEST_HEAD=OFF` will then use that directory rather than cloning the googletest repo from GitHub. --- CMake/Googletest/CMakeLists.txt.in | 31 +++++++++++++++++++++---------- CMake/Googletest/DownloadGTest.cmake | 9 +++++---- CMakeLists.txt | 10 ++++++++-- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/CMake/Googletest/CMakeLists.txt.in b/CMake/Googletest/CMakeLists.txt.in index 72a7131..0c64218 100644 --- a/CMake/Googletest/CMakeLists.txt.in +++ b/CMake/Googletest/CMakeLists.txt.in @@ -3,13 +3,24 @@ 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 "${absl_gtest_src_dir}" - BINARY_DIR "${absl_gtest_build_dir}" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - TEST_COMMAND "" -) \ No newline at end of file +if(${ABSL_USE_GOOGLETEST_HEAD}) + ExternalProject_Add(googletest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG master + SOURCE_DIR "${absl_gtest_src_dir}" + BINARY_DIR "${absl_gtest_build_dir}" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" + ) +else() + ExternalProject_Add(googletest + SOURCE_DIR "${absl_gtest_src_dir}" + BINARY_DIR "${absl_gtest_build_dir}" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" + ) +endif() \ No newline at end of file diff --git a/CMake/Googletest/DownloadGTest.cmake b/CMake/Googletest/DownloadGTest.cmake index d616fe2..9b4f62b 100644 --- a/CMake/Googletest/DownloadGTest.cmake +++ b/CMake/Googletest/DownloadGTest.cmake @@ -1,7 +1,8 @@ -# Downloads and unpacks googletest at configure time. Based on the instructions -# at https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project +# Integrates googletest at configure time. Based on the instructions at +# https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project -# Download the latest googletest from Github master +# Set up the external googletest project, downloading the latest from Github +# master if requested. configure_file( ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt.in ${CMAKE_BINARY_DIR}/googletest-download/CMakeLists.txt @@ -14,7 +15,7 @@ if (BUILD_SHARED_LIBS) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTEST_CREATE_SHARED_LIBRARY=1") endif() -# Configure and build the downloaded googletest source +# Configure and build the googletest source. execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . RESULT_VARIABLE result WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download ) diff --git a/CMakeLists.txt b/CMakeLists.txt index 26cd2d0..74b5cd9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,6 +84,10 @@ find_package(Threads REQUIRED) option(ABSL_USE_GOOGLETEST_HEAD "If ON, abseil will download HEAD from googletest at config time." OFF) +set(ABSL_LOCAL_GOOGLETEST_DIR "/usr/src/googletest" CACHE PATH + "If ABSL_USE_GOOGLETEST_HEAD is OFF, specifies the directory of a local googletest checkout." + ) + option(ABSL_RUN_TESTS "If ON, Abseil tests will be run." OFF) if(${ABSL_RUN_TESTS}) @@ -96,11 +100,13 @@ endif() ## check targets if(BUILD_TESTING) + set(absl_gtest_build_dir ${CMAKE_BINARY_DIR}/googletest-build) if(${ABSL_USE_GOOGLETEST_HEAD}) set(absl_gtest_src_dir ${CMAKE_BINARY_DIR}/googletest-src) - set(absl_gtest_build_dir ${CMAKE_BINARY_DIR}/googletest-build) - include(CMake/Googletest/DownloadGTest.cmake) + else() + set(absl_gtest_src_dir ${ABSL_LOCAL_GOOGLETEST_DIR}) endif() + include(CMake/Googletest/DownloadGTest.cmake) check_target(gtest) check_target(gtest_main) -- cgit v1.2.3