mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-01-31 21:50:24 +00:00
python3-gcovr: Fix parsing of gcc-11 gcov metadata
gcc-11 has metadata line "-: 0:Source is newer than graph" which throws an error. Backported from gcovr 5.2, as kirkstone release uses gcc-11. Signed-off-by: Jasper Orschulko <jasper@fancydomain.eu> Signed-off-by: Armin Kuster <akuster808@gmail.com>
This commit is contained in:
committed by
Armin Kuster
parent
41873c082d
commit
4da92ed9be
@@ -0,0 +1,84 @@
|
||||
From c4f53f28c4c537b75b5912a44083c41262807504 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20F=C3=B6rderer?= <michael.foerderer@gmx.de>
|
||||
Date: Sun, 3 Apr 2022 22:58:33 +0200
|
||||
Subject: [PATCH] Fix parsing of gcov metadata (#601)
|
||||
|
||||
gcc-11 has metadata line "-: 0:Source is newer than graph" which throws an error.
|
||||
|
||||
Upstream-Status: Backport [https://github.com/gcovr/gcovr/commit/7b6947bd4b6fd28a477606313fff3c13fcea8d3d]
|
||||
|
||||
Signed-off-by: Jasper Orschulko <jasper@fancydomain.eu>
|
||||
---
|
||||
gcovr/gcov.py | 5 ++++-
|
||||
gcovr/gcov_parser.py | 24 ++++++++++++++++++++----
|
||||
2 files changed, 24 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/gcovr/gcov.py b/gcovr/gcov.py
|
||||
index cc7a9af4..ff4cdb0b 100644
|
||||
--- a/gcovr/gcov.py
|
||||
+++ b/gcovr/gcov.py
|
||||
@@ -98,8 +98,11 @@ def process_gcov_data(data_fname, covdata, source_fname, options, currdir=None):
|
||||
# Find the source file
|
||||
# TODO: instead of heuristics, use "working directory" if available
|
||||
metadata = parse_metadata(lines)
|
||||
+ source = metadata.get("Source")
|
||||
+ if source is None:
|
||||
+ raise RuntimeError("Unexpected value 'None' for metadata 'Source'.")
|
||||
fname = guess_source_file_name(
|
||||
- metadata["Source"].strip(),
|
||||
+ source,
|
||||
data_fname,
|
||||
source_fname,
|
||||
root_dir=options.root_dir,
|
||||
diff --git a/gcovr/gcov_parser.py b/gcovr/gcov_parser.py
|
||||
index 391ecd78..523ea406 100644
|
||||
--- a/gcovr/gcov_parser.py
|
||||
+++ b/gcovr/gcov_parser.py
|
||||
@@ -121,7 +121,7 @@ class _MetadataLine(NamedTuple):
|
||||
"""A gcov line with metadata: ``-: 0:KEY:VALUE``"""
|
||||
|
||||
key: str
|
||||
- value: str
|
||||
+ value: Optional[str]
|
||||
|
||||
|
||||
class _BlockLine(NamedTuple):
|
||||
@@ -214,7 +214,19 @@ def parse_metadata(lines: List[str]) -> Dict[str, str]:
|
||||
... -: 0:Foo:bar
|
||||
... -: 0:Key:123
|
||||
... '''.splitlines())
|
||||
- {'Foo': 'bar', 'Key': '123'}
|
||||
+ Traceback (most recent call last):
|
||||
+ ...
|
||||
+ RuntimeError: Missing key 'Source' in metadata. GCOV data was >>
|
||||
+ -: 0:Foo:bar
|
||||
+ -: 0:Key:123<< End of GCOV data
|
||||
+ >>> parse_metadata('-: 0:Source: file \n -: 0:Foo: bar \n -: 0:Key: 123 '.splitlines())
|
||||
+ {'Source': 'file', 'Foo': 'bar', 'Key': '123'}
|
||||
+ >>> parse_metadata('''
|
||||
+ ... -: 0:Source:file
|
||||
+ ... -: 0:Foo:bar
|
||||
+ ... -: 0:Key
|
||||
+ ... '''.splitlines())
|
||||
+ {'Source': 'file', 'Foo': 'bar', 'Key': None}
|
||||
"""
|
||||
collected = {}
|
||||
for line in lines:
|
||||
@@ -721,8 +733,12 @@ def _parse_line(line: str) -> _Line:
|
||||
|
||||
# METADATA (key, value)
|
||||
if count_str == "-" and lineno == "0":
|
||||
- key, value = source_code.split(":", 1)
|
||||
- return _MetadataLine(key, value)
|
||||
+ if ":" in source_code:
|
||||
+ key, value = source_code.split(":", 1)
|
||||
+ return _MetadataLine(key, value.strip())
|
||||
+ else:
|
||||
+ # Add a syntethic metadata with no value
|
||||
+ return _MetadataLine(source_code, None)
|
||||
|
||||
if count_str == "-":
|
||||
count = 0
|
||||
--
|
||||
2.41.0
|
||||
|
||||
@@ -5,6 +5,7 @@ LICENSE = "BSD-3-Clause"
|
||||
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=08208c66520e8d69d5367483186d94ed"
|
||||
|
||||
SRC_URI = "git://github.com/gcovr/gcovr.git;branch=master;protocol=https"
|
||||
SRC_URI += "file://0001-Fix-parsing-of-gcov-metadata-601.patch"
|
||||
SRCREV = "e71e883521b78122c49016eb4e510e6da06c6916"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
Reference in New Issue
Block a user