From 9ead1dbc2a5f450a26ff1a2536c733758b2ec578 Mon Sep 17 00:00:00 2001 From: Julian Büning Date: Mon, 3 Jan 2022 21:42:36 +0100 Subject: CMake: set Google Test options properly If the used CMake version is recent enough to support the necessary policy CMP0077, set INSTALL_GTEST using normal variables instead of cache variables. We never want to allow Google Test to add to the install target, so we should not allow a user to interfere with this. In addition, we set BUILD_GMOCK=OFF (and the necessary BUILD_GTEST=ON for Google Test 1.8.0), as our current tests do not require Google Mock. --- unittests/CMakeLists.txt | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) (limited to 'unittests') diff --git a/unittests/CMakeLists.txt b/unittests/CMakeLists.txt index da041e28..5311b834 100644 --- a/unittests/CMakeLists.txt +++ b/unittests/CMakeLists.txt @@ -7,6 +7,42 @@ # #===------------------------------------------------------------------------===# +function(add_vanilla_googletest_subdirectory directory) + if (POLICY CMP0077) + # Prevent Google Test from adding to our install target (Google Test 1.8.0+) + # However, this can only be disabled starting with 1.8.1 (a.k.a. 1.9.0) + set(INSTALL_GTEST OFF) + + # Google Mock is currently not used by our tests + set(BUILD_GMOCK OFF) + + # (only) Google Test 1.8.0 with BUILD_GMOCK=OFF needs BUILD_GTEST=ON + set(BUILD_GTEST ON) + + # Make option() in subdirectory respect normal variables (as set above). + # NOTE: The enclosing function limits the scope of this policy setting. + # FIXME: Remove once all supported Google Test versions require CMake 3.13+ + # (or set policy CMP0077 to NEW by themselves) + set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) + else() + # FIXME: Remove with CMake minimum version 3.13+ + # Use cache variable workaround as option() ignores normal variables + + # Prevent Google Test from adding to our install target (Google Test 1.8.0+) + # However, this can only be disabled starting with 1.8.1 (a.k.a. 1.9.0) + set(INSTALL_GTEST OFF CACHE BOOL "disable installing Google Test" FORCE) + + # Google Mock is currently not used by our tests + set(BUILD_GMOCK OFF CACHE BOOL "disable building Google Mock" FORCE) + + # (only) Google Test 1.8.0 with BUILD_GMOCK=OFF needs BUILD_GTEST=ON + set(BUILD_GTEST ON CACHE BOOL "enable building Google Test" FORCE) + endif() + + # include Google Test's CMakeLists.txt + add_subdirectory(${directory} "${CMAKE_CURRENT_BINARY_DIR}/gtest_build") +endfunction() + if (TARGET gtest AND TARGET gtest_main) # try to reuse LLVM's targets @@ -115,12 +151,7 @@ else() message(STATUS "Google Test: Building from source.") message(STATUS "GTEST_SRC_DIR: ${GTEST_SRC_DIR}") - # Prevent Google Test from adding to our install target. - # Required for >= 1.8.0, but can only be disabled starting with 1.8.1 - set(INSTALL_GTEST OFF CACHE BOOL "disable installing Google Test" FORCE) - - # Build Google Test as part of our project - add_subdirectory(${GTEST_SRC_DIR} "${CMAKE_CURRENT_BINARY_DIR}/gtest_build") + add_vanilla_googletest_subdirectory(${GTEST_SRC_DIR}) endif() # build Google Test with KLEE's defines and compile flags -- cgit 1.4.1