Coverage.cmake
1 # Copyright (c) 2024-present The Bitcoin Core developers 2 # Distributed under the MIT software license, see the accompanying 3 # file COPYING or https://opensource.org/license/mit/. 4 5 include(${CMAKE_CURRENT_LIST_DIR}/CoverageInclude.cmake) 6 7 set(functional_test_runner test/functional/test_runner.py) 8 if(EXTENDED_FUNCTIONAL_TESTS) 9 list(APPEND functional_test_runner --extended) 10 endif() 11 if(DEFINED JOBS) 12 list(APPEND CMAKE_CTEST_COMMAND -j ${JOBS}) 13 list(APPEND functional_test_runner -j ${JOBS}) 14 endif() 15 16 execute_process( 17 COMMAND ${CMAKE_CTEST_COMMAND} --build-config Coverage 18 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} 19 COMMAND_ERROR_IS_FATAL ANY 20 ) 21 execute_process( 22 COMMAND ${LCOV_COMMAND} --capture --directory src --test-name test_bitcoin --output-file test_bitcoin.info 23 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} 24 COMMAND_ERROR_IS_FATAL ANY 25 ) 26 execute_process( 27 COMMAND ${LCOV_COMMAND} --zerocounters --directory src 28 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} 29 COMMAND_ERROR_IS_FATAL ANY 30 ) 31 execute_process( 32 COMMAND ${LCOV_FILTER_COMMAND} test_bitcoin.info test_bitcoin_filtered.info 33 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} 34 COMMAND_ERROR_IS_FATAL ANY 35 ) 36 execute_process( 37 COMMAND ${LCOV_COMMAND} --add-tracefile test_bitcoin_filtered.info --output-file test_bitcoin_filtered.info 38 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} 39 COMMAND_ERROR_IS_FATAL ANY 40 ) 41 execute_process( 42 COMMAND ${LCOV_COMMAND} --add-tracefile baseline_filtered.info --add-tracefile test_bitcoin_filtered.info --output-file test_bitcoin_coverage.info 43 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} 44 COMMAND_ERROR_IS_FATAL ANY 45 ) 46 execute_process( 47 COMMAND ${GENHTML_COMMAND} test_bitcoin_coverage.info --output-directory test_bitcoin.coverage 48 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} 49 COMMAND_ERROR_IS_FATAL ANY 50 ) 51 52 execute_process( 53 COMMAND ${functional_test_runner} 54 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} 55 COMMAND_ERROR_IS_FATAL ANY 56 ) 57 execute_process( 58 COMMAND ${LCOV_COMMAND} --capture --directory src --test-name functional-tests --output-file functional_test.info 59 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} 60 COMMAND_ERROR_IS_FATAL ANY 61 ) 62 execute_process( 63 COMMAND ${LCOV_COMMAND} --zerocounters --directory src 64 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} 65 COMMAND_ERROR_IS_FATAL ANY 66 ) 67 execute_process( 68 COMMAND ${LCOV_FILTER_COMMAND} functional_test.info functional_test_filtered.info 69 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} 70 COMMAND_ERROR_IS_FATAL ANY 71 ) 72 execute_process( 73 COMMAND ${LCOV_COMMAND} --add-tracefile functional_test_filtered.info --output-file functional_test_filtered.info 74 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} 75 COMMAND_ERROR_IS_FATAL ANY 76 ) 77 execute_process( 78 COMMAND ${LCOV_COMMAND} --add-tracefile baseline_filtered.info --add-tracefile test_bitcoin_filtered.info --add-tracefile functional_test_filtered.info --output-file total_coverage.info 79 COMMAND ${GREP_EXECUTABLE} "%" 80 COMMAND ${AWK_EXECUTABLE} "{ print substr($3,2,50) \"/\" $5 }" 81 OUTPUT_FILE coverage_percent.txt 82 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} 83 COMMAND_ERROR_IS_FATAL ANY 84 ) 85 execute_process( 86 COMMAND ${GENHTML_COMMAND} total_coverage.info --output-directory total.coverage 87 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} 88 COMMAND_ERROR_IS_FATAL ANY 89 )