Hello community,

here is the log from the commit of package lcov for openSUSE:Factory checked in 
at 2020-08-13 10:18:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/lcov (Old)
 and      /work/SRC/openSUSE:Factory/.lcov.new.3399 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "lcov"

Thu Aug 13 10:18:25 2020 rev:26 rq:826083 version:1.15+git.20200812.d100e6c

Changes:
--------
--- /work/SRC/openSUSE:Factory/lcov/lcov.changes        2020-08-04 
20:22:50.917004931 +0200
+++ /work/SRC/openSUSE:Factory/.lcov.new.3399/lcov.changes      2020-08-13 
10:24:35.142901620 +0200
@@ -1,0 +2,19 @@
+Wed Aug 12 17:15:51 UTC 2020 - mli...@suse.cz
+
+- Update to version 1.15+git.20200812.d100e6c:
+  * lcov: Finalize release 1.15
+  * Makefile: Reduce unnecessary meta-data in tar and RPM files
+  * geninfo: Add workaround for MSYS GCC problem
+  * geninfo: Change json module
+  * geninfo: Fix warning due to non-numerical branch count
+  * geninfo: Fix missing check for unterminated exclusion marker
+  * Exclusion of exception branches
+  * genhtml: Fix applying prefix to a prefix filename
+  * genhtml: Add more demangler options
+  * tests: Minor improvements
+  * tests: Minor test improvements
+  * man: Add clarification regarding file patterns
+  * geninfo: Change gzip decompression module
+  * Fixed processing GCOV intermediate format.
+
+-------------------------------------------------------------------

Old:
----
  lcov-1.15+git.20200723.b668fab.tar.xz

New:
----
  lcov-1.15+git.20200812.d100e6c.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ lcov.spec ++++++
--- /var/tmp/diff_new_pack.I57Xfv/_old  2020-08-13 10:24:38.430901531 +0200
+++ /var/tmp/diff_new_pack.I57Xfv/_new  2020-08-13 10:24:38.434901531 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           lcov
-Version:        1.15+git.20200723.b668fab
+Version:        1.15+git.20200812.d100e6c
 Release:        0
 Summary:        A Graphical GCOV Front-end
 License:        GPL-2.0-or-later

++++++ _service ++++++
--- /var/tmp/diff_new_pack.I57Xfv/_old  2020-08-13 10:24:38.474901530 +0200
+++ /var/tmp/diff_new_pack.I57Xfv/_new  2020-08-13 10:24:38.474901530 +0200
@@ -5,7 +5,7 @@
     <param name="changesgenerate">enable</param>
     <param name="filename">lcov</param>
     <param name="versionformat">1.15+git.%cd.%h</param>
-    <param name="revision">b668fab257931356bfb21ec9c89944143b5855e6</param>
+    <param name="revision">d100e6cdd4c67cbe5322fa26b2ee8aa34ea7ebcf</param>
   </service>
   <service mode="disabled" name="recompress">
     <param name="file">*.tar</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.I57Xfv/_old  2020-08-13 10:24:38.494901529 +0200
+++ /var/tmp/diff_new_pack.I57Xfv/_new  2020-08-13 10:24:38.498901530 +0200
@@ -1,6 +1,6 @@
 <servicedata>
   <service name="tar_scm">
     <param name="url">git://github.com/linux-test-project/lcov</param>
-    <param 
name="changesrevision">b668fab257931356bfb21ec9c89944143b5855e6</param>
+    <param 
name="changesrevision">d100e6cdd4c67cbe5322fa26b2ee8aa34ea7ebcf</param>
   </service>
 </servicedata>
\ No newline at end of file

++++++ lcov-1.15+git.20200723.b668fab.tar.xz -> 
lcov-1.15+git.20200812.d100e6c.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/Makefile 
new/lcov-1.15+git.20200812.d100e6c/Makefile
--- old/lcov-1.15+git.20200723.b668fab/Makefile 2020-07-23 12:56:54.000000000 
+0200
+++ new/lcov-1.15+git.20200812.d100e6c/Makefile 2020-08-12 16:17:04.000000000 
+0200
@@ -95,7 +95,8 @@
        bin/updateversion.pl $(TMP_DIR)/lcov-$(VERSION) $(VERSION) $(RELEASE) 
$(FULL)
        bin/get_changes.sh > $(TMP_DIR)/lcov-$(VERSION)/CHANGES
        cd $(TMP_DIR) ; \
-       tar cfz $(TMP_DIR)/lcov-$(VERSION).tar.gz lcov-$(VERSION)
+       tar cfz $(TMP_DIR)/lcov-$(VERSION).tar.gz lcov-$(VERSION) \
+           --owner root --group root
        mv $(TMP_DIR)/lcov-$(VERSION).tar.gz .
        rm -rf $(TMP_DIR)
 
@@ -112,7 +113,8 @@
        cd $(TMP_DIR)/BUILD ; \
        tar xfz $(TMP_DIR)/SOURCES/lcov-$(VERSION).tar.gz \
                lcov-$(VERSION)/rpm/lcov.spec
-       rpmbuild --define '_topdir $(TMP_DIR)' \
+       rpmbuild --define '_topdir $(TMP_DIR)' --define '_buildhost localhost' \
+                --undefine vendor --undefine packager \
                 -ba $(TMP_DIR)/BUILD/lcov-$(VERSION)/rpm/lcov.spec
        mv $(TMP_DIR)/RPMS/noarch/lcov-$(VERSION)-$(RELEASE).noarch.rpm .
        mv $(TMP_DIR)/SRPMS/lcov-$(VERSION)-$(RELEASE).src.rpm .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/README 
new/lcov-1.15+git.20200812.d100e6c/README
--- old/lcov-1.15+git.20200723.b668fab/README   2020-07-23 12:56:54.000000000 
+0200
+++ new/lcov-1.15+git.20200812.d100e6c/README   2020-08-12 16:17:04.000000000 
+0200
@@ -1,6 +1,6 @@
 -------------------------------------------------
 - README file for the LTP GCOV extension (LCOV) -
