aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/scripts/coverage.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-05-10 19:57:47 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2017-05-13 23:30:54 +0300
commit95f8cb93b3d0ce99ff99146517625e0d79e848ad (patch)
tree7130c6be3a51ec76fd63b5ed0117e10e9d345aab /mesonbuild/scripts/coverage.py
parent111e3df45dddd5b4ae98ad957f8183980c90a503 (diff)
downloadmeson-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.py56
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:]))