Initial contribution
This commit is contained in:
parent
7b5cc4fa59
commit
11d9ce37aa
580 changed files with 155133 additions and 162 deletions
134
src/cmake/scripts/CoverageConvenience.cmake
Normal file
134
src/cmake/scripts/CoverageConvenience.cmake
Normal file
|
@ -0,0 +1,134 @@
|
|||
#
|
||||
# Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||||
#
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
# v. 1.0 which is available at
|
||||
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
#
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
#
|
||||
|
||||
#
|
||||
# This script will run all tests and generates various coverage reports.
|
||||
#
|
||||
# Example usage:
|
||||
# $ cmake -DCOVERAGE_SETTINGS=<cham bld>/CoverageSettings.cmake -P <cham src>/cmake/scripts/CoverageConvenience.cmake
|
||||
# If you start the scripts while in <cham bld> then you don't have to provide the COVERAGE_SETTINGS file.
|
||||
#
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
# Get Coverage configuration file
|
||||
if(NOT COVERAGE_SETTINGS)
|
||||
set(COVERAGE_SETTINGS ${CMAKE_CURRENT_BINARY_DIR}/CoverageSettings.cmake)
|
||||
endif()
|
||||
include(${COVERAGE_SETTINGS})
|
||||
|
||||
message(STATUS "Config file: ${COVERAGE_SETTINGS}")
|
||||
message(STATUS "Source directory: ${COVERAGE_SOURCE_DIR}")
|
||||
message(STATUS "Test directory: ${COVERAGE_RUN_DIR}")
|
||||
message(STATUS "Output directory: ${COVERAGE_OUTPUT_DIR}")
|
||||
|
||||
set(COVERAGE_SCRIPTS_DIR "${COVERAGE_SOURCE_DIR}/cmake/scripts")
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Detect generators
|
||||
#
|
||||
###############################################################################
|
||||
set(GENERATE_COVERAGE TRUE)
|
||||
if(GENERATE_COVERAGE)
|
||||
find_program(GCOV_PATH gcov PARENT_SCOPE)
|
||||
if(NOT GCOV_PATH)
|
||||
set(GENERATE_COVERAGE FALSE)
|
||||
message(STATUS "[SKIP] Coverage generators - gcov (could not find gcov)")
|
||||
endif()
|
||||
endif()
|
||||
if(GENERATE_COVERAGE)
|
||||
message(STATUS "[ OK ] Coverage generators - gcov")
|
||||
endif()
|
||||
|
||||
set(GENERATE_COVERAGE_HTML TRUE)
|
||||
if(GENERATE_COVERAGE_HTML)
|
||||
find_program(LCOV_PATH lcov PARENT_SCOPE)
|
||||
if(NOT LCOV_PATH)
|
||||
set(GENERATE_COVERAGE_HTML FALSE)
|
||||
message(STATUS "[SKIP] Coverage generators - HTML (could not find lcov)")
|
||||
endif()
|
||||
endif()
|
||||
if(GENERATE_COVERAGE_HTML)
|
||||
find_program(GENHTML_PATH genhtml PARENT_SCOPE)
|
||||
if(NOT GENHTML_PATH)
|
||||
set(GENERATE_COVERAGE_HTML FALSE)
|
||||
message(STATUS "[SKIP] Coverage generators - HTML (could not find genhtml)")
|
||||
endif()
|
||||
endif()
|
||||
if(GENERATE_COVERAGE_HTML)
|
||||
message(STATUS "[ OK ] Coverage generators - HTML (lcov and genhtml)")
|
||||
endif()
|
||||
|
||||
set(GENERATE_COVERAGE_COBERTURA TRUE)
|
||||
if(GENERATE_COVERAGE_COBERTURA)
|
||||
find_program(GCOVR_PATH gcovr PARENT_SCOPE)
|
||||
if(NOT GCOVR_PATH)
|
||||
set(GENERATE_COVERAGE_COBERTURA FALSE)
|
||||
message(STATUS "[SKIP] Coverage generators - Cobertura (could not find gcovr)")
|
||||
endif()
|
||||
endif()
|
||||
if(GENERATE_COVERAGE_COBERTURA)
|
||||
message(STATUS "[ OK ] Coverage generators - Cobertura (gcovr)")
|
||||
endif()
|
||||
|
||||
if(NOT GENERATE_COVERAGE)
|
||||
message(FATAL_ERROR "Could not find the main coverage generator 'gcov'")
|
||||
elseif(NOT GENERATE_COVERAGE_HTML AND NOT GENERATE_COVERAGE_COBERTURA)
|
||||
message(FATAL_ERROR "Could not find either of the two coverage report generators")
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Setup environment
|
||||
#
|
||||
###############################################################################
|
||||
message(STATUS "Setup environment")
|
||||
if(GENERATE_COVERAGE_HTML)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -DCOVERAGE_SETTINGS=${COVERAGE_SETTINGS} -P ${COVERAGE_SCRIPTS_DIR}/CoveragePreHtml.cmake
|
||||
WORKING_DIRECTORY ${COVERAGE_RUN_DIR})
|
||||
endif()
|
||||
if(GENERATE_COVERAGE_COBERTURA)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -DCOVERAGE_SETTINGS=${COVERAGE_SETTINGS} -P ${COVERAGE_SCRIPTS_DIR}/CoveragePreCobertura.cmake
|
||||
WORKING_DIRECTORY ${COVERAGE_RUN_DIR})
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Generate coverage results by running all the tests
|
||||
#
|
||||
###############################################################################
|
||||
message(STATUS "Run all test to get coverage")
|
||||
execute_process(COMMAND ctest ${COVERAGE_QUIET_FLAG} -T test
|
||||
WORKING_DIRECTORY ${COVERAGE_RUN_DIR})
|
||||
execute_process(COMMAND ctest ${COVERAGE_QUIET_FLAG} -T coverage
|
||||
WORKING_DIRECTORY ${COVERAGE_RUN_DIR})
|
||||
|
||||
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Generate coverage reports
|
||||
#
|
||||
###############################################################################
|
||||
if(GENERATE_COVERAGE_HTML)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -DCOVERAGE_SETTINGS=${COVERAGE_SETTINGS} -P ${COVERAGE_SCRIPTS_DIR}/CoveragePostHtml.cmake
|
||||
WORKING_DIRECTORY ${COVERAGE_RUN_DIR})
|
||||
endif()
|
||||
if(GENERATE_COVERAGE_COBERTURA)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -DCOVERAGE_SETTINGS=${COVERAGE_SETTINGS} -P ${COVERAGE_SCRIPTS_DIR}/CoveragePostCobertura.cmake
|
||||
WORKING_DIRECTORY ${COVERAGE_RUN_DIR})
|
||||
endif()
|
||||
|
52
src/cmake/scripts/CoveragePostCobertura.cmake
Normal file
52
src/cmake/scripts/CoveragePostCobertura.cmake
Normal file
|
@ -0,0 +1,52 @@
|
|||
#
|
||||
# Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||||
#
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
# v. 1.0 which is available at
|
||||
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
#
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
#
|
||||
|
||||
#
|
||||
# This script assumes that all test have been run and gcov results are available.
|
||||
# It will generate the Cobertura output from the gcov results.
|
||||
#
|
||||
# Example usage:
|
||||
# $ cmake -DCOVERAGE_SETTINGS=<cham bld>/CoverageSettings.cmake -P <cham src>/cmake/scripts/CoveragePreCobertura.cmake
|
||||
# $ ctest -T test
|
||||
# $ ctest -T coverage
|
||||
# $ ctest -DCOVERAGE_SETTINGS=<cham bld>/CoverageSettings.cmake -P <cham src>/cmake/scripts/CoveragePostCobertura.cmake
|
||||
# If you start the scripts while in <cham bld> then you don't have to provide the COVERAGE_SETTINGS file.
|
||||
#
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
# Get Coverage configuration file
|
||||
if(NOT COVERAGE_SETTINGS)
|
||||
set(COVERAGE_SETTINGS ${CMAKE_CURRENT_BINARY_DIR}/CoverageSettings.cmake)
|
||||
endif()
|
||||
include(${COVERAGE_SETTINGS})
|
||||
|
||||
# Some debug
|
||||
#message(STATUS "Config file: ${COVERAGE_SETTINGS}")
|
||||
#message(STATUS "Source directory: ${COVERAGE_SOURCE_DIR}")
|
||||
#message(STATUS "Test directory: ${COVERAGE_RUN_DIR}")
|
||||
#message(STATUS "Output directory: ${COVERAGE_OUTPUT_DIR}")
|
||||
|
||||
# Find gcovr to generate Cobertura results
|
||||
find_program(GCOVR_PATH gcovr PARENT_SCOPE)
|
||||
if(NOT GCOVR_PATH)
|
||||
message(FATAL_ERROR "Could not find gcovr to generate Cobertura coverage.")
|
||||
endif()
|
||||
|
||||
# Create location to put the result file.
|
||||
file(MAKE_DIRECTORY ${COVERAGE_OUTPUT_DIR})
|
||||
|
||||
execute_process(COMMAND ${GCOVR_PATH} -x -r ${COVERAGE_SOURCE_DIR} -e ".*/${COVERAGE_EXCLUDE_TESTS}/.*" -e ".*/${COVERAGE_EXCLUDE_EXAMPLES}/.*" -e ".*/${COVERAGE_EXCLUDE_BUILD_SUPPORT}/.*" -o ${COVERAGE_OUTPUT_DIR}/cobertura.xml
|
||||
WORKING_DIRECTORY ${COVERAGE_RUN_DIR})
|
||||
|
||||
|
||||
message(STATUS "The Cobertura report can be found here: ${COVERAGE_OUTPUT_DIR}/cobertura.xml")
|
||||
|
71
src/cmake/scripts/CoveragePostHtml.cmake
Normal file
71
src/cmake/scripts/CoveragePostHtml.cmake
Normal file
|
@ -0,0 +1,71 @@
|
|||
#
|
||||
# Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||||
#
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
# v. 1.0 which is available at
|
||||
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
#
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
#
|
||||
|
||||
#
|
||||
# This script assumes that all test have been run and gcov results are available.
|
||||
# It will generate the HTML output from the gcov results.
|
||||
#
|
||||
# Example usage:
|
||||
# $ cmake -DCOVERAGE_SETTINGS=<cham bld>/CoverageSettings.cmake -P <cham src>/cmake/scripts/CoveragePreHtml.cmake
|
||||
# $ ctest -T test
|
||||
# $ ctest -T coverage
|
||||
# $ ctest -DCOVERAGE_SETTINGS=<cham bld>/CoverageSettings.cmake -P <cham src>/cmake/scripts/CoveragePostHtml.cmake
|
||||
# If you start the scripts while in <cham bld> then you don't have to provide the COVERAGE_SETTINGS file.
|
||||
#
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
# Get Coverage configuration file
|
||||
if(NOT COVERAGE_SETTINGS)
|
||||
set(COVERAGE_SETTINGS ${CMAKE_CURRENT_BINARY_DIR}/CoverageSettings.cmake)
|
||||
endif()
|
||||
include(${COVERAGE_SETTINGS})
|
||||
|
||||
# Some debug
|
||||
#message(STATUS "Config file: ${COVERAGE_SETTINGS}")
|
||||
#message(STATUS "Source directory: ${COVERAGE_SOURCE_DIR}")
|
||||
#message(STATUS "Test directory: ${COVERAGE_RUN_DIR}")
|
||||
#message(STATUS "Output directory: ${COVERAGE_OUTPUT_DIR}")
|
||||
|
||||
# Find tools to generate HTML coverage results
|
||||
find_program(LCOV_PATH lcov PARENT_SCOPE)
|
||||
if(NOT LCOV_PATH)
|
||||
message(FATAL_ERROR "Could not find lcov to generate HTML coverage.")
|
||||
endif()
|
||||
find_program(GENHTML_PATH genhtml PARENT_SCOPE)
|
||||
if(NOT GENHTML_PATH)
|
||||
message(FATAL_ERROR "Could not find genhtml to generate HTML coverage.")
|
||||
endif()
|
||||
|
||||
# Create location to put the result file.
|
||||
file(MAKE_DIRECTORY ${COVERAGE_OUTPUT_DIR})
|
||||
set(COVERAGE_HTML_OUTPUT "${COVERAGE_OUTPUT_DIR}/html")
|
||||
file(MAKE_DIRECTORY ${COVERAGE_HTML_OUTPUT})
|
||||
|
||||
# Setup tmp analysis files
|
||||
set(COVERAGE_INFO "${COVERAGE_HTML_OUTPUT}/coverage_html.info")
|
||||
set(COVERAGE_CLEANED "${COVERAGE_INFO}.cleaned")
|
||||
|
||||
# Execute lcov and genhtml commands to get HTML results
|
||||
execute_process(COMMAND ${LCOV_PATH} ${COVERAGE_QUIET_FLAG} --directory . --capture --output-file ${COVERAGE_INFO}
|
||||
WORKING_DIRECTORY ${COVERAGE_RUN_DIR})
|
||||
execute_process(COMMAND ${LCOV_PATH} ${COVERAGE_QUIET_FLAG} --remove ${COVERAGE_INFO} "${COVERAGE_EXCLUDE_TESTS}/*" "${COVERAGE_EXCLUDE_EXAMPLES}/*" "${COVERAGE_EXCLUDE_BUILD_SUPPORT}/*" "/usr/*" --output-file ${COVERAGE_CLEANED}
|
||||
WORKING_DIRECTORY ${COVERAGE_RUN_DIR})
|
||||
execute_process(COMMAND ${GENHTML_PATH} ${COVERAGE_QUIET_FLAG} -o ${COVERAGE_HTML_OUTPUT} ${COVERAGE_CLEANED}
|
||||
WORKING_DIRECTORY ${COVERAGE_RUN_DIR})
|
||||
|
||||
# Remove tmp analysis files
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E remove ${COVERAGE_INFO} ${COVERAGE_CLEANED}
|
||||
WORKING_DIRECTORY ${COVERAGE_RUN_DIR})
|
||||
|
||||
|
||||
message(STATUS "The HTML coverage report can be found here: ${COVERAGE_HTML_OUTPUT}/index.html")
|
||||
|
30
src/cmake/scripts/CoveragePreCobertura.cmake
Normal file
30
src/cmake/scripts/CoveragePreCobertura.cmake
Normal file
|
@ -0,0 +1,30 @@
|
|||
#
|
||||
# Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||||
#
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
# v. 1.0 which is available at
|
||||
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
#
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
#
|
||||
|
||||
#
|
||||
# This script assumes that it is called before all tests are run and gcov results are available.
|
||||
# It can be used to setup the environment needed to get proper Cobertura coverage results.
|
||||
#
|
||||
# Example usage:
|
||||
# $ cmake -DCOVERAGE_SETTINGS=<cham bld>/CoverageSettings.cmake -P <cham src>/cmake/scripts/CoveragePreCobertura.cmake
|
||||
# $ ctest -T test
|
||||
# $ ctest -T coverage
|
||||
# $ ctest -DCOVERAGE_SETTINGS=<cham bld>/CoverageSettings.cmake -P <cham src>/cmake/scripts/CoveragePostCobertura.cmake
|
||||
# If you start the scripts while in <cham bld> then you don't have to provide the COVERAGE_SETTINGS file.
|
||||
#
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
#
|
||||
# Nothing to do really.
|
||||
# This is just added to provide consistency between Coverage scripts.
|
||||
#
|
||||
|
52
src/cmake/scripts/CoveragePreHtml.cmake
Normal file
52
src/cmake/scripts/CoveragePreHtml.cmake
Normal file
|
@ -0,0 +1,52 @@
|
|||
#
|
||||
# Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
|
||||
#
|
||||
# This program and the accompanying materials are made available under the
|
||||
# terms of the Eclipse Public License v. 2.0 which is available at
|
||||
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
# v. 1.0 which is available at
|
||||
# http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
#
|
||||
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
#
|
||||
|
||||
#
|
||||
# This script assumes that it is called before all tests are run and gcov results are available.
|
||||
# It can be used to setup the environment needed to get proper HTML coverage results.
|
||||
#
|
||||
# Example usage:
|
||||
# $ cmake -DCOVERAGE_SETTINGS=<cham bld>/CoverageSettings.cmake -P <cham src>/cmake/scripts/CoveragePreHtml.cmake
|
||||
# $ ctest -T test
|
||||
# $ ctest -T coverage
|
||||
# $ ctest -DCOVERAGE_SETTINGS=<cham bld>/CoverageSettings.cmake -P <cham src>/cmake/scripts/CoveragePostHtml.cmake
|
||||
# If you start the scripts while in <cham bld> then you don't have to provide the COVERAGE_SETTINGS file.
|
||||
#
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
# Get Coverage configuration file
|
||||
if(NOT COVERAGE_SETTINGS)
|
||||
set(COVERAGE_SETTINGS ${CMAKE_CURRENT_BINARY_DIR}/CoverageSettings.cmake)
|
||||
endif()
|
||||
include(${COVERAGE_SETTINGS})
|
||||
|
||||
# Some debug
|
||||
#message(STATUS "Config file: ${COVERAGE_SETTINGS}")
|
||||
#message(STATUS "Source directory: ${COVERAGE_SOURCE_DIR}")
|
||||
#message(STATUS "Test directory: ${COVERAGE_RUN_DIR}")
|
||||
#message(STATUS "Output directory: ${COVERAGE_OUTPUT_DIR}")
|
||||
|
||||
# Find tools to generate HTML coverage results
|
||||
find_program(LCOV_PATH lcov PARENT_SCOPE)
|
||||
if(NOT LCOV_PATH)
|
||||
message(FATAL_ERROR "Could not find lcov to generate HTML coverage.")
|
||||
endif()
|
||||
find_program(GENHTML_PATH genhtml PARENT_SCOPE)
|
||||
if(NOT GENHTML_PATH)
|
||||
message(FATAL_ERROR "Could not find genhtml to generate HTML coverage.")
|
||||
endif()
|
||||
|
||||
# Reset LCOV environment
|
||||
execute_process(COMMAND ${LCOV_PATH} ${COVERAGE_QUIET_FLAG} --directory . --zerocounters
|
||||
WORKING_DIRECTORY ${COVERAGE_RUN_DIR})
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue