This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMake".
The branch, next has been updated via 4f815423d17a2df096b48166ca407c8191d9ddd1 (commit) via 8ea1b0df58a65092a8c82cb5491f6d0af08ba8e7 (commit) via 425d76468564b6b4d2593c8775f5ce6d763f052d (commit) from 5e90e55e77afae770fd0149302c4bb7f3b2b7eab (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=4f815423d17a2df096b48166ca407c8191d9ddd1 commit 4f815423d17a2df096b48166ca407c8191d9ddd1 Merge: 5e90e55 8ea1b0d Author: Brad King <brad.k...@kitware.com> AuthorDate: Thu Apr 7 08:54:41 2016 -0400 Commit: CMake Topic Stage <kwro...@kitware.com> CommitDate: Thu Apr 7 08:54:41 2016 -0400 Merge topic 'branch_coverage_glob' into next 8ea1b0df CTestCoverageCollectGCOV: Improve documentation 425d7646 CTestCoverageCollectGCOV: Honor CTEST_EXTRA_COVERAGE_GLOB https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8ea1b0df58a65092a8c82cb5491f6d0af08ba8e7 commit 8ea1b0df58a65092a8c82cb5491f6d0af08ba8e7 Author: Zack Galbreath <zack.galbre...@kitware.com> AuthorDate: Thu Mar 31 14:17:03 2016 -0400 Commit: Brad King <brad.k...@kitware.com> CommitDate: Thu Apr 7 08:53:30 2016 -0400 CTestCoverageCollectGCOV: Improve documentation Clean up prose and mention support for CTEST_EXTRA_COVERAGE_GLOB. diff --git a/Modules/CTestCoverageCollectGCOV.cmake b/Modules/CTestCoverageCollectGCOV.cmake index 3b74631..7df9666 100644 --- a/Modules/CTestCoverageCollectGCOV.cmake +++ b/Modules/CTestCoverageCollectGCOV.cmake @@ -2,14 +2,19 @@ # CTestCoverageCollectGCOV # ------------------------ # -# This module provides the function ``ctest_coverage_collect_gcov``. -# The function will run gcov on the .gcda files in a binary tree and then -# package all of the .gcov files into a tar file with a data.json that -# contains the source and build directories for CDash to use in parsing -# the coverage data. In addtion the Labels.json files for targets that -# have coverage information are also put in the tar file for CDash to -# asign the correct labels. This file can be sent to a CDash server for -# display with the +# This module provides the ``ctest_coverage_collect_gcov`` function. +# +# This function runs gcov on all .gcda files found in the binary tree +# and packages the resulting .gcov files into a tar file. +# This tarball also contains the following: +# +# * *data.json* defines the source and build directories for use by CDash. +# * *Labels.json* indicates any :prop_sf:`LABELS` that have been set on the +# source files. +# * The *uncovered* directory holds any uncovered files found by +# :variable:`CTEST_EXTRA_COVERAGE_GLOB`. +# +# After generating this tar file, it can be sent to CDash for display with the # :command:`ctest_submit(CDASH_UPLOAD)` command. # # .. command:: cdash_coverage_collect_gcov https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=425d76468564b6b4d2593c8775f5ce6d763f052d commit 425d76468564b6b4d2593c8775f5ce6d763f052d Author: Zack Galbreath <zack.galbre...@kitware.com> AuthorDate: Wed Mar 30 10:31:25 2016 -0400 Commit: Brad King <brad.k...@kitware.com> CommitDate: Thu Apr 7 08:53:30 2016 -0400 CTestCoverageCollectGCOV: Honor CTEST_EXTRA_COVERAGE_GLOB Teach CTestCoverageCollectGCOV to honor the CTEST_EXTRA_COVERAGE_GLOB variable. When this variable is set, this module will glob for matching source files that were not covered and include them in the resulting tar file. diff --git a/Modules/CTestCoverageCollectGCOV.cmake b/Modules/CTestCoverageCollectGCOV.cmake index f31e432..3b74631 100644 --- a/Modules/CTestCoverageCollectGCOV.cmake +++ b/Modules/CTestCoverageCollectGCOV.cmake @@ -172,6 +172,21 @@ function(ctest_coverage_collect_gcov) set(unfiltered_gcov_files) file(GLOB_RECURSE unfiltered_gcov_files RELATIVE ${binary_dir} "${coverage_dir}/*.gcov") + # if CTEST_EXTRA_COVERAGE_GLOB was specified we search for files + # that might be uncovered + if (DEFINED CTEST_EXTRA_COVERAGE_GLOB) + set(uncovered_files) + foreach(search_entry IN LISTS CTEST_EXTRA_COVERAGE_GLOB) + if(NOT GCOV_QUIET) + message("Add coverage glob: ${search_entry}") + endif() + file(GLOB_RECURSE matching_files "${source_dir}/${search_entry}") + if (matching_files) + list(APPEND uncovered_files "${matching_files}") + endif() + endforeach() + endif() + set(gcov_files) foreach(gcov_file ${unfiltered_gcov_files}) file(STRINGS ${binary_dir}/${gcov_file} first_line LIMIT_COUNT 1 ENCODING UTF-8) @@ -195,20 +210,62 @@ function(ctest_coverage_collect_gcov) endif() endforeach() + get_filename_component(resolved_source_file "${source_file}" ABSOLUTE) + foreach(uncovered_file IN LISTS uncovered_files) + get_filename_component(resolved_uncovered_file "${uncovered_file}" ABSOLUTE) + if (resolved_uncovered_file STREQUAL resolved_source_file) + list(REMOVE_ITEM uncovered_files "${uncovered_file}") + endif() + endforeach() + if(NOT is_excluded) list(APPEND gcov_files ${gcov_file}) endif() endforeach() + foreach (uncovered_file ${uncovered_files}) + # Check if this uncovered file should be excluded. + set(is_excluded false) + foreach(exclude_entry IN LISTS CTEST_CUSTOM_COVERAGE_EXCLUDE) + if(uncovered_file MATCHES "${exclude_entry}") + set(is_excluded true) + if(NOT GCOV_QUIET) + message("Excluding coverage for: ${uncovered_file} which matches ${exclude_entry}") + endif() + break() + endif() + endforeach() + if(is_excluded) + continue() + endif() + + # Copy from source to binary dir, preserving any intermediate subdirectories. + get_filename_component(filename "${uncovered_file}" NAME) + get_filename_component(relative_path "${uncovered_file}" DIRECTORY) + string(REPLACE "${source_dir}" "" relative_path "${relative_path}") + if (relative_path) + # Strip leading slash. + string(SUBSTRING "${relative_path}" 1 -1 relative_path) + endif() + file(COPY ${uncovered_file} DESTINATION ${binary_dir}/uncovered/${relative_path}) + if(relative_path) + list(APPEND uncovered_files_for_tar uncovered/${relative_path}/${filename}) + else() + list(APPEND uncovered_files_for_tar uncovered/${filename}) + endif() + endforeach() + # tar up the coverage info with the same date so that the md5 # sum will be the same for the tar file independent of file time # stamps string(REPLACE ";" "\n" gcov_files "${gcov_files}") string(REPLACE ";" "\n" label_files "${label_files}") + string(REPLACE ";" "\n" uncovered_files_for_tar "${uncovered_files_for_tar}") file(WRITE "${coverage_dir}/coverage_file_list.txt" "${gcov_files} ${coverage_dir}/data.json ${label_files} +${uncovered_files_for_tar} ") if (GCOV_QUIET) diff --git a/Tests/CTestCoverageCollectGCOV/TestProject/extra/uncovered1.cpp b/Tests/CTestCoverageCollectGCOV/TestProject/extra/uncovered1.cpp new file mode 100644 index 0000000..e69de29 diff --git a/Tests/CTestCoverageCollectGCOV/TestProject/uncovered2.cpp b/Tests/CTestCoverageCollectGCOV/TestProject/uncovered2.cpp new file mode 100644 index 0000000..e69de29 diff --git a/Tests/CTestCoverageCollectGCOV/test.cmake.in b/Tests/CTestCoverageCollectGCOV/test.cmake.in index b2e6d6d..d48ef61 100644 --- a/Tests/CTestCoverageCollectGCOV/test.cmake.in +++ b/Tests/CTestCoverageCollectGCOV/test.cmake.in @@ -15,7 +15,9 @@ list(APPEND CTEST_CUSTOM_COVERAGE_EXCLUDE "/foo/something" "/3rdparty/" "/bar/somethingelse" + "/CMakeFiles/" ) +list(APPEND CTEST_EXTRA_COVERAGE_GLOB "*.cpp") include(CTestCoverageCollectGCOV) set(tar_file ${CTEST_BINARY_DIRECTORY}/gcov.tar) @@ -41,6 +43,8 @@ set(expected_out 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}") ----------------------------------------------------------------------- Summary of changes: hooks/post-receive -- CMake _______________________________________________ Cmake-commits mailing list Cmake-commits@cmake.org http://public.kitware.com/mailman/listinfo/cmake-commits