diff options
author | Dominik Holland <dominik.holland@qt.io> | 2024-02-28 11:01:47 +0100 |
---|---|---|
committer | Dominik Holland <dominik.holland@qt.io> | 2024-02-28 13:20:59 +0100 |
commit | f437fe32626f1c5a880c7f5d7937ad150b9bff6b (patch) | |
tree | 8e4a2ec9832107e6c62c9b3f85cc8ff0411b6643 | |
parent | 7108609d4d3675f3553a1d05f372f6df6d4ad1a1 (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.txt | 46 |
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() |