summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnel Husakovic <anel@mariadb.org>2021-07-27 16:09:30 +0200
committerSergei Golubchik <serg@mariadb.org>2022-12-02 16:19:13 +0100
commit43173ef2614030afbf0d393a93932e7e8bab1d3e (patch)
treec3e723f938a9a173560608b3f449239c13ad4d1b
parent1547e55489813ff7dc3d75a1d7feb0d532f02acf (diff)
downloadmariadb-git-43173ef2614030afbf0d393a93932e7e8bab1d3e.tar.gz
MDEV-26102 dgcov: add support for *.gcda.gcov.json.gz files of gcov 9.1+
- Script covers situation for gcov (gcc) < 9 with non-json format of generated files as well as for gcov (gcc) >=8 with json generated format Reviewed by: serg@mariadb.com
-rwxr-xr-xmysql-test/dgcov.pl54
1 files changed, 36 insertions, 18 deletions
diff --git a/mysql-test/dgcov.pl b/mysql-test/dgcov.pl
index 2c00c64d1ff..7ef0a918a96 100755
--- a/mysql-test/dgcov.pl
+++ b/mysql-test/dgcov.pl
@@ -62,13 +62,16 @@ my $res;
my $cmd;
if ($opt_purge)
{
- $cmd= "find . -name '*.da' -o -name '*.gcda' -o -name '*.gcov' -o ".
+ $cmd= "find . -name '*.da' -o -name '*.gcda*' -o -name '*.gcov' -o ".
"-name '*.dgcov' | grep -v 'README\.gcov' | xargs rm -f ''";
logv "Running: $cmd";
system($cmd)==0 or die "system($cmd): $? $!";
exit 0;
}
+my $gcc_version= `gcc -dumpversion`;
+$gcc_version=~ s/(\d).*$/$1/;
+
find(\&gcov_one_file, $root);
find(\&write_coverage, $root) if $opt_generate;
exit 0 if $opt_only_gcov;
@@ -162,26 +165,41 @@ sub gcov_one_file {
}
# now, read the generated file
- for my $gcov_file (<$_*.gcov>) {
- open FH, '<', "$gcov_file" or die "open(<$gcov_file): $!";
- my $fname;
- while (<FH>) {
- chomp;
- if (/^function:/) {
- next;
- }
- if (/^file:/) {
- $fname=realpath(-f $' ? $' : $root.$');
- next;
+ if ($gcc_version <9){
+ for my $gcov_file (<$_*.gcov>) {
+ open FH, '<', "$gcov_file" or die "open(<$gcov_file): $!";
+ my $fname;
+ while (<FH>) {
+ chomp;
+ if (/^function:/) {
+ next;
+ }
+ if (/^file:/) {
+ $fname=realpath(-f $' ? $' : $root.$');
+ next;
+ }
+ next if /^lcount:\d+,-\d+/; # whatever that means
+ unless (/^lcount:(\d+),(\d+)/ and $fname) {
+ warn "unknown line '$_' in $gcov_file";
+ next;
+ }
+ $cov{$fname}->{$1}+=$2;
}
- next if /^lcount:\d+,-\d+/; # whatever that means
- unless (/^lcount:(\d+),(\d+)/ and $fname) {
- warn "unknown line '$_' in $gcov_file";
- next;
+ close(FH);
+ }
+ } else {
+ use IO::Uncompress::Gunzip qw(gunzip $GunzipError);
+ use JSON::PP;
+ my $gcov_file_json;
+ my $fname;
+ gunzip "$_.gcov.json.gz" => \$gcov_file_json or die "gunzip($_.gcov.json.gz): $GunzipError";
+ my $obj= decode_json $gcov_file_json;
+ for my $file (@{$obj->{files}}) {
+ $fname= $file->{file};
+ for my $line (@{$file->{lines}}){
+ $cov{$fname}->{$line->{line_number}}+= $line->{count};
}
- $cov{$fname}->{$1}+=$2;
}
- close(FH);
}
}