from https://github.com/google/cppdap/pull/124 From 40d9eaf3b6eca2ab8d5558e8935d56a75bd97183 Mon Sep 17 00:00:00 2001 From: topazus Date: Wed, 27 Dec 2023 19:56:49 +0800 Subject: [PATCH] CMake: add CPPDAP_USE_EXTERNAL_GTEST_PACKAGE option --- CMakeLists.txt | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b3c321..7292f3c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,7 @@ option_if_not_defined(CPPDAP_INSTALL_VSCODE_EXAMPLES "Build and install dap exam option_if_not_defined(CPPDAP_USE_EXTERNAL_NLOHMANN_JSON_PACKAGE "Use nlohmann_json with find_package() instead of building internal submodule" OFF) option_if_not_defined(CPPDAP_USE_EXTERNAL_RAPIDJSON_PACKAGE "Use RapidJSON with find_package()" OFF) option_if_not_defined(CPPDAP_USE_EXTERNAL_JSONCPP_PACKAGE "Use JsonCpp with find_package()" OFF) +option_if_not_defined(CPPDAP_USE_EXTERNAL_GTEST_PACKAGE "Use googletest with find_package()" OFF) ########################################################### # Directories @@ -59,7 +60,7 @@ set_if_not_defined(CPPDAP_GOOGLETEST_DIR ${CPPDAP_THIRD_PARTY_DIR}/googletest) ########################################################### # Submodules ########################################################### -if(CPPDAP_BUILD_TESTS) +if(CPPDAP_BUILD_TESTS AND NOT CPPDAP_USE_EXTERNAL_GTEST_PACKAGE) if(NOT EXISTS ${CPPDAP_GOOGLETEST_DIR}/.git) message(WARNING "third_party/googletest submodule missing.") message(WARNING "Run: `git submodule update --init` to build tests.") @@ -161,7 +162,7 @@ function(cppdap_set_json_links target) target_link_libraries(${target} PRIVATE JsonCpp::JsonCpp) else() target_include_directories(${target} PRIVATE "${CPPDAP_JSON_DIR}/include/") - endif() + endif() endfunction(cppdap_set_json_links) function(cppdap_set_target_options target) @@ -247,7 +248,7 @@ write_basic_package_version_file( ) configure_package_config_file( ${CPPDAP_CMAKE_CONFIG_TEMPLATE} - "${CPPDAP_CMAKE_PROJECT_CONFIG_FILE}" + "${CPPDAP_CMAKE_PROJECT_CONFIG_FILE}" INSTALL_DESTINATION ${CPPDAP_CONFIG_INSTALL_DIR} ) @@ -276,6 +277,8 @@ DESTINATION ${CPPDAP_CONFIG_INSTALL_DIR}) # tests if(CPPDAP_BUILD_TESTS) + enable_testing() + set(DAP_TEST_LIST ${CPPDAP_SRC_DIR}/any_test.cpp ${CPPDAP_SRC_DIR}/chan_test.cpp @@ -290,16 +293,24 @@ if(CPPDAP_BUILD_TESTS) ${CPPDAP_SRC_DIR}/traits_test.cpp ${CPPDAP_SRC_DIR}/typeinfo_test.cpp ${CPPDAP_SRC_DIR}/variant_test.cpp - ${CPPDAP_GOOGLETEST_DIR}/googletest/src/gtest-all.cc ) - set(DAP_TEST_INCLUDE_DIR - ${CPPDAP_GOOGLETEST_DIR}/googlemock/include/ - ${CPPDAP_GOOGLETEST_DIR}/googletest/ - ${CPPDAP_GOOGLETEST_DIR}/googletest/include/ - ) + if(CPPDAP_USE_EXTERNAL_GTEST_PACKAGE) + find_package(GTest REQUIRED) + else() + list(APPEND DAP_TEST_LIST + ${CPPDAP_GOOGLETEST_DIR}/googletest/src/gtest-all.cc + ) + + set(DAP_TEST_INCLUDE_DIR + ${CPPDAP_GOOGLETEST_DIR}/googlemock/include/ + ${CPPDAP_GOOGLETEST_DIR}/googletest/ + ${CPPDAP_GOOGLETEST_DIR}/googletest/include/ + ) + endif() add_executable(cppdap-unittests ${DAP_TEST_LIST}) + add_test(NAME cppdap-unittests COMMAND cppdap-unittests) target_include_directories(cppdap-unittests PUBLIC ${DAP_TEST_INCLUDE_DIR} ) set_target_properties(cppdap-unittests PROPERTIES @@ -312,7 +323,11 @@ if(CPPDAP_BUILD_TESTS) endif() cppdap_set_target_options(cppdap-unittests) - target_link_libraries(cppdap-unittests PRIVATE cppdap) + if(CPPDAP_USE_EXTERNAL_GTEST_PACKAGE) + target_link_libraries(cppdap-unittests PRIVATE cppdap GTest::gtest) + else() + target_link_libraries(cppdap-unittests PRIVATE cppdap) + endif() endif(CPPDAP_BUILD_TESTS) # fuzzer