diff --git a/CMakeLists.txt b/CMakeLists.txt index 8fa0c944464ccefe6f2db36c76246fbe6be02116..3a444de3af9c1e3ba5d7f07c00c4f8ab91c9cce1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,7 +132,6 @@ include_directories(src/scheme) include_directories(src/experimental) - # Pastis tests set(CATCH_MODULE_PATH "${PASTIS_SOURCE_DIR}/packages/Catch2") @@ -144,6 +143,35 @@ add_subdirectory("${CATCH_MODULE_PATH}") add_subdirectory(tests) enable_testing() +# unit tests coverage + +if("${CMAKE_BUILD_TYPE}" STREQUAL "Coverage") + find_program(GCOVR gcovr) + if(NOT GCOVR) + message(FATAL_ERROR "gcovr not found, cannot perform coverage.") + endif() + + set(GCOVR_OPTIONS --object-directory="${PASTIS_BINARY_DIR}" -r "${PASTIS_SOURCE_DIR}/src" -e "${PASTIS_SOURCE_DIR}/src/experimental" -e "${PASTIS_SOURCE_DIR}/src/main.cpp") + add_custom_target(coverage + ALL + # COMMAND ${unit_test_EXECUTABLE} + COMMAND ${GCOVR} ${GCOVR_OPTIONS} + DEPENDS unit_tests pastis + COMMENT "Running gcovr to build coverage report." + ) + + add_custom_target(coverage-report + ALL + COMMAND ${CMAKE_COMMAND} -E remove_directory "${PASTIS_BINARY_DIR}/coverage" + COMMAND ${CMAKE_COMMAND} -E make_directory "${PASTIS_BINARY_DIR}/coverage" + COMMAND ${GCOVR} ${GCOVR_OPTIONS} --html --html-details -o "${PASTIS_BINARY_DIR}/coverage/coverage.html" + DEPENDS coverage + COMMENT "Building coverage html report." + WORKING_DIRECTORY "${PASTIS_BINARY_DIR}" + ) + +endif() + # ----------------------------------------------------- link_libraries("-rdynamic")