diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2016-12-25 14:35:50 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2016-12-25 14:35:50 +0100 |
| commit | 8b90c5be81649b3aae8ca9ffed3282e8985c47da (patch) | |
| tree | e539d2696eadb18226ad21e0ea8e3a15aecdde36 | |
| parent | a8b2bf93b10447a17520c3d4918470fae908fabd (diff) | |
| download | extfs-8b90c5be81649b3aae8ca9ffed3282e8985c47da.tar.xz extfs-8b90c5be81649b3aae8ca9ffed3282e8985c47da.zip | |
coverage: Clean up CodeCoverage.cmake
| -rw-r--r-- | .travis.yml | 2 | ||||
| -rw-r--r-- | CMakeLists.txt | 6 | ||||
| -rw-r--r-- | cmake/modules/CodeCoverage.cmake | 115 |
3 files changed, 78 insertions, 45 deletions
diff --git a/.travis.yml b/.travis.yml index 4db3206..4b57b71 100644 --- a/.travis.yml +++ b/.travis.yml @@ -91,7 +91,7 @@ script: - cmake .. -DCMAKE_CXX_COMPILER=${COMPILER} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCUTE_RUN_DURING_BUILD=Off - cmake --build . -- -j$(nproc) - ctest - - if [ "$BUILD_TYPE" == "Coverage" ]; then cmake --build . --target extfs_coverage; fi + - if [ "$BUILD_TYPE" == "Coverage" ]; then cmake --build . --target coverage; fi after_success: - if [ "$BUILD_TYPE" == "Coverage" ]; then sed -i'' -e "s_$(cd .. && pwd)/__g" coverage.info.cleaned; fi diff --git a/CMakeLists.txt b/CMakeLists.txt index 23ce731..78d4fa2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,14 +26,12 @@ if(${EXTFS_ENABLE_TESTS}) if("${CMAKE_BUILD_TYPE}" STREQUAL "Coverage") include("CodeCoverage") - add_coverage(${PROJECT_NAME}_coverage - COMMAND ${CMAKE_COMMAND} --build . --target test - OUTPUT coverage + add_coverage(${PROJECT_NAME} + COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target test DEPENDENCIES ${CUTE_TARGETS} SOURCE_DIRECTORIES "${PROJECT_SOURCE_DIR}/src/fs/*" "${PROJECT_SOURCE_DIR}/include/fs/**.hpp" QUIET - HTML_REPORT ) endif() endif() diff --git a/cmake/modules/CodeCoverage.cmake b/cmake/modules/CodeCoverage.cmake index 7612f93..8c53624 100644 --- a/cmake/modules/CodeCoverage.cmake +++ b/cmake/modules/CodeCoverage.cmake @@ -44,6 +44,10 @@ if(NOT CMAKE_COMPILER_IS_GNUCXX) endif() endif() +if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "Coverage")) + message( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" ) +endif() + set(CMAKE_CXX_FLAGS_COVERAGE "-g -O0 --coverage" CACHE STRING @@ -78,90 +82,121 @@ mark_as_advanced( CMAKE_SHARED_LINKER_FLAGS_COVERAGE ) -if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "Coverage")) - message( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" ) +if(NOT TARGET "coverage") + add_custom_target("coverage" ; + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + ) endif() function(add_coverage TARGET_NAME) - set(OPTIONS HTML_REPORT QUIET) + set(OPTIONS REPORT QUIET) set(SV_ARGUMENTS OUTPUT) set(MV_ARGUMENTS DEPENDENCIES SOURCE_DIRECTORIES COMMAND) cmake_parse_arguments(ADD_COVERAGE "${OPTIONS}" "${SV_ARGUMENTS}" "${MV_ARGUMENTS}" ${ARGN}) - set(COVERAGE_INFO "${CMAKE_BINARY_DIR}/${ADD_COVERAGE_OUTPUT}.info") - set(COVERAGE_CLEANED "${COVERAGE_INFO}.cleaned") + if(${ADD_COVERAGE_OUTPUT}) + set(COVERAGE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Coverage/${ADD_COVERAGE_OUTPUT}") + else() + set(COVERAGE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Coverage/${TARGET_NAME}") + endif() + + if(ADD_COVERAGE_QUIET) + set(COVERAGE_QUIET_FLAG "-q") + else() + unset(COVERAGE_QUIET_FLAG) + endif() + + if(ADD_COVERAGE_REPORT) + set(COVERAGE_REPORT ON) + else() + set(COVERAGE_REPORT OFF) + endif() + + set(COVERAGE_RAW_DATA "${COVERAGE_OUTPUT_DIRECTORY}/${TARGET_NAME}.raw") + set(COVERAGE_CLEAN_DATA "${COVERAGE_OUTPUT_DIRECTORY}/${TARGET_NAME}.clean") + set(COVERAGE_COMMENT_PREFIX "[CodeCoverage:${TARGET_NAME}]") + set(COVERAGE_REPORT_DIRECTORY "${COVERAGE_OUTPUT_DIRECTORY}/report") + set(COVERAGE_DEPENDENCIES "${ADD_COVERAGE_DEPENDENCIES}") + set(COVERAGE_DRIVER "${ADD_COVERAGE_COMMAND}") + + set(COVERAGE_TARGET_NAME "coverage_${TARGET_NAME}") + + set_property(DIRECTORY APPEND PROPERTY + ADDITIONAL_MAKE_CLEAN_FILES "${COVERAGE_OUTPUT_DIRECTORY}" + ) foreach(SOURCE_DIRECTORY IN LISTS ADD_COVERAGE_SOURCE_DIRECTORIES) list(APPEND EXTRACT_DIRECTORIES "'${SOURCE_DIRECTORY}'") endforeach() - if(NOT TARGET ${TARGET_NAME}) - string(REPLACE ";" " " TEST_DRIVER "${ADD_COVERAGE_COMMAND}") - message(STATUS "Registering coverage target '${TARGET_NAME}' with driver '${TEST_DRIVER}'") - endif() + if(NOT TARGET ${COVERAGE_TARGET_NAME}) + string(REPLACE ";" " " DRIVER "${COVERAGE_DRIVER}") + message(STATUS "Registering coverage target '${COVERAGE_TARGET_NAME}' with driver '${DRIVER}'") - add_custom_target(${TARGET_NAME} ; - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - DEPENDS ${ADD_COVERAGE_DEPENDENCIES} - ) + add_custom_target(${COVERAGE_TARGET_NAME} ; + WORKING_DIRECTORY ${COVERAGE_OUTPUT_DIRECTORY} + DEPENDS ${COVERAGE_DEPENDENCIES} + ) - if(ADD_COVERAGE_QUIET) - set(ADD_COVERAGE_QUIET "-q") - else() - unset(ADD_COVERAGE_QUIET) + file(MAKE_DIRECTORY ${COVERAGE_OUTPUT_DIRECTORY}) endif() - add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + add_dependencies("coverage" ${COVERAGE_TARGET_NAME}) + + add_custom_command(TARGET ${COVERAGE_TARGET_NAME} POST_BUILD COMMAND ${LCOV_PATH} --directory . - --zerocounters ${ADD_COVERAGE_QUIET} - COMMENT "[CodeCoverage] Resetting coverage counters ..." + --zerocounters + ${COVERAGE_QUIET_FLAG} + COMMENT "${COVERAGE_COMMENT_PREFIX} Resetting coverage counters ..." ) - add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + add_custom_command(TARGET ${COVERAGE_TARGET_NAME} POST_BUILD COMMAND ${ADD_COVERAGE_COMMAND} >/dev/null - COMMENT "[CodeCoverage] Running test driver ..." + COMMENT "${COVERAGE_COMMENT_PREFIX} Running coverage driver ..." ) - add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + add_custom_command(TARGET ${COVERAGE_TARGET_NAME} POST_BUILD COMMAND ${LCOV_PATH} --rc 'lcov_branch_coverage=1' --directory . --capture - --output-file ${COVERAGE_INFO} ${ADD_COVERAGE_QUIET} - COMMENT "[CodeCoverage] Collecting coverage data ..." + --output-file ${COVERAGE_RAW_DATA} + ${COVERAGE_QUIET_FLAG} + COMMENT "${COVERAGE_COMMENT_PREFIX} Collecting coverage data ..." ) - add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + add_custom_command(TARGET ${COVERAGE_TARGET_NAME} POST_BUILD COMMAND ${LCOV_PATH} --rc 'lcov_branch_coverage=1' - --extract ${COVERAGE_INFO} ${EXTRACT_DIRECTORIES} - --output-file ${COVERAGE_CLEANED} ${ADD_COVERAGE_QUIET} - COMMENT "[CodeCoverage] Extracting project relevant data ..." + --extract ${COVERAGE_RAW_DATA} ${EXTRACT_DIRECTORIES} + --output-file ${COVERAGE_CLEAN_DATA} + ${COVERAGE_QUIET_FLAG} + COMMENT "${COVERAGE_COMMENT_PREFIX} Extracting project relevant data ..." ) - if(ADD_COVERAGE_HTML_REPORT) + if(${COVERAGE_REPORT}) find_program(GENHTML_PATH genhtml) if(NOT GENHTML_PATH) message(FATAL_ERROR "genhtml not found! Aborting...") endif() - add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + add_custom_command(TARGET ${COVERAGE_TARGET_NAME} POST_BUILD COMMAND ${GENHTML_PATH} --rc 'lcov_branch_coverage=1' - -o ${ADD_COVERAGE_OUTPUT} - ${COVERAGE_CLEANED} - ${ADD_COVERAGE_QUIET} - COMMENT "[CodeCoverage] Generating HTML report ..." + -o "${COVERAGE_REPORT_DIRECTORY}" + "${COVERAGE_CLEAN_DATA}" + "${COVERAGE_QUIET_FLAG}" + COMMENT "${COVERAGE_COMMENT_PREFIX} Generating report ..." ) - add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + add_custom_command(TARGET ${COVERAGE_TARGET_NAME} POST_BUILD COMMAND ; - COMMENT "[CodeCoverage] HTML report generated here: ./${ADD_COVERAGE_OUTPUT}/index.html" + COMMENT "${COVERAGE_COMMENT_PREFIX} Report generated at: ${COVERAGE_REPORT_DIRECTORY}/index.html" ) endif() - add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + add_custom_command(TARGET ${COVERAGE_TARGET_NAME} POST_BUILD COMMAND ${LCOV_PATH} --rc 'lcov_branch_coverage=1' - --summary ${COVERAGE_CLEANED} - COMMENT "[CodeCoverage] Summary:" + --summary ${COVERAGE_CLEAN_DATA} + COMMENT "${COVERAGE_COMMENT_PREFIX} Summary:" ) endfunction() |