-- Last changes: 2016-12-19                      -
+- Last changes: 2019-02-28                      -
 -------------------------------------------------
 
 Description
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/bin/genhtml 
new/lcov-1.15+git.20200812.d100e6c/bin/genhtml
--- old/lcov-1.15+git.20200723.b668fab/bin/genhtml      2020-07-23 
12:56:54.000000000 +0200
+++ new/lcov-1.15+git.20200812.d100e6c/bin/genhtml      2020-08-12 
16:17:04.000000000 +0200
@@ -287,6 +287,8 @@
 our $html_ext = "html";        # Extension for generated HTML files
 our $html_gzip = 0;    # Compress with gzip
 our $demangle_cpp = 0; # Demangle C++ function names
+our $demangle_cpp_tool = "c++filt"; # Default demangler for C++ function names
+our $demangle_cpp_params = ""; # Extra parameters for demangling
 our @opt_ignore_errors;        # Ignore certain error classes during processing
 our @ignore;
 our $opt_config_file;  # User-specified configuration file location
@@ -379,6 +381,8 @@
                "genhtml_charset"               => \$charset,
                "genhtml_desc_html"             => \$rc_desc_html,
                "genhtml_demangle_cpp"          => \$demangle_cpp,
+               "genhtml_demangle_cpp_tool"     => \$demangle_cpp_tool,
+               "genhtml_demangle_cpp_params"   => \$demangle_cpp_params,
                "genhtml_missed"                => \$opt_missed,
                "lcov_function_coverage"        => \$lcov_func_coverage,
                "lcov_branch_coverage"          => \$lcov_branch_coverage,
@@ -547,8 +551,8 @@
 # Ensure that the c++filt tool is available when using --demangle-cpp
 if ($demangle_cpp)
 {
-       if (system_no_output(3, "c++filt", "--version")) {
-               die("ERROR: could not find c++filt tool needed for ".
+       if (system_no_output(3, $demangle_cpp_tool, "--version")) {
+               die("ERROR: could not find $demangle_cpp_tool tool needed for ".
                    "--demangle-cpp\n");
        }
 }
@@ -5246,7 +5250,7 @@
        my $tmpfile;
        my $handle;
        my %demangle;
-       my $demangle_arg = "";
+       my $demangle_arg = $demangle_cpp_params;
        my %versions;
 
        # Write function names to file
@@ -5257,12 +5261,12 @@
 
        # Extra flag necessary on OS X so that symbols listed by gcov get 
demangled
        # properly.
-       if ($^O eq "darwin") {
+       if ($demangle_arg eq "" && $^O eq "darwin") {
                $demangle_arg = "--no-strip-underscores";
        }
 
        # Build translation hash from c++filt output
-       open($handle, "-|", "c++filt $demangle_arg < $tmpfile") or
+       open($handle, "-|", "$demangle_cpp_tool $demangle_arg < $tmpfile") or
                die("ERROR: could not run c++filt: $!\n");
        foreach my $func (@$list) {
                my $translated = <$handle>;
@@ -5660,6 +5664,10 @@
        {
                foreach my $prefix (@dir_prefix)
                {
+                       if ($prefix eq $filename)
+                       {
+                               return "root";
+                       }
                        if ($prefix ne "" && $filename =~ /^\Q$prefix\E\/(.*)$/)
                        {
                                return substr($filename, length($prefix) + 1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/bin/geninfo 
new/lcov-1.15+git.20200812.d100e6c/bin/geninfo
--- old/lcov-1.15+git.20200723.b668fab/bin/geninfo      2020-07-23 
12:56:54.000000000 +0200
+++ new/lcov-1.15+git.20200812.d100e6c/bin/geninfo      2020-08-12 
16:17:04.000000000 +0200
@@ -59,8 +59,8 @@
 use Getopt::Long;
 use Digest::MD5 qw(md5_base64);
 use Cwd qw/abs_path/;
-use PerlIO::gzip;
-use JSON qw(decode_json);
+use IO::Uncompress::Gunzip qw(gunzip $GunzipError);
+use JSON::PP qw(decode_json);
 
 if( $^O eq "msys" )
 {
@@ -96,10 +96,14 @@
 our $EXCL_START = "LCOV_EXCL_START";
 our $EXCL_STOP = "LCOV_EXCL_STOP";
 
-# Marker to exclude branch coverage but keep function and line coveage
+# Marker to exclude branch coverage but keep function and line coverage
 our $EXCL_BR_START = "LCOV_EXCL_BR_START";
 our $EXCL_BR_STOP = "LCOV_EXCL_BR_STOP";
 
+# Marker to exclude exception branch coverage but keep function, line coverage 
and non-exception branch coverage
+our $EXCL_EXCEPTION_BR_START = "LCOV_EXCL_EXCEPTION_BR_START";
+our $EXCL_EXCEPTION_BR_STOP = "LCOV_EXCL_EXCEPTION_BR_STOP";
+
 # Compatibility mode values
 our $COMPAT_VALUE_OFF  = 0;
 our $COMPAT_VALUE_ON   = 1;
@@ -268,11 +272,13 @@
 our $gcno_split_crc;
 our $func_coverage = 1;
 our $br_coverage = 0;
+our $no_exception_br = 0;
 our $rc_auto_base = 1;
 our $rc_intermediate = "auto";
 our $intermediate;
 our $excl_line = "LCOV_EXCL_LINE";
 our $excl_br_line = "LCOV_EXCL_BR_LINE";
+our $excl_exception_br_line = "LCOV_EXCL_EXCEPTION_BR_LINE";
 
 our $cwd = `pwd`;
 chomp($cwd);
@@ -339,10 +345,12 @@
                "geninfo_adjust_src_path"       => \$rc_adjust_src_path,
                "geninfo_auto_base"             => \$rc_auto_base,
                "geninfo_intermediate"          => \$rc_intermediate,
+               "geninfo_no_exception_branch"   => \$no_exception_br,
                "lcov_function_coverage"        => \$func_coverage,
                "lcov_branch_coverage"          => \$br_coverage,
                "lcov_excl_line"                => \$excl_line,
                "lcov_excl_br_line"             => \$excl_br_line,
+               "lcov_excl_exception_br_line"           => 
\$excl_exception_br_line,
        });
 
        # Merge options
@@ -372,7 +380,7 @@
                        $adjust_src_replace = $replace;
                }
        }
-       for my $regexp (($excl_line, $excl_br_line)) {
+       for my $regexp (($excl_line, $excl_br_line, $excl_exception_br_line)) {
                eval 'qr/'.$regexp.'/';
                my $error = $@;
                chomp($error);
@@ -476,8 +484,9 @@
 } elsif ($rc_intermediate eq "1") {
        $intermediate = 1;
 } elsif (lc($rc_intermediate) eq "auto") {
-       # Use intermediate format if supported by gcov
-       $intermediate = ($gcov_caps->{'intermediate-format'} ||
+       # Use intermediate format if supported by gcov and not conflicting with
+       # exception branch exclusion
+       $intermediate = (($gcov_caps->{'intermediate-format'} && 
!$no_exception_br) ||
                         $gcov_caps->{'json-format'}) ? 1 : 0;
 } else {
        die("ERROR: invalid value for geninfo_intermediate: ".
@@ -491,6 +500,15 @@
                     "intermediate format - ignoring\n");
                $opt_derive_func_data = 0;
        }
+       if ($no_exception_br && !$gcov_caps->{'json-format'}) {
+               die("ERROR: excluding exception branches is not compatible with 
".
+                   "text intermediate format\n");
+       }
+}
+
+if ($no_exception_br && ($gcov_version < $GCOV_VERSION_3_3_0)) {
+       die("ERROR: excluding exception branches is not compatible with ".
+           "gcov versions older than 3.3\n");
 }
 
 # Determine gcov options
@@ -1843,7 +1861,9 @@
        my $exclude_flag = 0;
        my $exclude_line = 0;
        my $exclude_br_flag = 0;
+       my $exclude_exception_br_flag = 0;
        my $exclude_branch = 0;
+       my $exclude_exception_branch = 0;
        my $last_block = $UNNAMED_BLOCK;
        my $last_line = 0;
        local *INPUT;
@@ -1913,6 +1933,13 @@
                                                $exclude_branch = 0;
                                        }
                                }
+                               # Check for exclusion markers (exception branch 
exclude)
+                               if (!$no_markers && 
+                                       
/($EXCL_EXCEPTION_BR_STOP|$EXCL_EXCEPTION_BR_START|$excl_exception_br_line)/) {
+                                       warn("WARNING: $1 found at 
$filename:$last_line but ".
+                                       "branch exceptions exclusion is not 
supported with ".
+                                       "gcov versions older than 3.3\n");
+                               }
                                # Source code execution data
                                if (/^\t\t(.*)$/)
                                {
@@ -1955,10 +1982,12 @@
                                # branches
                                $last_line = $2;
                                $last_block = $3;
-                       } elsif (/^branch\s+(\d+)\s+taken\s+(\d+)/) {
+                       } elsif 
(/^branch\s+(\d+)\s+taken\s+(\d+)(?:\s+\(([^)]*)\))?/) {
                                next if (!$br_coverage);
                                next if ($exclude_line);
                                next if ($exclude_branch);
+                               next if (($exclude_exception_branch || 
$no_exception_br) && 
+                                                defined($3) && ($3 eq 
"throw"));
                                $branches = br_gvec_push($branches, $last_line,
                                                $last_block, $1, $2);
                        } elsif (/^branch\s+(\d+)\s+never\s+executed/) {
@@ -2015,6 +2044,19 @@
                                                $exclude_branch = 0;
                                        }
                                }
+                               # Check for exclusion markers (exception branch 
exclude)
+                               if (!$no_markers) {
+                                       if (/$EXCL_EXCEPTION_BR_STOP/) {
+                                               $exclude_exception_br_flag = 0;
+                                       } elsif (/$EXCL_EXCEPTION_BR_START/) {
+                                               $exclude_exception_br_flag = 1;
+                                       }
+                                       if (/$excl_exception_br_line/ || 
$exclude_exception_br_flag) {
+                                               $exclude_exception_branch = 1;
+                                       } else {
+                                               $exclude_exception_branch = 0;
+                                       }
+                               }
 
                                # Strip unexecuted basic block marker
                                $count =~ s/\*$//;
@@ -2051,7 +2093,7 @@
        }
 
        close(INPUT);
-       if ($exclude_flag || $exclude_br_flag) {
+       if ($exclude_flag || $exclude_br_flag || $exclude_exception_br_flag) {
                warn("WARNING: unterminated exclusion section in $filename\n");
        }
        return(\@result, $branches, \@functions);
@@ -2103,15 +2145,11 @@
 sub read_intermediate_json($$$)
 {
        my ($gcov_filename, $data, $basedir_ref) = @_;
-       my $fd;
        my $text;
        my $json;
 
-       open($fd, "<:gzip", $gcov_filename) or
-               die("ERROR: Could not read $gcov_filename: $!\n");
-       local $/;
-       $text = <$fd>;
-       close($fd);
+       gunzip($gcov_filename, \$text) or
+               die("ERROR: Could not read $gcov_filename: $GunzipError\n");
 
        $json = decode_json($text);
        if (!defined($json) || !exists($json->{"files"}) ||
@@ -2122,6 +2160,12 @@
 
        $$basedir_ref = $json->{"current_working_directory"};
 
+       # Workaround for bug in MSYS GCC 9.x that encodes \ as \n in gcov JSON
+       # output
+       if ($^O eq "msys" && $$basedir_ref =~ /\n/) {
+               $$basedir_ref =~ s#\n#/#g;
+       }
+
        for my $file (@{$json->{"files"}}) {
                my $filename = $file->{"file"};
 
@@ -2141,6 +2185,7 @@
 # srcdata:   filename -> [ excl, brexcl, checksums ]
 # excl:      lineno -> 1 for all lines for which to exclude all data
 # brexcl:    lineno -> 1 for all lines for which to exclude branch data
+#                      2 for all lines for which to exclude exception branch 
data
 # checksums: lineno -> source code checksum
 #
 # Note: To simplify processing, gcov data is not combined here, that is counts
@@ -2159,6 +2204,12 @@
        print($fd "TN:$test_name\n");
        for my $filename (keys(%{$data})) {
                my ($excl, $brexcl, $checksums);
+               my $lines_found = 0;
+               my $lines_hit = 0;
+               my $functions_found = 0;
+               my $functions_hit = 0;
+               my $branches_found = 0;
+               my $branches_hit = 0;
 
                if (defined($srcdata->{$filename})) {
                        ($excl, $brexcl, $checksums) = @{$srcdata->{$filename}};
@@ -2185,12 +2236,18 @@
                                #    instances
                                # b) an instance starts with an lcount line
                                $branch_num = 0;
+
+                               $lines_found++;
+                               $lines_hit++ if ($2 > 0);
                        } elsif ($line =~ /^function:(\d+),(\d+),([^,]+)$/) {
                                next if (!$func_coverage || $excl->{$1});
 
                                # function:<line>,<count>,<name>
                                print($fd "FN:$1,$3\n");
                                print($fd "FNDA:$2,$3\n");
+
+                               $functions_found++;
+                               $functions_hit++ if ($2 > 0);
                        } elsif ($line =~ /^function:(\d+),\d+,(\d+),([^,]+)$/) 
{
                                next if (!$func_coverage || $excl->{$1});
 
@@ -2198,9 +2255,12 @@
                                #          <name>
                                print($fd "FN:$1,$3\n");
                                print($fd "FNDA:$2,$3\n");
+
+                               $functions_found++;
+                               $functions_hit++ if ($2 > 0);
                        } elsif ($line =~ 
/^branch:(\d+),(taken|nottaken|notexec)/) {
                                next if (!$br_coverage || $excl->{$1} ||
-                                        $brexcl->{$1});
+                                        (defined($brexcl->{$1}) && 
($brexcl->{$1} == 1)));
 
                                # branch:<line>,taken|nottaken|notexec
                                if ($2 eq "taken") {
@@ -2212,8 +2272,22 @@
                                }
                                print($fd "BRDA:$1,0,$branch_num,$c\n");
                                $branch_num++;
+
+                               $branches_found++;
+                               $branches_hit++ if ($2 eq "taken");
                        }
                }
+               
+               if ($functions_found > 0) {
+                       printf($fd "FNF:%s\n", $functions_found);
+                       printf($fd "FNH:%s\n", $functions_hit);
+               }
+               if ($branches_found > 0) {
+                       printf($fd "BRF:%s\n", $branches_found);
+                       printf($fd "BRH:%s\n", $branches_hit);
+               }
+               printf($fd "LF:%s\n", $lines_found);
+               printf($fd "LH:%s\n", $lines_hit);
                print($fd "end_of_record\n");
        }
 }
@@ -2230,6 +2304,7 @@
 # srcdata:   filename -> [ excl, brexcl, checksums ]
 # excl:      lineno -> 1 for all lines for which to exclude all data
 # brexcl:    lineno -> 1 for all lines for which to exclude branch data
+#                      2 for all lines for which to exclude exception branch 
data
 # checksums: lineno -> source code checksum
 #
 # Note: To simplify processing, gcov data is not combined here, that is counts
@@ -2248,6 +2323,12 @@
        for my $filename (keys(%{$data})) {
                my ($excl, $brexcl, $checksums);
                my $file_data = $data->{$filename};
+               my $lines_found = 0;
+               my $lines_hit = 0;
+               my $functions_found = 0;
+               my $functions_hit = 0;
+               my $branches_found = 0;
+               my $branches_hit = 0;
 
                if (defined($srcdata->{$filename})) {
                        ($excl, $brexcl, $checksums) = @{$srcdata->{$filename}};
@@ -2267,9 +2348,17 @@
 
                                print($fd "FN:$line,$name\n");
                                print($fd "FNDA:$count,$name\n");
+
+                               $functions_found++;
+                               $functions_hit++ if ($count > 0);
                        }
                }
 
+               if ($functions_found > 0) {
+                       printf($fd "FNF:%s\n", $functions_found);
+                       printf($fd "FNH:%s\n", $functions_hit);
+               }
+
                # Line data
                for my $d (@{$file_data->{"lines"}}) {
                        my $line = $d->{"line_number"};
@@ -2294,24 +2383,39 @@
                        }
                        print($fd "DA:$line,$count$c\n");
 
+                       $lines_found++;
+                       $lines_hit++ if ($count > 0);
+
                        $branch_num = 0;
                        # Branch data
-                       if ($br_coverage && !$brexcl->{$line}) {
+                       if ($br_coverage && (!defined($brexcl->{$line}) || 
+                                       ($brexcl->{$line} != 1))) {
                                for my $b (@$branches) {
                                        my $brcount = $b->{"count"};
+                                       my $is_exception = $b->{"throw"};
 
-                                       if (!defined($brcount) || $unexec) {
-                                               $brcount = "-";
+                                       if (!$is_exception || 
((!defined($brexcl->{$line}) || 
+                                                       ($brexcl->{$line} != 
2)) && !$no_exception_br)) {
+                                               if (!defined($brcount) || 
$unexec) {
+                                                       $brcount = "-";
+                                               }
+                                               print($fd 
"BRDA:$line,0,$branch_num,".
+                                                     "$brcount\n");
                                        }
-                                       print($fd "BRDA:$line,0,$branch_num,".
-                                             "$brcount\n");
 
+                                       $branches_found++;
+                                       $branches_hit++ if ($brcount ne "-" && 
$brcount > 0);
                                        $branch_num++;
                                }
                        }
-
                }
 
+               if ($branches_found > 0) {
+                       printf($fd "BRF:%s\n", $branches_found);
+                       printf($fd "BRH:%s\n", $branches_hit);
+               }
+               printf($fd "LF:%s\n", $lines_found);
+               printf($fd "LH:%s\n", $lines_hit);
                print($fd "end_of_record\n");
        }
 }
