From 21b6127dbcff3060d25a49b13921df3dc3aeda4a Mon Sep 17 00:00:00 2001 From: Manuel Weberndorfer <manuel.weberndorfer@id.ethz.ch> Date: Wed, 28 Apr 2021 09:15:38 +0000 Subject: [PATCH] customize finding googletest - use source at /usr/src/googletest if not found - automatically builds library in dev environment --- cmake/modules/FindAE108_GTest.cmake | 50 +++++++++++++++++++++++++++++ cmdline/test/CMakeLists.txt | 2 +- cppptest/src/CMakeLists.txt | 2 +- elements/test/CMakeLists.txt | 2 +- 4 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 cmake/modules/FindAE108_GTest.cmake diff --git a/cmake/modules/FindAE108_GTest.cmake b/cmake/modules/FindAE108_GTest.cmake new file mode 100644 index 00000000..4ced8d16 --- /dev/null +++ b/cmake/modules/FindAE108_GTest.cmake @@ -0,0 +1,50 @@ +# © 2021 ETH Zurich, Mechanics and Materials Lab +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +find_package(GTest 1.8.1 CONFIG) +if (NOT GTest_FOUND) + set(FETCHCONTENT_SOURCE_DIR_AE108_GOOGLETEST "/usr/src/googletest") + if (IS_DIRECTORY "${FETCHCONTENT_SOURCE_DIR_AE108_GOOGLETEST}") + message(STATUS + "GTest was not found, using source at ${FETCHCONTENT_SOURCE_DIR_AE108_GOOGLETEST} instead." + ) + + include(FetchContent) + FetchContent_Declare("ae108_googletest") + FetchContent_GetProperties( + ae108_googletest + SOURCE_DIR ae108_googletest_SOURCE_DIR + BINARY_DIR ae108_googletest_BINARY_DIR + POPULATED ae108_googletest_POPULATED + ) + if (NOT ae108_googletest_POPULATED) + FetchContent_Populate("ae108_googletest") + add_subdirectory( + "${ae108_googletest_SOURCE_DIR}" + "${ae108_googletest_BINARY_DIR}" + EXCLUDE_FROM_ALL + ) + endif() + + foreach(LIBRARY_NAME gtest gmock gtest_main gmock_main) + add_library("GTest::${LIBRARY_NAME}" ALIAS "${LIBRARY_NAME}") + endforeach() + + set(GTest_FOUND TRUE) + endif() +endif() + +find_package_handle_standard_args(AE108_GTest + REQUIRED_VARS GTest_FOUND +) \ No newline at end of file diff --git a/cmdline/test/CMakeLists.txt b/cmdline/test/CMakeLists.txt index 27137239..969628f4 100644 --- a/cmdline/test/CMakeLists.txt +++ b/cmdline/test/CMakeLists.txt @@ -19,7 +19,7 @@ add_executable(${PROJECT_NAME}-CmdLineTests ./CommandLineOptionParser_Test.cc ) -find_package(GTest 1.8.1 CONFIG REQUIRED) +find_package(AE108_GTest MODULE REQUIRED) target_link_libraries(${PROJECT_NAME}-CmdLineTests PRIVATE ${PROJECT_NAME}::cmdline PRIVATE GTest::gmock_main diff --git a/cppptest/src/CMakeLists.txt b/cppptest/src/CMakeLists.txt index ce8fd36c..b58b60c1 100644 --- a/cppptest/src/CMakeLists.txt +++ b/cppptest/src/CMakeLists.txt @@ -25,8 +25,8 @@ add_library(${PROJECT_NAME}::cppptest ALIAS ${PROJECT_NAME}-cppptest) target_include_directories(${PROJECT_NAME}-cppptest PUBLIC include) +find_package(AE108_GTest MODULE REQUIRED) find_package(AE108_PETSc 3.10 MODULE REQUIRED) -find_package(GTest 1.8.1 CONFIG REQUIRED) target_link_libraries(${PROJECT_NAME}-cppptest PRIVATE ${PROJECT_NAME}::external::petsc PUBLIC GTest::gmock diff --git a/elements/test/CMakeLists.txt b/elements/test/CMakeLists.txt index 49076723..0e038c9f 100644 --- a/elements/test/CMakeLists.txt +++ b/elements/test/CMakeLists.txt @@ -46,7 +46,7 @@ add_executable(${PROJECT_NAME}-ElementsTests add_test(NAME ${PROJECT_NAME}-ElementsTests COMMAND $<TARGET_FILE:${PROJECT_NAME}-ElementsTests>) -find_package(GTest 1.8.1 CONFIG REQUIRED) +find_package(AE108_GTest MODULE REQUIRED) target_link_libraries(${PROJECT_NAME}-ElementsTests PUBLIC ${PROJECT_NAME}-elements GTest::gmock_main -- GitLab