summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@qt.io>2024-02-28 11:01:47 +0100
committerDominik Holland <dominik.holland@qt.io>2024-02-28 13:20:59 +0100
commitf437fe32626f1c5a880c7f5d7937ad150b9bff6b (patch)
tree8e4a2ec9832107e6c62c9b3f85cc8ff0411b6643
parent7108609d4d3675f3553a1d05f372f6df6d4ad1a1 (diff)
CMake: Update instructions to build a code-coverage report
Pick-to: 6.7 6.6 6.5 Change-Id: I15c358c92c39b6acba67223c7e9e901b56d0c083 Reviewed-by: Robert Griebl <robert.griebl@qt.io>
-rw-r--r--CMakeLists.txt46
1 files changed, 27 insertions, 19 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3c6fde74..aba73fe6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -35,10 +35,11 @@ if(IF_COVERAGE)
endif()
set(QT_BUILD_TESTS ON)
- set(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage")
- set(GCC_COVERAGE_LINK_FLAGS "-fprofile-arcs -fprofile-generate -lgcov --coverage")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
+ set(QT_BUILD_TESTS_BY_DEFAULT ON)
+ add_compile_options(-fprofile-arcs -ftest-coverage -fprofile-update=atomic)
+ add_link_options(-fprofile-arcs -fprofile-generate --coverage)
+ add_compile_definitions(QT_IF_COVERAGE)
+ link_libraries(gcov)
set(GCOV_EXCLUDE
'/usr/*'
@@ -51,24 +52,31 @@ if(IF_COVERAGE)
'${CMAKE_CURRENT_BINARY_DIR}/*'
)
- if(QT_SOURCE_TREE)
- string(REGEX REPLACE "/qtbase$" "" qtSrcDir ${QT_SOURCE_TREE})
- list(APPEND GCOV_EXCLUDE '${qtSrcDir}/*')
+ if(QT_BUILD_STANDALONE_TESTS)
+ # Coin splits the build into two separate directories, so we need to merge the coverage info
+ set(GCOV_EXTRA_FOLDER "../qtinterfaceframework_build")
+ set(LCOV_EXTRA_ARGS -d ${GCOV_EXTRA_FOLDER})
+ list(APPEND GCOV_EXCLUDE '/home/qt/work/qt/qtinterfaceframework_build/*')
+ endif()
+ set(COVERAGE_DEPENDS all)
+ if(QT_WILL_INSTALL)
+ list(APPEND COVERAGE_DEPENDS tests/auto/install)
endif()
add_custom_target(check_coverage
- find . -name \"*.gcov-info\" -print0 | xargs -0 rm -f &&
- lcov -c -i -d . --rc lcov_branch_coverage=1 --rc geninfo_auto_base=1 -o "${CMAKE_CURRENT_BINARY_DIR}/base.gcov-info" >/dev/null 2>&1 &&
- ctest --test-dir tests/auto --verbose &&
- lcov -c -d . --rc lcov_branch_coverage=1 --rc geninfo_auto_base=1 -o "${CMAKE_CURRENT_BINARY_DIR}/test.gcov-info" >/dev/null &&
- lcov --rc lcov_branch_coverage=1 -o "${CMAKE_CURRENT_BINARY_DIR}/temp.gcov-info" `find . -name \"*.gcov-info\" | xargs -n1 echo -a` >/dev/null &&
- lcov --rc lcov_branch_coverage=1 -o "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.gcov-info" -r temp.gcov-info ${GCOV_EXCLUDE} >/dev/null &&
- rm -f base.gcov-info test.gcov-info temp.gcov-info &&
- genhtml -o branch-coverage -s -f --legend --branch-coverage --rc lcov_branch_coverage=1 --demangle-cpp ${PROJECT_NAME}.gcov-info >/dev/null &&
- echo \"\\n\\nCoverage info is available at file://`pwd`/branch-coverage/index.html\\n\"
-
- DEPENDS
- tests/auto/install
+ COMMAND sh -c 'which lcov >/dev/null || { echo "The lcov tool is not available." && exit 2 \; }'
+ COMMAND sh -c 'which genhtml >/dev/null || { echo "The genhtml tool is not available." && exit 2 \; }'
+ COMMAND find . \\\( -name \"*.gcov-info\" -o -name \"*.gcda\" \\\) -print0 | xargs -0 rm -f
+ COMMAND lcov -keep-going -c -i -d . ${LCOV_EXTRA_ARGS} --rc branch_coverage=1 --rc geninfo_auto_base=1 -o "${CMAKE_CURRENT_BINARY_DIR}/base.gcov-info"
+ COMMAND ctest --test-dir tests/auto --verbose --repeat until-pass:3
+ COMMAND lcov -keep-going -c -d . ${LCOV_EXTRA_ARGS} --rc branch_coverage=1 --rc geninfo_auto_base=1 -o "${CMAKE_CURRENT_BINARY_DIR}/test.gcov-info"
+ COMMAND lcov -keep-going --rc branch_coverage=1 -o "${CMAKE_CURRENT_BINARY_DIR}/temp.gcov-info" `find . ${GCOV_EXTRA_FOLDER} -name \"*.gcov-info\" | xargs -n1 echo -a`
+ COMMAND lcov -keep-going --rc branch_coverage=1 -o "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.gcov-info" -r temp.gcov-info ${GCOV_EXCLUDE}
+ COMMAND rm -f base.gcov-info test.gcov-info temp.gcov-info
+ COMMAND genhtml -o coverage-report -s -f -t "${PROJECT_NAME}" --legend --branch-coverage --rc branch_coverage=1 --rc geninfo_unexecuted_blocks=1 --demangle-cpp "c++filt" ${PROJECT_NAME}.gcov-info
+ COMMAND echo \"\\n\\nCoverage info is available at file://`pwd`/coverage-report/index.html\\n\"
+
+ DEPENDS ${COVERAGE_DEPENDS}
USES_TERMINAL
)
endif()