From ebbb14811e04564d767976cc6b2f09f5b983b5fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Tue, 9 Mar 2021 16:29:30 +0100 Subject: [PATCH] Add a mechanism to remove old corverage data files The idea is that if a source file is removed, its associated .gcno and .gcda files remained, leading to a crash of lcov (non finding expected sources) --- CMakeLists.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 114ceecc5..95f96478b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -367,6 +367,20 @@ add_custom_target(run_unit_tests # unit tests coverage if("${CMAKE_BUILD_TYPE}" STREQUAL "Coverage") + file(GLOB_RECURSE GCNO_FILE_LIST RELATIVE "${PUGS_BINARY_DIR}" "*.gcno") + list(FILTER GCNO_FILE_LIST EXCLUDE REGEX "^\.\./.*" ) + file(GLOB_RECURSE GCDA_FILE_LIST RELATIVE "${PUGS_BINARY_DIR}" "*.gcda") + list(FILTER GCDA_FILE_LIST EXCLUDE REGEX "^\.\./.*" ) + foreach(COV_INFO_FILE IN LISTS GCNO_FILE_LIST GCDA_FILE_LIST) + string(REGEX REPLACE "/CMakeFiles/.*\.dir/" "/" COV_SRC_FILE "${PUGS_SOURCE_DIR}/${COV_INFO_FILE}") + string(REGEX REPLACE "\.gcda$" "" COV_SRC_FILE "${COV_SRC_FILE}") + string(REGEX REPLACE "\.gcno$" "" COV_SRC_FILE "${COV_SRC_FILE}") + if (NOT EXISTS "${COV_SRC_FILE}") + file(REMOVE "${PUGS_BINARY_DIR}/${COV_INFO_FILE}") + message(STATUS "removed file ${COV_INFO_FILE}: no longer needed") + endif() + endforeach() + find_program(LCOV lcov) if(NOT LCOV) message(FATAL_ERROR "lcov not found, cannot perform coverage.") -- GitLab