@@ -2795,6 +2899,7 @@
        my $flag = 0;
        my %brdata;
        my $brflag = 0;
+       my $exceptionbrflag = 0;
        my %checksums;
        local *HANDLE;
 
@@ -2816,17 +2921,30 @@
                } elsif (/$EXCL_BR_START/) {
                        $brflag = 1;
                }
+               if (/$EXCL_EXCEPTION_BR_STOP/) {
+                       $exceptionbrflag = 0;
+               } elsif (/$EXCL_EXCEPTION_BR_START/) {
+                       $exceptionbrflag = 1;
+               }
                if (/$excl_br_line/ || $brflag) {
                        $brdata{$.} = 1;
+               } elsif (/$excl_exception_br_line/ || $exceptionbrflag) {
+                       $brdata{$.} = 2;
                }
                if ($checksum) {
                        chomp();
                        $checksums{$.} = md5_base64($_);
                }
+               if ($intermediate && !$gcov_caps->{'json-format'} &&
+                               
/($EXCL_EXCEPTION_BR_STOP|$EXCL_EXCEPTION_BR_START|$excl_exception_br_line)/) {
+                       warn("WARNING: $1 found at $filename:$. but branch 
exceptions ".
+                               "exclusion is not supported when using text 
intermediate ".
+                               "format\n");
+               }
        }
        close(HANDLE);
 
