diff --git a/cmake/tools.cmake b/cmake/tools.cmake index 2364da93..be6a7c61 100644 --- a/cmake/tools.cmake +++ b/cmake/tools.cmake @@ -10,8 +10,10 @@ include(${CMAKE_CURRENT_LIST_DIR}/CPM.cmake) # enables sanitizers support using the the `USE_SANITIZER` flag available values are: Address, # Memory, MemoryWithOrigins, Undefined, Thread, Leak, 'Address;Undefined' -if(USE_SANITIZER OR USE_STATIC_ANALYZER) - CPMAddPackage("gh:StableCoder/cmake-scripts#1f822d1fc87c8d7720c074cde8a278b44963c354") +if(USE_SANITIZER OR USE_STATIC_ANALYZER OR CODE_COVERAGE) + CPMAddPackage("gh:StableCoder/cmake-scripts#1d4bcb41000e7a6a0e6ee1350d91f84f03c14320") + + include(${cmake-scripts_SOURCE_DIR}/code-coverage.cmake) if(USE_SANITIZER) include(${cmake-scripts_SOURCE_DIR}/sanitizers.cmake) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 68e6cf0e..d8881708 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -7,6 +7,8 @@ project(GreeterTests LANGUAGES CXX) option(ENABLE_TEST_COVERAGE "Enable test coverage" OFF) option(TEST_INSTALLED_VERSION "Test the version found by find_package" OFF) +set(CODE_COVERAGE ${ENABLE_TEST_COVERAGE}) + # --- Import tools ---- include(../cmake/tools.cmake) @@ -54,6 +56,13 @@ doctest_discover_tests(GreeterTests) # ---- code coverage ---- if(ENABLE_TEST_COVERAGE) - target_compile_options(Greeter PUBLIC -O0 -g -fprofile-arcs -ftest-coverage) - target_link_options(Greeter PUBLIC -fprofile-arcs -ftest-coverage) + if(DEFINED ENV{CPM_SOURCE_CACHE}) + set(CCOV_EXCLUDES $ENV{CPM_SOURCE_CACHE}/.* $ENV{CPM_SOURCE_CACHE}/*) + endif() + set(CCOV_EXCLUDES ${CMAKE_BINARY_DIR}/.* ${CMAKE_BINARY_DIR}/*) + + add_code_coverage_all_targets(EXCLUDE ${CCOV_EXCLUDES}) + + target_code_coverage(Greeter EXCLUDE ${CCOV_EXCLUDES}) + target_code_coverage(GreeterTests AUTO EXCLUDE ${CCOV_EXCLUDES}) endif()