summaryrefslogtreecommitdiff
path: root/mesonbuild/scripts
diff options
context:
space:
mode:
authorNigel Kukard <nkukard@lbsd.net>2023-10-09 00:00:39 +0000
committerEli Schwartz <eschwartz93@gmail.com>2023-10-08 23:13:06 -0400
commit2c4a1b6324b1c069f713f089d22d1a0ea70cf222 (patch)
treeba962f5abe92d6aebe2b0aee214898cbdc729fce /mesonbuild/scripts
parent583d2815d1a130227f0f4db47e4ab2e80ebb6a61 (diff)
downloadmeson-2c4a1b6324b1c069f713f089d22d1a0ea70cf222.tar.gz
Add support for lcov 2.0
lcov 2.0 deprecates `--rc lcov_branch_coverage=1` for `--rc branch_coverage=1` and gives an error when an exclude is used on a non existing directory. I added a version check for lcov and removed the subprojects directory from the exclusion list if it does not exist. Fixes #11995
Diffstat (limited to 'mesonbuild/scripts')
-rw-r--r--mesonbuild/scripts/coverage.py20
1 files changed, 14 insertions, 6 deletions
diff --git a/mesonbuild/scripts/coverage.py b/mesonbuild/scripts/coverage.py
index cb865d08d..4c0f81e8a 100644
--- a/mesonbuild/scripts/coverage.py
+++ b/mesonbuild/scripts/coverage.py
@@ -22,7 +22,7 @@ def coverage(outputs: T.List[str], source_root: str, subproject_root: str, build
outfiles = []
exitcode = 0
- (gcovr_exe, gcovr_version, lcov_exe, genhtml_exe, llvm_cov_exe) = environment.find_coverage_tools()
+ (gcovr_exe, gcovr_version, lcov_exe, lcov_version, genhtml_exe, llvm_cov_exe) = environment.find_coverage_tools()
# load config files for tools if available in the source tree
# - lcov requires manually specifying a per-project config
@@ -35,6 +35,11 @@ def coverage(outputs: T.List[str], source_root: str, subproject_root: str, build
else:
lcov_config = []
+ if lcov_exe and mesonlib.version_compare(lcov_version, '>=2.0'):
+ lcov_exe_rc_branch_coverage = ['--rc', 'branch_coverage=1']
+ else:
+ lcov_exe_rc_branch_coverage = ['--rc', 'lcov_branch_coverage=1']
+
gcovr_config = ['-e', re.escape(subproject_root)]
# gcovr >= 4.2 requires a different syntax for out of source builds
@@ -90,6 +95,9 @@ def coverage(outputs: T.List[str], source_root: str, subproject_root: str, build
initial_tracefile = covinfo + '.initial'
run_tracefile = covinfo + '.run'
raw_tracefile = covinfo + '.raw'
+ lcov_subpoject_exclude = []
+ if os.path.exists(subproject_root):
+ lcov_subpoject_exclude.append(os.path.join(subproject_root, '*'))
if use_llvm_cov:
# Create a shim to allow using llvm-cov as a gcov tool.
if mesonlib.is_windows():
@@ -117,26 +125,26 @@ def coverage(outputs: T.List[str], source_root: str, subproject_root: str, build
'--capture',
'--output-file', run_tracefile,
'--no-checksum',
- '--rc', 'lcov_branch_coverage=1'] +
+ *lcov_exe_rc_branch_coverage] +
lcov_config +
gcov_tool_args)
# Join initial and test results.
subprocess.check_call([lcov_exe,
'-a', initial_tracefile,
'-a', run_tracefile,
- '--rc', 'lcov_branch_coverage=1',
+ *lcov_exe_rc_branch_coverage,
'-o', raw_tracefile] + lcov_config)
# Remove all directories outside the source_root from the covinfo
subprocess.check_call([lcov_exe,
'--extract', raw_tracefile,
os.path.join(source_root, '*'),
- '--rc', 'lcov_branch_coverage=1',
+ *lcov_exe_rc_branch_coverage,
'--output-file', covinfo] + lcov_config)
# Remove all directories inside subproject dir
subprocess.check_call([lcov_exe,
'--remove', covinfo,
- os.path.join(subproject_root, '*'),
- '--rc', 'lcov_branch_coverage=1',
+ *lcov_subpoject_exclude,
+ *lcov_exe_rc_branch_coverage,
'--output-file', covinfo] + lcov_config)
subprocess.check_call([genhtml_exe,
'--prefix', build_root,