@@ -145,16 +145,20 @@ set(GCOV_TOOL ${GCOV_EXECUTABLE})
145145add_custom_target (coverage
146146 # Clean any existing coverage data
147147 COMMAND ${CMAKE_COMMAND} -E remove -f coverage.info coverage_filtered.info
148- # Run tests to generate .gcda files (no need to zero counters since we clean .gcda)
148+ # Initialize coverage counters to ensure clean state
149+ COMMAND lcov --gcov-tool ${GCOV_TOOL} --zerocounters --directory . || true
150+ # Run tests to generate .gcda files
149151 COMMAND tests/aireg++_tests
150- # Capture coverage data from all .gcno/.gcda files with error handling
151- COMMAND lcov --gcov-tool ${GCOV_TOOL} --capture --directory . --output -file coverage.info --ignore -errors mismatch,gcov,source --rc geninfo_unexecuted_blocks=1
152+ # Capture coverage data from all .gcno/.gcda files with comprehensive error handling
153+ COMMAND lcov --gcov-tool ${GCOV_TOOL} --capture --directory . --output -file coverage.info --ignore -errors mismatch,gcov,source ,unused --rc geninfo_unexecuted_blocks=1 --rc lcov_branch_coverage=0
154+ # Verify coverage.info was created
155+ COMMAND test -f coverage.info || (echo "ERROR: coverage.info not created" && exit 1)
152156 # Filter out system headers and test files
153157 COMMAND lcov --remove coverage.info '/usr/*' '*/tests/*' '*/examples/*' '*/googletest/*' --output -file coverage_filtered.info --ignore -errors mismatch,source ,unused
154158 # Create output directory
155159 COMMAND ${CMAKE_COMMAND} -E make_directory coverage_html
156160 # Generate HTML report (ignore exit code since warnings can cause non-zero exit)
157- COMMAND genhtml coverage_filtered.info --output -directory coverage_html --ignore -errors source ,mismatch || true
161+ COMMAND genhtml coverage_filtered.info --output -directory coverage_html --ignore -errors source ,mismatch,unused || true
158162 # Print summary
159163 COMMAND lcov --summary coverage_filtered.info
160164 DEPENDS aireg++_tests
0 commit comments