-       if ($flag || $brflag) {
+       if ($flag || $brflag || $exceptionbrflag) {
                warn("WARNING: unterminated exclusion section in $filename\n");
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/lcovrc 
new/lcov-1.15+git.20200812.d100e6c/lcovrc
--- old/lcov-1.15+git.20200723.b668fab/lcovrc   2020-07-23 12:56:54.000000000 
+0200
+++ new/lcov-1.15+git.20200812.d100e6c/lcovrc   2020-08-12 16:17:04.000000000 
+0200
@@ -102,6 +102,12 @@
 # Demangle C++ symbols
 #genhtml_demangle_cpp=1
 
+# Name of the tool used for demangling C++ function names
+#genhtml_demangle_cpp_tool = c++filt
+
+# Specify extra parameters to be passed to the demangling tool
+#genhtml_demangle_cpp_params = ""
+
 # Location of the gcov tool (same as --gcov-info option of geninfo)
 #geninfo_gcov_tool = gcov
 
@@ -137,6 +143,9 @@
 # Use gcov intermediate format? Valid values are 0, 1, auto
 geninfo_intermediate = auto
 
+# Specify if exception branches should be excluded from branch coverage.
+geninfo_no_exception_branch = 0
+
 # Directory containing gcov kernel files
 # lcov_gcov_dir = /proc/gcov
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/man/gendesc.1 
new/lcov-1.15+git.20200812.d100e6c/man/gendesc.1
--- old/lcov-1.15+git.20200723.b668fab/man/gendesc.1    2020-07-23 
12:56:54.000000000 +0200
+++ new/lcov-1.15+git.20200812.d100e6c/man/gendesc.1    2020-08-12 
16:17:04.000000000 +0200
@@ -1,4 +1,4 @@
-.TH gendesc 1 "LCOV 1.14" 2016\-12\-19 "User Manuals"
+.TH gendesc 1 "LCOV 1.15" 2019\-02\-28 "User Manuals"
 .SH NAME
 gendesc \- Generate a test case description file
 .SH SYNOPSIS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/man/genhtml.1 
new/lcov-1.15+git.20200812.d100e6c/man/genhtml.1
--- old/lcov-1.15+git.20200723.b668fab/man/genhtml.1    2020-07-23 
12:56:54.000000000 +0200
+++ new/lcov-1.15+git.20200812.d100e6c/man/genhtml.1    2020-08-12 
16:17:04.000000000 +0200
@@ -1,4 +1,4 @@
-.TH genhtml 1 "LCOV 1.14" 2018\-01\-30 "User Manuals"
+.TH genhtml 1 "LCOV 1.15" 2019\-03\-04 "User Manuals"
 .SH NAME
 genhtml \- Generate HTML view from LCOV coverage data files
 .SH SYNOPSIS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/man/geninfo.1 
new/lcov-1.15+git.20200812.d100e6c/man/geninfo.1
--- old/lcov-1.15+git.20200723.b668fab/man/geninfo.1    2020-07-23 
12:56:54.000000000 +0200
+++ new/lcov-1.15+git.20200812.d100e6c/man/geninfo.1    2020-08-12 
16:17:04.000000000 +0200
@@ -1,4 +1,4 @@
-.TH geninfo 1 "LCOV 1.14" 2017\-10\-10 "User Manuals"
+.TH geninfo 1 "LCOV 1.15" 2020\-08\-07 "User Manuals"
 .SH NAME
 geninfo \- Generate tracefiles from .da files
 .SH SYNOPSIS
@@ -123,6 +123,25 @@
 line not part of this section.
 .RE
 .br
+LCOV_EXCL_EXCEPTION_BR_LINE
+.RS
+Lines containing this marker will be excluded from exception branch coverage:
+Exception branches will be ignored, but non-exception branches will not be
+affected.
+.br
+.RE
+LCOV_EXCL_EXCEPTION_BR_START
+.RS
+Marks the beginning of a section which is excluded from exception branch 
+coverage. The current line is part of this section.
+.br
+.RE
+LCOV_EXCL_EXCEPTION_BR_STOP
+.RS
+Marks the end of a section which is excluded from exception branch coverage. 
+The current line not part of this section.
+.RE
+.br
 
 .SH OPTIONS
 
@@ -307,6 +326,10 @@
 will be interpreted as shell wildcard patterns (note that they may need to be
 escaped accordingly to prevent the shell from expanding them first).
 
+Note: The pattern must be specified to match the
+.B absolute
+path of each source file.
+
 Can be combined with the
 .B --include
 command line switch. If a given file matches both the include pattern and the
@@ -366,6 +389,10 @@
 .I patterns
 will be interpreted as shell wildcard patterns (note that they may need to be
 escaped accordingly to prevent the shell from expanding them first).
+
+Note: The pattern must be specified to match the
+.B absolute
+path of each source file.
 .RE
 
 .B \-\-ignore\-errors
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/man/genpng.1 
new/lcov-1.15+git.20200812.d100e6c/man/genpng.1
--- old/lcov-1.15+git.20200723.b668fab/man/genpng.1     2020-07-23 
12:56:54.000000000 +0200
+++ new/lcov-1.15+git.20200812.d100e6c/man/genpng.1     2020-08-12 
16:17:04.000000000 +0200
@@ -1,4 +1,4 @@
-.TH genpng 1 "LCOV 1.14" 2016\-12\-19 "User Manuals"
+.TH genpng 1 "LCOV 1.15" 2019\-02\-28 "User Manuals"
 .SH NAME
 genpng \- Generate an overview image from a source file
 .SH SYNOPSIS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/man/lcov.1 
new/lcov-1.15+git.20200812.d100e6c/man/lcov.1
--- old/lcov-1.15+git.20200723.b668fab/man/lcov.1       2020-07-23 
12:56:54.000000000 +0200
+++ new/lcov-1.15+git.20200812.d100e6c/man/lcov.1       2020-08-12 
16:17:04.000000000 +0200
@@ -1,4 +1,4 @@
-.TH lcov 1 "LCOV 1.14" 2017\-10\-10 "User Manuals"
+.TH lcov 1 "LCOV 1.15" 2020\-07\-31 "User Manuals"
 .SH NAME
 lcov \- a graphical GCOV front\-end
 .SH SYNOPSIS
@@ -497,6 +497,10 @@
 will be interpreted as shell wildcard patterns (note that they may need to be
 escaped accordingly to prevent the shell from expanding them first).
 
+Note: The pattern must be specified to match the
+.B absolute
+path of each source file.
+
 Can be combined with the
 .B --include
 command line switch. If a given file matches both the include pattern and the
@@ -540,6 +544,10 @@
 .I tracefile
 which matches at least one of those patterns will be extracted.
 
+Note: The pattern must be specified to match the
+.B absolute
+path of each source file.
+
 The result of the extract operation will be written to stdout or the tracefile
 specified with \-o.
 
@@ -598,6 +606,10 @@
 .I patterns
 will be interpreted as shell wildcard patterns (note that they may need to be
 escaped accordingly to prevent the shell from expanding them first).
+
+Note: The pattern must be specified to match the
+.B absolute
+path of each source file.
 .RE
 
 .B \-\-ignore\-errors
@@ -799,6 +811,10 @@
 .I tracefile
 which matches at least one of those patterns will be removed.
 
+Note: The pattern must be specified to match the
+.B absolute
+path of each source file.
+
 The result of the remove operation will be written to stdout or the tracefile
 specified with \-o.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/man/lcovrc.5 
new/lcov-1.15+git.20200812.d100e6c/man/lcovrc.5
--- old/lcov-1.15+git.20200723.b668fab/man/lcovrc.5     2020-07-23 
12:56:54.000000000 +0200
+++ new/lcov-1.15+git.20200812.d100e6c/man/lcovrc.5     2020-08-12 
16:17:04.000000000 +0200
@@ -1,4 +1,4 @@
-.TH lcovrc 5 "LCOV 1.14" 2018\-01\-30 "User Manuals"
+.TH lcovrc 5 "LCOV 1.15" 2020\-08\-07 "User Manuals"
 
 .SH NAME
 lcovrc \- lcov configuration file
@@ -169,6 +169,16 @@
 #genhtml_demangle_cpp=1
 .br
 
+# Name of the tool used for demangling C++ function names
+.br
+#genhtml_demangle_cpp_tool = c++filt
+.br
+
+# Specify extra parameters to be passed to the demangling tool
+.br
+#genhtml_demangle_cpp_params = ""
+.br
+
 # Location of the gcov tool
 .br
 #geninfo_gcov_tool = gcov
@@ -591,6 +601,32 @@
 Default is 0.
 .PP
 
+.BR genhtml_demangle_cpp_tool " ="
+.I path_to_c++filt
+.IP
+Specify the location of the demangle tool (see
+.BR c++filt (1))
+used to convert C++ internal function names to human readable format
+for display on the HTML function overview page.
+.br
+
+Default is 'c++filt'.
+.PP
+
+.BR genhtml_demangle_cpp_params " ="
+.I parameters
+.IP
+Specify extra parameters to be passed to the demangling tool
+
+Use this option if your environment requires additional parameters such
+as --no-strip-underscore for correctly demangling C++ internal function
+names. See also
+.BR c++filt (1)).
+.br
+
+Default is "".
+.PP
+
 .BR genhtml_desc_html " ="
 .IR 0 | 1
 .IP
@@ -813,6 +849,15 @@
 Default is "auto".
 .PP
 
+.BR geninfo_no_exception_branch " ="
+.IR 0 | 1
+.IP
+Specify whether to exclude exception branches from branch coverage.
+.br
+
+Default is 0.
+.PP
+
 .BR lcov_gcov_dir " ="
 .I path_to_kernel_coverage_data
 .IP
@@ -917,6 +962,15 @@
 Default is 'LCOV_EXCL_BR_LINE'.
 .PP
 
+.BR lcov_excl_exception_br_line " ="
+.I expression
+.IP
+Specify the regular expression of lines to exclude from exception branch 
coverage.
+.br
+
+Default is 'LCOV_EXCL_EXCEPTION_BR_LINE'.
+.PP
+
 .SH FILES
 
 .TP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/rpm/lcov.spec 
new/lcov-1.15+git.20200812.d100e6c/rpm/lcov.spec
--- old/lcov-1.15+git.20200723.b668fab/rpm/lcov.spec    2020-07-23 
12:56:54.000000000 +0200
+++ new/lcov-1.15+git.20200812.d100e6c/rpm/lcov.spec    2020-08-12 
16:17:04.000000000 +0200
@@ -1,6 +1,6 @@
 Summary: A graphical GCOV front-end
 Name: lcov
-Version: 1.14
+Version: 1.15
 Release: 1
 License: GPLv2+
 Group: Development/Tools
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/tests/bin/checkdeps 
new/lcov-1.15+git.20200812.d100e6c/tests/bin/checkdeps
--- old/lcov-1.15+git.20200723.b668fab/tests/bin/checkdeps      1970-01-01 
01:00:00.000000000 +0100
+++ new/lcov-1.15+git.20200812.d100e6c/tests/bin/checkdeps      2020-08-12 
16:17:04.000000000 +0200
@@ -0,0 +1,63 @@
+#!/usr/bin/env perl
+#
+# Copyright IBM Corp. 2020
+#
+# Usage: checkdeps <perl-file1> [<perl-file2> ...]
+#
+# Check if all Perl modules required by the Perl programs specified on the
+# command line are available. Note that this is a simple check that will only
+# catch straight-forward use directives.
+#
+# Example:
+# $ checkdeps file.pl file2.pl
+#
+
+use strict;
+use warnings;
+
+my $verbose = 0;
+
+sub check_file($)
+{
+       my ($file) = @_;
+       my $fd;
+       my $line;
+       my $rc = 0;
+
+       open($fd, "<", $file) or die("Could not open $file: $!\n");
+       $line = <$fd>;
+
+       if ($line =~ /^#.*perl/) {
+               while ($line = <$fd>) {
+                       my $module;
+
+                       # Look for ...use...module...;
+                       next if ($line !~ /^\s*use\s+(\S+).*;\s*$/);
+
+                       $module = $1;
+                       print("Checking for $module\n") if ($verbose);
+                       if (!eval("require $module")) {
+                               warn("Error: Missing Perl module '$module' ".
+                                    "required by $file\n");
+                               $rc = 1;
+                       }
+               }
+       }
+
+       close($fd);
+
+       return $rc;
+}
+
+sub main()
+{
+       my $rc = 0;
+
+       for my $file (@ARGV) {
+               $rc = 1 if (check_file($file));
+       }
+
+       return $rc;
+}
+
+exit(main());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/tests/bin/runtests 
new/lcov-1.15+git.20200812.d100e6c/tests/bin/runtests
--- old/lcov-1.15+git.20200723.b668fab/tests/bin/runtests       2020-07-23 
12:56:54.000000000 +0200
+++ new/lcov-1.15+git.20200812.d100e6c/tests/bin/runtests       2020-08-12 
16:17:04.000000000 +0200
@@ -15,17 +15,19 @@
 
        testsuite_init
        trap testsuite_exit exit
+       # Suppress test results on keyboard interrupt
+       trap "trap exit ; exit 1" SIGINT
 fi
 
 for TEST in ${TESTS} ; do
        if [[ -d "${TEST}" ]] ; then
                # Enter sub-directory
-               ${MAKE} -C "${TEST}" check
+               ${MAKE} -C "${TEST}" check || exit 1
        else
                # Enter test
                ABS_TEST="$PWD/$TEST"
                REL_TEST="${ABS_TEST##$TOPDIR}"
-               test_run "${REL_TEST}" "${ABS_TEST}" </dev/null
+               test_run "${REL_TEST}" "${ABS_TEST}" </dev/null || exit 1
        fi
 done
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/tests/bin/test_run 
new/lcov-1.15+git.20200812.d100e6c/tests/bin/test_run
--- old/lcov-1.15+git.20200723.b668fab/tests/bin/test_run       2020-07-23 
12:56:54.000000000 +0200
+++ new/lcov-1.15+git.20200812.d100e6c/tests/bin/test_run       2020-08-12 
16:17:04.000000000 +0200
@@ -8,12 +8,17 @@
 # test log file. Must be run after testsuite_init.
 #
 
-TOPDIR=$(realpath $(dirname $0)/..) && source "$TOPDIR/bin/common"
+trap 'echo ; exit 1' SIGINT
+
+[[ -z "$TOPDIR" ]] && TOPDIR=$(realpath $(dirname $0)/..)
+
+source "$TOPDIR/bin/common"
+
 EXCERPTLEN=10
 TESTNAME="$1"
 shift
 
-TIME=$(which time 2>/dev/null)
+TIME=$(type -P time 2>/dev/null)
 if [ ! -z "$TIME" ] ; then
        TIME="$TIME -v -o $TIMEFILE"
        if ! $TIME true 2>/dev/null ; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lcov-1.15+git.20200723.b668fab/tests/common.mak 
new/lcov-1.15+git.20200812.d100e6c/tests/common.mak
--- old/lcov-1.15+git.20200723.b668fab/tests/common.mak 2020-07-23 
12:56:54.000000000 +0200
+++ new/lcov-1.15+git.20200812.d100e6c/tests/common.mak 2020-08-12 
16:17:04.000000000 +0200
@@ -43,15 +43,28 @@
 #   make TESTS=subdir
 MAKEOVERRIDES := $(filter-out TESTS=%,$(MAKEOVERRIDES))
 
-check: prepare
+# Default target
+check:
        runtests "$(MAKE)" $(TESTS)
 
+ifeq ($(_ONCE),)
+
+# Do these only once during initialization
+export _ONCE := 1
+
+check: checkdeps prepare
+
+checkdeps:
+       checkdeps $(TOPDIR)/../bin/* $(TOPDIR)/bin/*
+
 prepare: $(INFOFILES) $(COUNTFILES)
 
 # Create artificial info files as test data
 $(INFOFILES) $(COUNTFILES):
        cd $(TOPDIR) && mkinfo profiles/$(SIZE) -o src/
 
+endif
+
 clean: clean_echo clean_subdirs
 
 clean_echo:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lcov-1.15+git.20200723.b668fab/tests/genhtml/Makefile 
new/lcov-1.15+git.20200812.d100e6c/tests/genhtml/Makefile
--- old/lcov-1.15+git.20200723.b668fab/tests/genhtml/Makefile   2020-07-23 
12:56:54.000000000 +0200
+++ new/lcov-1.15+git.20200812.d100e6c/tests/genhtml/Makefile   2020-08-12 
16:17:04.000000000 +0200
@@ -1,6 +1,6 @@
 include ../common.mak
 
-TESTS := full.sh part1.sh part2.sh target.sh zero.sh
+TESTS := full.sh part1.sh part2.sh target.sh zero.sh demangle.sh
 
 clean:
-       rm -rf *.log out_*
+       rm -rf *.log out_* *.tmp
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lcov-1.15+git.20200723.b668fab/tests/genhtml/demangle.sh 
new/lcov-1.15+git.20200812.d100e6c/tests/genhtml/demangle.sh
--- old/lcov-1.15+git.20200723.b668fab/tests/genhtml/demangle.sh        
1970-01-01 01:00:00.000000000 +0100
+++ new/lcov-1.15+git.20200812.d100e6c/tests/genhtml/demangle.sh        
2020-08-12 16:17:04.000000000 +0200
@@ -0,0 +1,119 @@
+#!/usr/bin/env bash
+#
+# Check demangling options
+#   genhtml_demangle_cpp
+#   genhtml_demangle_cpp_tool
+#   genhtml_demangle_cpp_params
+#
+
+OUTDIR="out_demangle"
+STDOUT="demangle_stdout.log"
+STDERR="demangle_stderr.log"
+INFO="demangle.info.tmp"
+SOURCE="file.tmp"
+HTML="${OUTDIR}/genhtml/${SOURCE}.func.html"
+MYFILT="${PWD}/mycppfilt.sh"
+
+function die() {
+       echo "Error: $*" >&2
+       exit 1
+}
+
+function cleanup() {
+       rm -rf  "${OUTDIR}" "${INFO}" "${SOURCE}"
+}
+
+function prepare() {
+       cat >"${INFO}" <<EOF
+SF:$SOURCE
+FN:1,myfunc1
+FN:2,_Z7myfunc2v
+FN:3,__Z7myfunc3v
+DA:1,1
+end_of_record
+EOF
+       touch "${SOURCE}"
+}
+
+function run() {
+       local CMDLINE="${GENHTML} ${INFO} -o ${OUTDIR} $*"
+
+       rm -rf "${OUTDIR}"
+
+       # Run genhtml
+       echo "CMDLINE: $CMDLINE"
+       $CMDLINE >${STDOUT} 2>${STDERR}
+       RC=$?
+
+       echo "STDOUT_START"
+       cat ${STDOUT}
+       echo "STDOUT_STOP"
+
+       echo "STDERR_START"
+       cat ${STDERR}
+       echo "STDERR_STOP"
+
+       # Check exit code
+       [[ $RC -ne 0 ]] && die "Non-zero genhtml exit code $RC"
+
+       # Output must not contain warnings
+       if [[ -s ${STDERR} ]] ; then
+               echo "Error: Output on stderr.log:"
+               cat ${STDERR}
+               exit 1
+       fi
+
+       # Log function names
+       echo "Found function names:"
+       grep coverFn ${HTML}
+}
+
+prepare
+
+echo "Run 1: No demangling"
+run ""
+if grep -q myfunc1 ${HTML} ; then
+       echo "Success - found myfunc1"
+else
+       die "Missing function name 'myfunc1' in output"
+fi
+
+echo
+echo "Run 2: Demangle using defaults"
+if type -P c++filt >/dev/null ; then
+       # Depending on environment, encoded symbols are converted to either
+       # myfunc2() or myfunc3()
+       run "--demangle-cpp"
+       if grep -q 'myfunc[23]()' ${HTML} ; then
+               echo "Success - found myfunc[23]() converted by c++filt"
+       else
+               die "Missing converted function name 'myfunc[23]()' in output"
+       fi
+else
+       echo "Skipping - missing c++filt tool"
+fi
+
+echo
+echo "Run 3: Demangle using custom demangling tool"
+# mycppfilt.sh with no parameters prepends aaa to each function name
+run "--demangle-cpp --rc genhtml_demangle_cpp_tool=$MYFILT"
+if grep -q 'aaamyfunc' ${HTML} ; then
+       echo "Success - found myfunc prefixed by mycppfilt.sh"
+else
+       die "Missing converted function name 'aaamyfunc' in output"
+fi
+
+echo
+echo "Run 4: Demangle with params set"
+# mycppfilt.sh with parameter prepends that parameter to to each function name
+run "--demangle-cpp --rc genhtml_demangle_cpp_tool=$MYFILT --rc 
genhtml_demangle_cpp_params='bbb'"
+if grep -q 'bbbmyfunc' ${HTML} ; then
+       echo "Success - found myfunc prefixed by custom prefix"
+else
+       die "Missing converted function name 'bbbmyfunc' in output"
+fi
+
+# Success
+cleanup
+
+exit 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lcov-1.15+git.20200723.b668fab/tests/genhtml/mycppfilt.sh 
new/lcov-1.15+git.20200812.d100e6c/tests/genhtml/mycppfilt.sh
--- old/lcov-1.15+git.20200723.b668fab/tests/genhtml/mycppfilt.sh       
1970-01-01 01:00:00.000000000 +0100
+++ new/lcov-1.15+git.20200812.d100e6c/tests/genhtml/mycppfilt.sh       
2020-08-12 16:17:04.000000000 +0200
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+#
+# Dummy c++filt replacement for testing purpose
+#
+
+# Skip over any valid options
+while [[ $1 =~ ^- ]] ; do
+       shift
+done
+
+if [[ -n "$*" ]] ; then
+       PREFIX="$*"
+else
+       PREFIX="aaa"
+fi
+
+while read LINE ; do
+       echo "${PREFIX}${LINE}"
+       unset LINE
+done
+
+# Last line isn't newline-terminated
+[[ -n "${LINE}" ]] && echo "${PREFIX}${LINE}"
+
+exit 0


Reply via email to