From da017702613d718ac69ae213ee91358566f7b622 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Tue, 27 Feb 2018 21:41:48 +0100 Subject: Fix coverage-xml and coverage-text targets for gcovr >= 3.1 In gcovr 3.1 the -r/--rootdir argument changed meaning causing reports generated with gcovr 3.1 to not find the source files and look for *.gcda in the whole source tree rather than the build dir. So, detect gcovr version and if 3.1 give build_root to -r instead of source_root. --- mesonbuild/scripts/coverage.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'mesonbuild/scripts/coverage.py') diff --git a/mesonbuild/scripts/coverage.py b/mesonbuild/scripts/coverage.py index 47f4cda..4746134 100644 --- a/mesonbuild/scripts/coverage.py +++ b/mesonbuild/scripts/coverage.py @@ -17,15 +17,20 @@ from mesonbuild import environment import sys, os, subprocess, pathlib def coverage(source_root, build_root, log_dir): - (gcovr_exe, lcov_exe, genhtml_exe) = environment.find_coverage_tools() + (gcovr_exe, gcovr_3_1, lcov_exe, genhtml_exe) = environment.find_coverage_tools() if gcovr_exe: + # gcovr >= 3.1 interprets rootdir differently + if gcovr_3_1: + rootdir = build_root + else: + rootdir = source_root subprocess.check_call([gcovr_exe, '-x', - '-r', source_root, + '-r', rootdir, '-o', os.path.join(log_dir, 'coverage.xml'), ]) subprocess.check_call([gcovr_exe, - '-r', source_root, + '-r', rootdir, '-o', os.path.join(log_dir, 'coverage.txt'), ]) if lcov_exe and genhtml_exe: -- cgit v1.1 From 6266089866469c2a2d298b79df74d2aad86bbeea Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Tue, 27 Feb 2018 21:46:08 +0100 Subject: Allow gcovr >= 3.1 to be used to generate html coverage report Modern gcovr includes html generation support so if lcov and genhtml are not available fallback to gcovr. Kept lcov and genhtml as default so to not surprise existing users of coverage-html with the different output of gcovr. gcovr added html support in 3.0 but as there already is a test for 3.1 because of the changes to -r/--rootdir I opted to only allow html generation for >= 3.1 to keep things simple. --- mesonbuild/scripts/coverage.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'mesonbuild/scripts/coverage.py') diff --git a/mesonbuild/scripts/coverage.py b/mesonbuild/scripts/coverage.py index 4746134..564286a 100644 --- a/mesonbuild/scripts/coverage.py +++ b/mesonbuild/scripts/coverage.py @@ -70,13 +70,21 @@ def coverage(source_root, build_root, log_dir): '--show-details', '--branch-coverage', covinfo]) + elif gcovr_exe and gcovr_3_1: + htmloutdir = os.path.join(log_dir, 'coveragereport') + subprocess.check_call([gcovr_exe, + '--html', + '--html-details', + '-r', build_root, + '-o', os.path.join(htmloutdir, 'index.html'), + ]) if gcovr_exe: print('') print('XML coverage report can be found at', pathlib.Path(log_dir, 'coverage.xml').as_uri()) print('Text coverage report can be found at', pathlib.Path(log_dir, 'coverage.txt').as_uri()) - if lcov_exe and genhtml_exe: + if (lcov_exe and genhtml_exe) or (gcovr_exe and gcovr_3_1): print('Html coverage report can be found at', pathlib.Path(htmloutdir, 'index.html').as_uri()) return 0 -- cgit v1.1 From ed8197207ec31f8e084c0646a520df32302f13c5 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Mon, 12 Mar 2018 22:18:26 +0100 Subject: fixup! Fix coverage-xml and coverage-text targets for gcovr >= 3.1 Rename gcovr_3_1 to gcovr_new_rootdir --- mesonbuild/scripts/coverage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mesonbuild/scripts/coverage.py') diff --git a/mesonbuild/scripts/coverage.py b/mesonbuild/scripts/coverage.py index 564286a..4b4b7fb 100644 --- a/mesonbuild/scripts/coverage.py +++ b/mesonbuild/scripts/coverage.py @@ -17,10 +17,10 @@ from mesonbuild import environment import sys, os, subprocess, pathlib def coverage(source_root, build_root, log_dir): - (gcovr_exe, gcovr_3_1, lcov_exe, genhtml_exe) = environment.find_coverage_tools() + (gcovr_exe, gcovr_new_rootdir, lcov_exe, genhtml_exe) = environment.find_coverage_tools() if gcovr_exe: # gcovr >= 3.1 interprets rootdir differently - if gcovr_3_1: + if gcovr_new_rootdir: rootdir = build_root else: rootdir = source_root -- cgit v1.1 From 4e1b229b37dcdf18cff11da377e47b1911a77868 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Mon, 12 Mar 2018 22:19:53 +0100 Subject: fixup! Allow gcovr >= 3.1 to be used to generate html coverage report Rename gcovr_3_1 to gcovr_new_rootdir --- mesonbuild/scripts/coverage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mesonbuild/scripts/coverage.py') diff --git a/mesonbuild/scripts/coverage.py b/mesonbuild/scripts/coverage.py index 4b4b7fb..2d1f8c3 100644 --- a/mesonbuild/scripts/coverage.py +++ b/mesonbuild/scripts/coverage.py @@ -70,7 +70,7 @@ def coverage(source_root, build_root, log_dir): '--show-details', '--branch-coverage', covinfo]) - elif gcovr_exe and gcovr_3_1: + elif gcovr_exe and gcovr_new_rootdir: htmloutdir = os.path.join(log_dir, 'coveragereport') subprocess.check_call([gcovr_exe, '--html', @@ -84,7 +84,7 @@ def coverage(source_root, build_root, log_dir): pathlib.Path(log_dir, 'coverage.xml').as_uri()) print('Text coverage report can be found at', pathlib.Path(log_dir, 'coverage.txt').as_uri()) - if (lcov_exe and genhtml_exe) or (gcovr_exe and gcovr_3_1): + if (lcov_exe and genhtml_exe) or (gcovr_exe and gcovr_new_rootdir): print('Html coverage report can be found at', pathlib.Path(htmloutdir, 'index.html').as_uri()) return 0 -- cgit v1.1