# Copyright (c) 2024-present The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or https://opensource.org/license/mit/. if("@CMAKE_CXX_COMPILER_ID@" STREQUAL "Clang") find_program(LLVM_COV_EXECUTABLE llvm-cov REQUIRED) set(COV_TOOL "${LLVM_COV_EXECUTABLE} gcov") else() find_program(GCOV_EXECUTABLE gcov REQUIRED) set(COV_TOOL "${GCOV_EXECUTABLE}") endif() # COV_TOOL is used to replace a placeholder. configure_file( cmake/cov_tool_wrapper.sh.in ${CMAKE_CURRENT_LIST_DIR}/cov_tool_wrapper.sh FILE_PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ @ONLY ) find_program(LCOV_EXECUTABLE lcov REQUIRED) separate_arguments(LCOV_OPTS) set(LCOV_COMMAND ${LCOV_EXECUTABLE} --gcov-tool ${CMAKE_CURRENT_LIST_DIR}/cov_tool_wrapper.sh ${LCOV_OPTS}) find_program(GENHTML_EXECUTABLE genhtml REQUIRED) set(GENHTML_COMMAND ${GENHTML_EXECUTABLE} --show-details ${LCOV_OPTS}) find_program(GREP_EXECUTABLE grep REQUIRED) find_program(AWK_EXECUTABLE awk REQUIRED) set(LCOV_FILTER_COMMAND ./filter-lcov.py) list(APPEND LCOV_FILTER_COMMAND -p "/usr/local/") list(APPEND LCOV_FILTER_COMMAND -p "/usr/include/") list(APPEND LCOV_FILTER_COMMAND -p "/usr/lib/") list(APPEND LCOV_FILTER_COMMAND -p "/usr/lib64/") list(APPEND LCOV_FILTER_COMMAND -p "src/leveldb/") list(APPEND LCOV_FILTER_COMMAND -p "src/crc32c/") list(APPEND LCOV_FILTER_COMMAND -p "src/bench/") list(APPEND LCOV_FILTER_COMMAND -p "src/crypto/ctaes") list(APPEND LCOV_FILTER_COMMAND -p "src/minisketch") list(APPEND LCOV_FILTER_COMMAND -p "src/secp256k1") list(APPEND LCOV_FILTER_COMMAND -p "depends") execute_process( COMMAND ${LCOV_COMMAND} --capture --initial --directory src --output-file baseline.info WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} ) execute_process( COMMAND ${LCOV_FILTER_COMMAND} baseline.info baseline_filtered.info WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} ) execute_process( COMMAND ${LCOV_COMMAND} --add-tracefile baseline_filtered.info --output-file baseline_filtered.info WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} )