diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2017-05-10 19:57:47 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2017-05-13 23:30:54 +0300 |
commit | 95f8cb93b3d0ce99ff99146517625e0d79e848ad (patch) | |
tree | 7130c6be3a51ec76fd63b5ed0117e10e9d345aab /mesonbuild/scripts/coverage.py | |
parent | 111e3df45dddd5b4ae98ad957f8183980c90a503 (diff) | |
download | meson-95f8cb93b3d0ce99ff99146517625e0d79e848ad.zip meson-95f8cb93b3d0ce99ff99146517625e0d79e848ad.tar.gz meson-95f8cb93b3d0ce99ff99146517625e0d79e848ad.tar.bz2 |
Strip system directories and show coverage for files not executed at all. Closes #1721.
Diffstat (limited to 'mesonbuild/scripts/coverage.py')
-rw-r--r-- | mesonbuild/scripts/coverage.py | 56 |
1 files changed, 37 insertions, 19 deletions
diff --git a/mesonbuild/scripts/coverage.py b/mesonbuild/scripts/coverage.py index 59e475a..441ec0c 100644 --- a/mesonbuild/scripts/coverage.py +++ b/mesonbuild/scripts/coverage.py @@ -14,7 +14,12 @@ from mesonbuild import environment -import sys, os, subprocess, re +import sys, os, subprocess + +def remove_dir_from_trace(lcov_command, covfile, dirname): + tmpfile = covfile + '.tmp' + subprocess.check_call([lcov_command, '--remove', covfile, dirname, '-o', tmpfile]) + os.replace(tmpfile, covfile) def coverage(source_root, build_root, log_dir): (gcovr_exe, lcov_exe, genhtml_exe) = environment.find_coverage_tools() @@ -31,23 +36,36 @@ def coverage(source_root, build_root, log_dir): if lcov_exe and genhtml_exe: htmloutdir = os.path.join(log_dir, 'coveragereport') covinfo = os.path.join(log_dir, 'coverage.info') - lcov_command = [lcov_exe, - '--directory', build_root, - '--capture', - '--output-file', covinfo, - '--no-checksum', - '--rc', 'lcov_branch_coverage=1', - ] - genhtml_command = [genhtml_exe, - '--prefix', build_root, - '--output-directory', htmloutdir, - '--title', 'Code coverage', - '--legend', - '--show-details', - '--branch-coverage', - covinfo] - subprocess.check_call(lcov_command) - subprocess.check_call(genhtml_command) + initial_tracefile = covinfo + '.initial' + run_tracefile = covinfo + '.run' + subprocess.check_call([lcov_exe, + '--directory', build_root, + '--capture', + '--initial', + '--output-file', + initial_tracefile]) + subprocess.check_call([lcov_exe, + '--directory', build_root, + '--capture', + '--output-file', run_tracefile, + '--no-checksum', + '--rc', 'lcov_branch_coverage=1', + ]) + # Join initial and test results. + subprocess.check_call([lcov_exe, + '-a', initial_tracefile, + '-a', run_tracefile, + '-o', covinfo]) + remove_dir_from_trace(lcov_exe, covinfo, '/usr/include/*') + remove_dir_from_trace(lcov_exe, covinfo, '/usr/local/include/*') + subprocess.check_call([genhtml_exe, + '--prefix', build_root, + '--output-directory', htmloutdir, + '--title', 'Code coverage', + '--legend', + '--show-details', + '--branch-coverage', + covinfo]) return 0 def run(args): @@ -58,4 +76,4 @@ def run(args): return coverage(source_root, build_root, log_dir) if __name__ == '__main__': - sys.exit(run(sys.argv[1:]))
\ No newline at end of file + sys.exit(run(sys.argv[1:])) |