mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-24 07:08:38 -05:00
Merge topic 'CTestCoverageCollectGCOV-compress-opts'
40ca6ef125CTestCoverageCollectGCOV: Add TARBALL_COMPRESSION option81e83510a0Tests: Fix re-running CTestCoverageCollectGCOV on in-source buildab7eda2591Tests: Remove unnecessary pass regex on CTestCoverageCollectGCOV Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !4649
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
CTestCoverageCollectGCOV-compress-opts
|
||||
--------------------------------------
|
||||
|
||||
* The :module:`CTestCoverageCollectGCOV` module
|
||||
:command:`ctest_coverage_collect_gcov` function gained a
|
||||
``TARBALL_COMPRESSION`` option to control compression of the
|
||||
tarball of collected results.
|
||||
@@ -37,6 +37,17 @@ After generating this tar file, it can be sent to CDash for display with the
|
||||
upload to CDash. Relative paths will be interpreted with respect
|
||||
to the top-level build directory.
|
||||
|
||||
``TARBALL_COMPRESSION <option>`` Specify a compression algorithm for the
|
||||
``TARBALL`` data file. Using this option reduces the size of the data file
|
||||
before it is submitted to CDash. ``<option>`` must be one of ``GZIP``,
|
||||
``BZIP2``, ``XZ``, ``ZSTD``, ``FROM_EXT``, or an expression that CMake
|
||||
evaluates as ``FALSE``. The default value is ``BZIP2``.
|
||||
|
||||
If ``FROM_EXT`` is specified, the resulting file will be compressed based on
|
||||
the file extension of the ``<tarfile>`` (i.e. ``.tar.gz`` will use ``GZIP``
|
||||
compression). File extensions that will produce compressed output include
|
||||
``.tar.gz``, ``.tgz``, ``.tar.bzip2``, ``.tbz``, ``.tar.xz``, and ``.txz``.
|
||||
|
||||
``SOURCE <source_dir>``
|
||||
Specify the top-level source directory for the build.
|
||||
Default is the value of :variable:`CTEST_SOURCE_DIRECTORY`.
|
||||
@@ -68,7 +79,7 @@ After generating this tar file, it can be sent to CDash for display with the
|
||||
|
||||
function(ctest_coverage_collect_gcov)
|
||||
set(options QUIET GLOB DELETE)
|
||||
set(oneValueArgs TARBALL SOURCE BUILD GCOV_COMMAND)
|
||||
set(oneValueArgs TARBALL SOURCE BUILD GCOV_COMMAND TARBALL_COMPRESSION)
|
||||
set(multiValueArgs GCOV_OPTIONS)
|
||||
cmake_parse_arguments(GCOV "${options}" "${oneValueArgs}"
|
||||
"${multiValueArgs}" "" ${ARGN} )
|
||||
@@ -91,6 +102,13 @@ function(ctest_coverage_collect_gcov)
|
||||
else()
|
||||
set(gcov_command "${GCOV_GCOV_COMMAND}")
|
||||
endif()
|
||||
if(NOT DEFINED GCOV_TARBALL_COMPRESSION)
|
||||
set(GCOV_TARBALL_COMPRESSION "BZIP2")
|
||||
elseif( GCOV_TARBALL_COMPRESSION AND
|
||||
NOT GCOV_TARBALL_COMPRESSION MATCHES "^(GZIP|BZIP2|XZ|ZSTD|FROM_EXT)$")
|
||||
message(FATAL_ERROR "TARBALL_COMPRESSION must be one of OFF, GZIP, "
|
||||
"BZIP2, XZ, ZSTD, or FROM_EXT for ctest_coverage_collect_gcov")
|
||||
endif()
|
||||
# run gcov on each gcda file in the binary tree
|
||||
set(gcda_files)
|
||||
set(label_files)
|
||||
@@ -270,14 +288,38 @@ ${label_files}
|
||||
${uncovered_files_for_tar}
|
||||
")
|
||||
|
||||
if (GCOV_QUIET)
|
||||
set(tar_opts "cfj")
|
||||
else()
|
||||
set(tar_opts "cvfj")
|
||||
# Prepare tar command line arguments
|
||||
|
||||
set(tar_opts "")
|
||||
# Select data compression mode
|
||||
if( GCOV_TARBALL_COMPRESSION STREQUAL "FROM_EXT")
|
||||
if( GCOV_TARBALL MATCHES [[\.(tgz|tar.gz)$]] )
|
||||
string(APPEND tar_opts "z")
|
||||
elseif( GCOV_TARBALL MATCHES [[\.(txz|tar.xz)$]] )
|
||||
string(APPEND tar_opts "J")
|
||||
elseif( GCOV_TARBALL MATCHES [[\.(tbz|tar.bz)$]] )
|
||||
string(APPEND tar_opts "j")
|
||||
endif()
|
||||
elseif(GCOV_TARBALL_COMPRESSION STREQUAL "GZIP")
|
||||
string(APPEND tar_opts "z")
|
||||
elseif(GCOV_TARBALL_COMPRESSION STREQUAL "XZ")
|
||||
string(APPEND tar_opts "J")
|
||||
elseif(GCOV_TARBALL_COMPRESSION STREQUAL "BZIP2")
|
||||
string(APPEND tar_opts "j")
|
||||
elseif(GCOV_TARBALL_COMPRESSION STREQUAL "ZSTD")
|
||||
set(zstd_tar_opt "--zstd")
|
||||
endif()
|
||||
# Verbosity options
|
||||
if(NOT GCOV_QUIET AND NOT tar_opts MATCHES v)
|
||||
string(APPEND tar_opts "v")
|
||||
endif()
|
||||
# Prepend option 'c' specifying 'create'
|
||||
string(PREPEND tar_opts "c")
|
||||
# Append option 'f' so that the next argument is the filename
|
||||
string(APPEND tar_opts "f")
|
||||
|
||||
execute_process(COMMAND
|
||||
${CMAKE_COMMAND} -E tar ${tar_opts} ${GCOV_TARBALL}
|
||||
${CMAKE_COMMAND} -E tar ${tar_opts} ${GCOV_TARBALL} ${zstd_tar_opt}
|
||||
"--mtime=1970-01-01 0:0:0 UTC"
|
||||
"--format=gnutar"
|
||||
--files-from=${coverage_dir}/coverage_file_list.txt
|
||||
|
||||
@@ -2695,9 +2695,6 @@ ${CMake_SOURCE_DIR}/Utilities/Release/push.bash --dir dev -- '${CMake_BUILD_NIGH
|
||||
-S "${CMake_BINARY_DIR}/Tests/CTestCoverageCollectGCOV/test.cmake" -VV
|
||||
--output-log "${CMake_BINARY_DIR}/Tests/CTestCoverageCollectGCOV/testOut.log"
|
||||
)
|
||||
set_tests_properties(CTestCoverageCollectGCOV PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION
|
||||
"PASSED with correct output.*Testing/CoverageInfo/main.cpp.gcov")
|
||||
set_property(TEST CTestCoverageCollectGCOV PROPERTY ENVIRONMENT CTEST_PARALLEL_LEVEL=)
|
||||
|
||||
configure_file(
|
||||
|
||||
@@ -3,13 +3,15 @@ set(CTEST_SOURCE_DIRECTORY "@CMake_SOURCE_DIR@/Tests/CTestCoverageCollectGCOV/Te
|
||||
set(CTEST_BINARY_DIRECTORY "@CMake_BINARY_DIR@/Tests/CTestCoverageCollectGCOV/TestProject")
|
||||
set(CTEST_CMAKE_GENERATOR "@CMAKE_GENERATOR@")
|
||||
|
||||
ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY})
|
||||
|
||||
ctest_start(Experimental)
|
||||
ctest_configure()
|
||||
ctest_build()
|
||||
ctest_test()
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
# Common setup for all tests.
|
||||
#------------------------------------------------------------------------------#
|
||||
|
||||
list(APPEND CTEST_CUSTOM_COVERAGE_EXCLUDE
|
||||
"/foo/something"
|
||||
"/3rdparty/"
|
||||
@@ -17,15 +19,28 @@ list(APPEND CTEST_CUSTOM_COVERAGE_EXCLUDE
|
||||
"/CMakeFiles/"
|
||||
)
|
||||
list(APPEND CTEST_EXTRA_COVERAGE_GLOB "*.cpp")
|
||||
|
||||
include(CTestCoverageCollectGCOV)
|
||||
set(tar_file ${CTEST_BINARY_DIRECTORY}/gcov.tar)
|
||||
set(expected_out
|
||||
CMakeFiles/myexecutable.dir/Labels.json
|
||||
Testing/CoverageInfo/data.json
|
||||
Testing/CoverageInfo/extra.cpp.gcov
|
||||
Testing/CoverageInfo/main.cpp.gcov
|
||||
uncovered/extra/uncovered1.cpp
|
||||
uncovered/uncovered2.cpp
|
||||
)
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
# Test 1: with standard arguments
|
||||
#------------------------------------------------------------------------------#
|
||||
|
||||
set(tar_file ${CTEST_BINARY_DIRECTORY}/gcov.tbz)
|
||||
ctest_coverage_collect_gcov(
|
||||
TARBALL "${tar_file}"
|
||||
SOURCE "${CTEST_SOURCE_DIRECTORY}"
|
||||
BUILD "${CTEST_BINARY_DIRECTORY}"
|
||||
GCOV_COMMAND "${CMAKE_COMMAND}"
|
||||
GCOV_OPTIONS -P "@CMake_SOURCE_DIR@/Tests/CTestCoverageCollectGCOV/fakegcov.cmake")
|
||||
file(REMOVE_RECURSE "${CTEST_BINARY_DIRECTORY}/uncovered")
|
||||
|
||||
execute_process(COMMAND
|
||||
${CMAKE_COMMAND} -E tar tf ${tar_file}
|
||||
@@ -37,15 +52,126 @@ execute_process(COMMAND
|
||||
string(REPLACE "\n" ";" out "${out}")
|
||||
list(SORT out)
|
||||
|
||||
set(expected_out
|
||||
CMakeFiles/myexecutable.dir/Labels.json
|
||||
Testing/CoverageInfo/data.json
|
||||
Testing/CoverageInfo/extra.cpp.gcov
|
||||
Testing/CoverageInfo/main.cpp.gcov
|
||||
uncovered/extra/uncovered1.cpp
|
||||
uncovered/uncovered2.cpp
|
||||
if("${out}" STREQUAL "${expected_out}")
|
||||
message("PASSED with correct output: ${out}")
|
||||
else()
|
||||
message(FATAL_ERROR "FAILED: expected:\n${expected_out}\nGot:\n${out}")
|
||||
endif()
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
# Test 2: with optional argument: TARBALL_COMPRESSION "GZIP"
|
||||
#------------------------------------------------------------------------------#
|
||||
|
||||
set(tar_file ${CTEST_BINARY_DIRECTORY}/gcov.tgz)
|
||||
ctest_coverage_collect_gcov(
|
||||
TARBALL "${tar_file}"
|
||||
TARBALL_COMPRESSION "GZIP"
|
||||
SOURCE "${CTEST_SOURCE_DIRECTORY}"
|
||||
BUILD "${CTEST_BINARY_DIRECTORY}"
|
||||
GCOV_COMMAND "${CMAKE_COMMAND}"
|
||||
GCOV_OPTIONS -P "@CMake_SOURCE_DIR@/Tests/CTestCoverageCollectGCOV/fakegcov.cmake")
|
||||
file(REMOVE_RECURSE "${CTEST_BINARY_DIRECTORY}/uncovered")
|
||||
|
||||
execute_process(COMMAND
|
||||
${CMAKE_COMMAND} -E tar tf ${tar_file}
|
||||
OUTPUT_VARIABLE out
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
string(REPLACE "\n" ";" out "${out}")
|
||||
list(SORT out)
|
||||
|
||||
if("${out}" STREQUAL "${expected_out}")
|
||||
message("PASSED with correct output: ${out}")
|
||||
else()
|
||||
message(FATAL_ERROR "FAILED: expected:\n${expected_out}\nGot:\n${out}")
|
||||
endif()
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
# Test 3: with optional argument: TARBALL_COMPRESSION "FROM_EXT"
|
||||
#------------------------------------------------------------------------------#
|
||||
|
||||
set(tar_file ${CTEST_BINARY_DIRECTORY}/gcov.txz)
|
||||
ctest_coverage_collect_gcov(
|
||||
TARBALL "${tar_file}"
|
||||
TARBALL_COMPRESSION "FROM_EXT"
|
||||
SOURCE "${CTEST_SOURCE_DIRECTORY}"
|
||||
BUILD "${CTEST_BINARY_DIRECTORY}"
|
||||
GCOV_COMMAND "${CMAKE_COMMAND}"
|
||||
GCOV_OPTIONS -P "@CMake_SOURCE_DIR@/Tests/CTestCoverageCollectGCOV/fakegcov.cmake")
|
||||
file(REMOVE_RECURSE "${CTEST_BINARY_DIRECTORY}/uncovered")
|
||||
|
||||
execute_process(COMMAND
|
||||
${CMAKE_COMMAND} -E tar tf ${tar_file}
|
||||
OUTPUT_VARIABLE out
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
string(REPLACE "\n" ";" out "${out}")
|
||||
list(SORT out)
|
||||
|
||||
if("${out}" STREQUAL "${expected_out}")
|
||||
message("PASSED with correct output: ${out}")
|
||||
else()
|
||||
message(FATAL_ERROR "FAILED: expected:\n${expected_out}\nGot:\n${out}")
|
||||
endif()
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
# Test 4: with optional argument: TARBALL_COMPRESSION "FALSE"
|
||||
#------------------------------------------------------------------------------#
|
||||
|
||||
set(tar_file ${CTEST_BINARY_DIRECTORY}/gcov.tar)
|
||||
ctest_coverage_collect_gcov(
|
||||
TARBALL "${tar_file}"
|
||||
TARBALL_COMPRESSION "FALSE"
|
||||
SOURCE "${CTEST_SOURCE_DIRECTORY}"
|
||||
BUILD "${CTEST_BINARY_DIRECTORY}"
|
||||
GCOV_COMMAND "${CMAKE_COMMAND}"
|
||||
GCOV_OPTIONS -P "@CMake_SOURCE_DIR@/Tests/CTestCoverageCollectGCOV/fakegcov.cmake")
|
||||
file(REMOVE_RECURSE "${CTEST_BINARY_DIRECTORY}/uncovered")
|
||||
|
||||
execute_process(COMMAND
|
||||
${CMAKE_COMMAND} -E tar tf ${tar_file}
|
||||
OUTPUT_VARIABLE out
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
string(REPLACE "\n" ";" out "${out}")
|
||||
list(SORT out)
|
||||
|
||||
if("${out}" STREQUAL "${expected_out}")
|
||||
message("PASSED with correct output: ${out}")
|
||||
else()
|
||||
message(FATAL_ERROR "FAILED: expected:\n${expected_out}\nGot:\n${out}")
|
||||
endif()
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
# Test 5: with optional argument: TARBALL_COMPRESSION "ZSTD"
|
||||
#------------------------------------------------------------------------------#
|
||||
|
||||
set(tar_file ${CTEST_BINARY_DIRECTORY}/gcov.zstd)
|
||||
ctest_coverage_collect_gcov(
|
||||
TARBALL "${tar_file}"
|
||||
TARBALL_COMPRESSION "ZSTD"
|
||||
SOURCE "${CTEST_SOURCE_DIRECTORY}"
|
||||
BUILD "${CTEST_BINARY_DIRECTORY}"
|
||||
GCOV_COMMAND "${CMAKE_COMMAND}"
|
||||
GCOV_OPTIONS -P "@CMake_SOURCE_DIR@/Tests/CTestCoverageCollectGCOV/fakegcov.cmake")
|
||||
file(REMOVE_RECURSE "${CTEST_BINARY_DIRECTORY}/uncovered")
|
||||
|
||||
execute_process(COMMAND
|
||||
${CMAKE_COMMAND} -E tar tf ${tar_file}
|
||||
OUTPUT_VARIABLE out
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
string(REPLACE "\n" ";" out "${out}")
|
||||
list(SORT out)
|
||||
|
||||
if("${out}" STREQUAL "${expected_out}")
|
||||
message("PASSED with correct output: ${out}")
|
||||
else()
|
||||
|
||||
Reference in New Issue
Block a user