From 686ad2337b9e56d75fee33c46f03016b78608576 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Sun, 31 May 2026 23:40:13 +0900 Subject: [PATCH] build: Allow using GTest from system and use a target approach. This modernizes how GoogleTest is discovered and used, and integrates the test suite with CTest. --- CMakeLists.txt | 1 + cmake/dependency.gtest.cmake | 30 ++++++++++++++---------------- tests/CMakeLists.txt | 8 +++----- 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 02dac6a..92c6d68 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,6 +132,7 @@ install(EXPORT YatoTargets option(YATO_BUILD_TESTS "Build unit tests" ON) if(YATO_BUILD_TESTS) + enable_testing() add_subdirectory(./tests) endif() diff --git a/cmake/dependency.gtest.cmake b/cmake/dependency.gtest.cmake index 5991c7f..b5e176a 100644 --- a/cmake/dependency.gtest.cmake +++ b/cmake/dependency.gtest.cmake @@ -7,14 +7,12 @@ # Google test dependency # https://github.com/google/googletest # -# Output variables: -# GTEST_INCLUDE_DIR - includes -# GTEST_LIBRARY_DIR - link directories -# GTEST_LIBRARIES - link targets -# GMOCK_INCLUDE_DIR - includes +# Targets: +# gtest and gtest_main - -include(${YATO_SOURCE_DIR}/cmake/dependency.common.functions.cmake) +if (TARGET gtest) + return() +endif() macro(_gtest_fix_definitions _TARGET_NAME_) if(TARGET ${_TARGET_NAME_}) @@ -22,6 +20,15 @@ macro(_gtest_fix_definitions _TARGET_NAME_) endif() endmacro(_gtest_fix_definitions) +find_package(GTest CONFIG) +if (TARGET GTest::gtest) + add_library(gtest ALIAS GTest::gtest) + add_library(gtest_main ALIAS GTest::gtest_main) + return() +endif() + +include(${YATO_SOURCE_DIR}/cmake/dependency.common.functions.cmake) + dependency_find_or_download( NAME GTEST VERBOSE_NAME "GoogleTest" @@ -51,12 +58,3 @@ if(NOT TARGET gtest) set_property(TARGET gtest PROPERTY FOLDER "Dependencies") set_property(TARGET gtest_main PROPERTY FOLDER "Dependencies") endif() - -set(GTEST_INCLUDE_DIR ${GTEST_FOUND_ROOT}/googletest/include CACHE INTERNAL "") -set(GMOCK_INCLUDE_DIR ${GTEST_FOUND_ROOT}/googlemock/include CACHE INTERNAL "") -set(GTEST_LIBRARY_DIR "" CACHE INTERNAL "") -list(APPEND GTEST_LIBRARIES gtest) -list(APPEND GTEST_LIBRARIES gtest_main) -set(GTEST_LIBRARIES ${GTEST_LIBRARIES} CACHE INTERNAL "") - - diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 514d80f..d57d745 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -15,7 +15,6 @@ include(${YATO_SOURCE_DIR}/cmake/dependency.gtest.cmake) #========================================== # Sources -include_directories(${GTEST_INCLUDE_DIR}) include_directories(${YATO_INCLUDE_DIRS}) file(GLOB all_tests "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/source/*.h") @@ -33,9 +32,9 @@ source_group(TREE "${YATO_SOURCE_DIR}" FILES ${all_sources}) # Targets add_definitions(-DYATO_ENABLE_TESTED_ASSERTIONS) -link_directories(${GTEST_LIBRARY_DIR}) add_executable(YatoTests ${all_sources}) +target_link_libraries(YatoTests PRIVATE gtest_main) set_property(TARGET YatoTests PROPERTY FOLDER "Tests") @@ -45,6 +44,5 @@ _gtest_fix_definitions(YatoTests) foreach(lib ${Yato_TEST_LIBS}) target_link_libraries(YatoTests ${lib}) endforeach() -foreach(lib ${GTEST_LIBRARIES}) - target_link_libraries(YatoTests ${lib}) -endforeach() + +add_test(NAME "unit-tests" COMMAND "./YatoTests")