Hello community,
here is the log from the commit of package lcov for openSUSE:Factory checked in at 2015-01-30 17:46:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/lcov (Old)
and /work/SRC/openSUSE:Factory/.lcov.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "lcov"
Changes:
--------
--- /work/SRC/openSUSE:Factory/lcov/lcov.changes 2013-01-17 09:44:00.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.lcov.new/lcov.changes 2015-01-30 17:47:16.000000000 +0100
@@ -1,0 +2,11 @@
+Sun Jun 1 14:07:41 UTC 2014 - vmiklos@collabora.co.uk
+
+- Update to version 1.11:
+ + Improved support for GCC 4.7
+ + Improved performance for specific functions
+ + Compatibility support for LLVM's gcov
+ + Multiple bug fixes and documentation improvements
+- Adapt lcov-1.10-except-unreach.patch to upstream changes
+ > lcov-1.11-except-unreach.patch
+
+-------------------------------------------------------------------
Old:
----
lcov-1.10-except-unreach.patch
lcov-1.10.tar.bz2
New:
----
lcov-1.11-except-unreach.patch
lcov-1.11.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ lcov.spec ++++++
--- /var/tmp/diff_new_pack.PWtgrV/_old 2015-01-30 17:47:19.000000000 +0100
+++ /var/tmp/diff_new_pack.PWtgrV/_new 2015-01-30 17:47:19.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package lcov
#
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -23,7 +23,7 @@
Summary: A Graphical GCOV Front-end
License: GPL-2.0+
Group: Development/Tools/Other
-Version: 1.10
+Version: 1.11
Release: 0
Source: %{name}-%{version}.tar.bz2
Patch0: %{name}-%{version}-except-unreach.patch
++++++ lcov-1.10-except-unreach.patch -> lcov-1.11-except-unreach.patch ++++++
--- /work/SRC/openSUSE:Factory/lcov/lcov-1.10-except-unreach.patch 2013-01-17 09:44:00.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.lcov.new/lcov-1.11-except-unreach.patch 2015-01-30 17:47:11.000000000 +0100
@@ -1,14 +1,13 @@
Fixes:
geninfo: Argument "=====" isn't numeric in numeric gt (>) at /usr/bin/geninfo line 1126.
---- lcov.orig/bin/geninfo 2012-03-12 04:26:08.000000000 -0700
-+++ lcov/bin/geninfo 2012-06-06 16:54:15.231499893 -0700
-@@ -1637,7 +1637,8 @@
- push(@result, 0);
- } else {
- # Check for zero count
-- if ($count eq "#####") {
-+ if ($count eq "#####"
-+ or $count eq "=====") {
- $count = 0;
- }
- push(@result, 1);
+--- lcov-1.11.orig/bin/geninfo 2014-05-23 11:03:45.000000000 +0200
++++ lcov-1.11/bin/geninfo 2014-06-01 15:51:23.334218890 +0200
+@@ -1760,7 +1760,7 @@
+
+ # Check for zero count which is indicated
+ # by ######
+- if ($number eq "######") { $number = 0; }
++ if ($number eq "######" or $number eq "=====") { $number = 0; }
+
+ if ($exclude_line) {
+ # Register uninstrumented line instead
++++++ lcov-1.10.tar.bz2 -> lcov-1.11.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lcov-1.10/CHANGES new/lcov-1.11/CHANGES
--- old/lcov-1.10/CHANGES 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/CHANGES 2014-05-23 11:03:45.000000000 +0200
@@ -1,3 +1,63 @@
+Version 1.11
+============
+
+genhtml:
+- Added current time to date information in HTML output. Based on patch by
+ sylvestre@debian.org
+- Improved --demanglecpp performance. Based on suggestion by olly@survex.com
+- Improved memory usage when combining files. Based on patch by olly@survex.com
+- Changed initial function table sorting order to execution counts. Based on
+ suggestion by paul.bignier@hotmail.fr
+- Fixed incorrect function execution counts when using --demanglecpp on
+ functions that demange to the same name
+- Fixed handling of prefix with trailing /. Reported by ahmed_osman@mentor.com
+- Fixed "use of uninitialized value" warning when processing incorrect
+ test description files. Reported by lbalbalba@gmail.com
+- Fixed reordering of unnamed branch blocks during coverage data merging.
+ Contributed by jhutz@cmu.edu
+
+geninfo:
+- Added exclusion markers for branch coverage. Contributed by s_stigler@gmx.de
+- Added toleration support for .gcno files with trailing garbage. Reported by
+ christophe.guillon@st.com
+- Fixed parsing of gcc 4.7 gcov format. Reported by fa.soft@gmx.net
+- Fixed geninfo aborting on empty data directories. Based on suggestion by
+ rich_drake@yahoo.com
+- Fixed "no data found" warning when using lcov with gcc 4.7
+- Fixed --no-external not working with --initial. Reported by
+ malcolm.parsons@gmail.com
+- Fixed handling of non-english locales. Reported by s_stigler@gmx.de
+- Fixed gcov tool version detection for gcov versions containing additional
+ versions in parenthesis.
+
+lcov:
+- Added compatibility support with LLVM's gcov (NOT llvm-cov). Contributed by
+ jonah@petri.us
+- Improved memory usage when combining files. Contributed by olly@survex.com
+- Fixed lcov aborting when using --diff on a patch file that changes the list
+ of functions. Reported by Nasir.Amanullah@us.fujitsu.com
+- Fixed whitespace handling in --rc options
+- Fixed --config-file not being passed to geninfo. Reported by
+ liuyhlinux@gmail.com
+- Fixed missing description for command line parameter value in man page.
+ Reported by sylvestre@mozilla.com
+- Fixed reordering of unnamed branch blocks during coverage data merging.
+ Contributed by jhutz@cmu.edu
+
+lcov.spec:
+- Fixed Perl dependency statement
+
+lcovrc:
+- Added config file setting 'genhtml_desc_html' to allow using HTML markup in
+ test case description text
+
+CONTRIBUTING:
+- Added contribution guidelines
+
+README:
+- Improved note on lcov usage
+
+
Version 1.10
============
@@ -149,7 +209,7 @@
- Fixed errors when processing incomplete function names in .bb files
- Fixed filename prefix detection
- Fixed problem with matching filename
-- Fixed problem when LANG is set to non-english locale. Reported by
+- Fixed problem when LANG is set to non-English locale. Reported by
benoit_belbezet@yahoo.fr.
- Fixed short-name option ambiguities
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lcov-1.10/CONTRIBUTING new/lcov-1.11/CONTRIBUTING
--- old/lcov-1.10/CONTRIBUTING 1970-01-01 01:00:00.000000000 +0100
+++ new/lcov-1.11/CONTRIBUTING 2014-05-23 11:03:45.000000000 +0200
@@ -0,0 +1,96 @@
+Contributing to LCOV
+====================
+
+Please read this document if you would like to help improving the LTP GCOV
+extension (LCOV). In general, all types of contributions are welcome, for
+example:
+
+ * Fixes for code or documentation
+ * Performance and compatibility improvements
+ * Functional enhancements
+
+There are some rules that these contributions must follow to be acceptable for
+inclusion:
+
+ 1. The contribution must align with the project goals of LCOV.
+ 2. The contribution must follow a particular format.
+ 3. The contribution must be signed.
+
+Once you have made sure that your contribution follows these rules, send it via
+e-mail to the LTP coverage mailing list [1].
+
+
+Signing your work
+=================
+
+All contributions to LCOV must be signed by putting the following line at the
+end of the explanation of a patch:
+
+ Signed-off-by: Your Name
+
+By signing a patch, you certify the following:
+
+ By making a contribution to the LTP GCOV extension (LCOV) on
+ http://ltp.sourceforge.net, I certify that:
+
+ a) The contribution was created by me and I have the right to submit it
+ under the terms and conditions of the open source license
+ "GNU General Public License, version 2 or later".
+ (http://www.gnu.org/licenses/old-licenses/gpl-2.0.html).
+
+ b) The contribution is made free of any other party's intellectual property
+ claims or rights.
+
+ c) I understand and agree that this project and the contribution are public
+ and that a record of the contribution (including all personal information
+ I submit with it, including my sign-off) is maintained indefinitely and
+ may be redistributed consistent with this project or the open source
+ license(s) involved.
+
+
+Project goals
+=============
+
+The goal of LCOV is to provide a set of command line tools that can be used to
+collect, process and visualize code coverage data as produced by the gcov tool
+that is part of the GNU Compiler Collection (GCC) [2].
+
+If you have an idea for a contribution but are unsure if it aligns with the
+project goals, feel free to discuss the idea on the LTP coverage mailing
+list [1].
+
+
+Contribution format
+===================
+
+To contribute a change, please create a patch using the diff utility with the
+following command line options:
+
+ diff -Naurp
+
+Please base your changes on the most current version of LCOV. You can use the
+following command line to obtain this version from the "utils" module of the
+LTP CVS repository (when asked for a password, simply press return):
+
+ cvs -d:pserver:anonymous@ltp.cvs.sourceforge.net:/cvsroot/ltp login
+ cvs -z3 -d:pserver:anonymous@ltp.cvs.sourceforge.net:/cvsroot/ltp co -P utils
+
+You can find LCOV in sub-directory "utils/analysis/lcov".
+
+Add a meaningful description of the contribution to the top of the patch. The
+description should follow this format:
+
+ component: short description
+
+ detailed description
+
+ Signed-off-by: Your Name
+
+With your Signed-off-by, you certify the rules stated in section
+"Signing your work".
+
+
+--
+
+[1] ltp-coverage@lists.sourceforge.net
+[2] http://gcc.gnu.org
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lcov-1.10/Makefile new/lcov-1.11/Makefile
--- old/lcov-1.10/Makefile 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/Makefile 2014-05-23 11:03:45.000000000 +0200
@@ -11,7 +11,7 @@
# - clean: remove all generated files
#
-VERSION := 1.10
+VERSION := 1.11
RELEASE := 1
CFG_DIR := $(PREFIX)/etc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lcov-1.10/README new/lcov-1.11/README
--- old/lcov-1.10/README 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/README 2014-05-23 11:03:45.000000000 +0200
@@ -1,6 +1,6 @@
-------------------------------------------------
- README file for the LTP GCOV extension (LCOV) -
-- Last changes: 2012-10-10 -
+- Last changes: 2014-05-23 -
-------------------------------------------------
Description
@@ -109,11 +109,14 @@
lcov --directory appdir --zerocounters
- b) Capturing the current coverage state to a file (works only after the
- application has been started and stopped at least once)
+ b) Capturing the current coverage state to a file
lcov --directory appdir --capture --output-file app.info
+ Note that this step only works after the application has
+ been started and stopped at least once. Otherwise lcov will
+ abort with an error mentioning that there are no data/.gcda files.
+
c) Getting HTML output
genhtml app.info
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lcov-1.10/bin/gendesc new/lcov-1.11/bin/gendesc
--- old/lcov-1.10/bin/gendesc 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/bin/gendesc 2014-05-23 11:03:45.000000000 +0200
@@ -41,7 +41,7 @@
# Constants
-our $lcov_version = 'LCOV version 1.10';
+our $lcov_version = 'LCOV version 1.11';
our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php";
our $tool_name = basename($0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lcov-1.10/bin/genhtml new/lcov-1.11/bin/genhtml
--- old/lcov-1.10/bin/genhtml 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/bin/genhtml 2014-05-23 11:03:45.000000000 +0200
@@ -65,14 +65,15 @@
#
use strict;
-use File::Basename;
+use File::Basename;
+use File::Temp qw(tempfile);
use Getopt::Long;
use Digest::MD5 qw(md5_base64);
# Global constants
our $title = "LCOV - code coverage report";
-our $lcov_version = 'LCOV version 1.10';
+our $lcov_version = 'LCOV version 1.11';
our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php";
our $tool_name = basename($0);
@@ -145,6 +146,7 @@
our $BR_TAKEN = 2;
our $BR_VEC_ENTRIES = 3;
our $BR_VEC_WIDTH = 32;
+our $BR_VEC_MAX = vec(pack('b*', 1 x $BR_VEC_WIDTH), 0, $BR_VEC_WIDTH);
# Additional offsets used when converting branch coverage data to HTML
our $BR_LEN = 3;
@@ -299,6 +301,7 @@
our @rate_png = ("ruby.png", "amber.png", "emerald.png");
our $lcov_func_coverage = 1;
our $lcov_branch_coverage = 0;
+our $rc_desc_html = 0; # lcovrc: genhtml_desc_html
our $cwd = `pwd`; # Current working directory
chomp($cwd);
@@ -369,6 +372,7 @@
"genhtml_branch_field_width" => \$br_field_width,
"genhtml_sort" => \$sort,
"genhtml_charset" => \$charset,
+ "genhtml_desc_html" => \$rc_desc_html,
"lcov_function_coverage" => \$lcov_func_coverage,
"lcov_branch_coverage" => \$lcov_branch_coverage,
});
@@ -672,6 +676,170 @@
if ($br_do);
}
+sub get_fn_list($)
+{
+ my ($info) = @_;
+ my %fns;
+ my @result;
+
+ foreach my $filename (keys(%{$info})) {
+ my $data = $info->{$filename};
+ my $funcdata = $data->{"func"};
+ my $sumfnccount = $data->{"sumfnc"};
+
+ if (defined($funcdata)) {
+ foreach my $func_name (keys(%{$funcdata})) {
+ $fns{$func_name} = 1;
+ }
+ }
+
+ if (defined($sumfnccount)) {
+ foreach my $func_name (keys(%{$sumfnccount})) {
+ $fns{$func_name} = 1;
+ }
+ }
+ }
+
+ @result = keys(%fns);
+
+ return \@result;
+}
+
+#
+# rename_functions(info, conv)
+#
+# Rename all function names in INFO according to CONV: OLD_NAME -> NEW_NAME.
+# In case two functions demangle to the same name, assume that they are
+# different object code implementations for the same source function.
+#
+
+sub rename_functions($$)
+{
+ my ($info, $conv) = @_;
+
+ foreach my $filename (keys(%{$info})) {
+ my $data = $info->{$filename};
+ my $funcdata;
+ my $testfncdata;
+ my $sumfnccount;
+ my %newfuncdata;
+ my %newsumfnccount;
+ my $f_found;
+ my $f_hit;
+
+ # funcdata: function name -> line number
+ $funcdata = $data->{"func"};
+ foreach my $fn (keys(%{$funcdata})) {
+ my $cn = $conv->{$fn};
+
+ # Abort if two functions on different lines map to the
+ # same demangled name.
+ if (defined($newfuncdata{$cn}) &&
+ $newfuncdata{$cn} != $funcdata->{$fn}) {
+ die("ERROR: Demangled function name $fn ".
+ " maps to different lines (".
+ $newfuncdata{$cn}." vs ".
+ $funcdata->{$fn}.")\n");
+ }
+ $newfuncdata{$cn} = $funcdata->{$fn};
+ }
+ $data->{"func"} = \%newfuncdata;
+
+ # testfncdata: test name -> testfnccount
+ # testfnccount: function name -> execution count
+ $testfncdata = $data->{"testfnc"};
+ foreach my $tn (keys(%{$testfncdata})) {
+ my $testfnccount = $testfncdata->{$tn};
+ my %newtestfnccount;
+
+ foreach my $fn (keys(%{$testfnccount})) {
+ my $cn = $conv->{$fn};
+
+ # Add counts for different functions that map
+ # to the same name.
+ $newtestfnccount{$cn} +=
+ $testfnccount->{$fn};
+ }
+ $testfncdata->{$tn} = \%newtestfnccount;
+ }
+
+ # sumfnccount: function name -> execution count
+ $sumfnccount = $data->{"sumfnc"};
+ foreach my $fn (keys(%{$sumfnccount})) {
+ my $cn = $conv->{$fn};
+
+ # Add counts for different functions that map
+ # to the same name.
+ $newsumfnccount{$cn} += $sumfnccount->{$fn};
+ }
+ $data->{"sumfnc"} = \%newsumfnccount;
+
+ # Update function found and hit counts since they may have
+ # changed
+ $f_found = 0;
+ $f_hit = 0;
+ foreach my $fn (keys(%newsumfnccount)) {
+ $f_found++;
+ $f_hit++ if ($newsumfnccount{$fn} > 0);
+ }
+ $data->{"f_found"} = $f_found;
+ $data->{"f_hit"} = $f_hit;
+ }
+}
+
+#
+# demangle_cpp(INFO)
+#
+# Demangle all function names found in INFO.
+#
+sub demangle_cpp($)
+{
+ my ($info) = @_;
+ my $fn_list = get_fn_list($info);
+ my @fn_list_demangled;
+ my $tmpfile;
+ my $handle;
+ my %demangled;
+ my $changed;
+
+ # Nothing to do
+ return if (!@$fn_list);
+
+ # Write list to temp file
+ (undef, $tmpfile) = tempfile();
+ die("ERROR: could not create temporary file") if (!defined($tmpfile));
+ open($handle, ">", $tmpfile) or
+ die("ERROR: could not write to $tmpfile: $!\n");
+ print($handle join("\n", @$fn_list));
+ close($handle);
+
+ # Run c++ filt on tempfile file and parse output, creating a hash
+ open($handle, "-|", "c++filt < $tmpfile") or
+ die("ERROR: could not run c++filt: $!\n");
+ @fn_list_demangled = <$handle>;
+ close($handle);
+ unlink($tmpfile) or
+ warn("WARNING: could not remove temporary file $tmpfile: $!\n");
+
+ if (scalar(@fn_list_demangled) != scalar(@$fn_list)) {
+ die("ERROR: c++filt output not as expected (".
+ scalar(@fn_list_demangled)." vs ".
+ scalar(@$fn_list).") lines\n");
+ }
+
+ # Build old_name -> new_name
+ $changed = 0;
+ for (my $i = 0; $i < scalar(@$fn_list); $i++) {
+ chomp($fn_list_demangled[$i]);
+ $demangled{$fn_list->[$i]} = $fn_list_demangled[$i];
+ $changed++ if ($fn_list->[$i] ne $fn_list_demangled[$i]);
+ }
+
+ info("Demangling $changed function names\n");
+
+ # Change all occurrences of function names in INFO
+ rename_functions($info, \%demangled);
+}
#
# gen_html()
@@ -730,6 +898,9 @@
%info_data = %{apply_baseline(\%info_data, \%base_data)};
}
+ # Demangle C++ function names if requested
+ demangle_cpp(\%info_data) if ($demangle_cpp);
+
@dir_list = get_dir_list(keys(%info_data));
if ($no_prefix)
@@ -756,6 +927,7 @@
{
info("Using user-specified filename prefix \"".
"$dir_prefix\"\n");
+ $dir_prefix =~ s/\/+$//;
}
# Read in test description file if specified
@@ -1239,6 +1411,10 @@
# "func" -> \%funcdata
# "found" -> $lines_found (number of instrumented lines found in file)
# "hit" -> $lines_hit (number of executed lines in file)
+# "f_found" -> $fn_found (number of instrumented functions found in file)
+# "f_hit" -> $fn_hit (number of executed functions in file)
+# "b_found" -> $br_found (number of instrumented branches found in file)
+# "b_hit" -> $br_hit (number of executed branches in file)
# "check" -> \%checkdata
# "testfnc" -> \%testfncdata
# "sumfnc" -> \%sumfnccount
@@ -1662,8 +1838,8 @@
sub add_counts($$)
{
- my %data1 = %{$_[0]}; # Hash 1
- my %data2 = %{$_[1]}; # Hash 2
+ my $data1_ref = $_[0]; # Hash 1
+ my $data2_ref = $_[1]; # Hash 2
my %result; # Resulting hash
my $line; # Current line iteration scalar
my $data1_count; # Count of line in hash1
@@ -1671,10 +1847,10 @@
my $found = 0; # Total number of lines found
my $hit = 0; # Number of lines with a count > 0
- foreach $line (keys(%data1))
+ foreach $line (keys(%$data1_ref))
{
- $data1_count = $data1{$line};
- $data2_count = $data2{$line};
+ $data1_count = $data1_ref->{$line};
+ $data2_count = $data2_ref->{$line};
# Add counts if present in both hashes
if (defined($data2_count)) { $data1_count += $data2_count; }
@@ -1686,14 +1862,14 @@
if ($data1_count > 0) { $hit++; }
}
- # Add lines unique to data2
- foreach $line (keys(%data2))
+ # Add lines unique to data2_ref
+ foreach $line (keys(%$data2_ref))
{
- # Skip lines already in data1
- if (defined($data1{$line})) { next; }
+ # Skip lines already in data1_ref
+ if (defined($data1_ref->{$line})) { next; }
- # Copy count from data2
- $result{$line} = $data2{$line};
+ # Copy count from data2_ref
+ $result{$line} = $data2_ref->{$line};
$found++;
if ($result{$line} > 0) { $hit++; }
@@ -2348,6 +2524,9 @@
# Match lines beginning with TD:
if (/^TD:\s+(.*?)\s*$/)
{
+ if (!defined($test_name)) {
+ die("ERROR: Found test description without prior test name in $_[0]:$.\n");
+ }
# Check for empty line
if ($1)
{
@@ -2415,10 +2594,15 @@
my $year;
my $month;
my $day;
+ my $hour;
+ my $min;
+ my $sec;
- ($year, $month, $day) = (localtime())[5, 4, 3];
+ ($year, $month, $day, $hour, $min, $sec) =
+ (localtime())[5, 4, 3, 2, 1, 0];
- return sprintf("%d-%02d-%02d", $year+1900, $month+1, $day);
+ return sprintf("%d-%02d-%02d %02d:%02d:%02d", $year+1900, $month+1,
+ $day, $hour, $min, $sec);
}
@@ -2475,8 +2659,10 @@
foreach $test_name (sort(keys(%description)))
{
- write_test_table_entry(*HTML_HANDLE, $test_name,
- escape_html($description{$test_name}));
+ my $desc = $description{$test_name};
+
+ $desc = escape_html($desc) if (!$rc_desc_html);
+ write_test_table_entry(*HTML_HANDLE, $test_name, $desc);
}
write_test_table_epilog(*HTML_HANDLE);
@@ -4273,7 +4459,11 @@
if ($func_coverage) {
$view .= "";
if ($type == $HDR_SOURCE) {
- $view .= " (source / functions</a>)";
+ if ($sort) {
+ $view .= " (source / functions</a>)";
+ } else {
+ $view .= " (source / functions</a>)";
+ }
} elsif ($type == $HDR_FUNC) {
$view .= " (source</a> / functions)";
}
@@ -4852,6 +5042,7 @@
# Retrieve data from vector
$block = vec($vec, $offset + $BR_BLOCK, $BR_VEC_WIDTH);
+ $block = -1 if ($block == $BR_VEC_MAX);
$branch = vec($vec, $offset + $BR_BRANCH, $BR_VEC_WIDTH);
$taken = vec($vec, $offset + $BR_TAKEN, $BR_VEC_WIDTH);
@@ -4877,10 +5068,12 @@
my $i;
$vec = "" if (!defined($vec));
+ $block = $BR_VEC_MAX if $block < 0;
# Check if branch already exists in vector
for ($i = 0; $i < $num; $i++) {
my ($v_block, $v_branch, $v_taken) = br_ivec_get($vec, $i);
+ $v_block = $BR_VEC_MAX if $v_block < 0;
next if ($v_block != $block || $v_branch != $branch);
@@ -5136,8 +5329,10 @@
if ($type == 0) {
return sort(keys(%{$funcdata}));
}
- return sort({$sumfncdata->{$b} <=> $sumfncdata->{$a}}
- keys(%{$sumfncdata}));
+ return sort({
+ $sumfncdata->{$b} == $sumfncdata->{$a} ?
+ $a cmp $b : $sumfncdata->{$a} <=> $sumfncdata->{$b}
+ } keys(%{$sumfncdata}));
}
#
@@ -5194,12 +5389,7 @@
my $count = $sumfncdata->{$name};
my $countstyle;
- # Demangle C++ function names if requested
- if ($demangle_cpp) {
- $name = `c++filt "$name"`;
- chomp($name);
- }
- # Escape any remaining special characters
+ # Escape special characters
$name = escape_html($name);
if ($startline < 1) {
$startline = 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lcov-1.10/bin/geninfo new/lcov-1.11/bin/geninfo
--- old/lcov-1.10/bin/geninfo 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/bin/geninfo 2014-05-23 11:03:45.000000000 +0200
@@ -61,7 +61,7 @@
}
# Constants
-our $lcov_version = 'LCOV version 1.10';
+our $lcov_version = 'LCOV version 1.11';
our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php";
our $gcov_tool = "gcov";
our $tool_name = basename($0);
@@ -88,6 +88,11 @@
our $EXCL_STOP = "LCOV_EXCL_STOP";
our $EXCL_LINE = "LCOV_EXCL_LINE";
+# Marker to exclude branch coverage but keep function and line coveage
+our $EXCL_BR_START = "LCOV_EXCL_BR_START";
+our $EXCL_BR_STOP = "LCOV_EXCL_BR_STOP";
+our $EXCL_BR_LINE = "LCOV_EXCL_BR_LINE";
+
# Compatibility mode values
our $COMPAT_VALUE_OFF = 0;
our $COMPAT_VALUE_ON = 1;
@@ -140,8 +145,9 @@
our $BR_TAKEN = 3;
our $BR_VEC_ENTRIES = 4;
our $BR_VEC_WIDTH = 32;
+our $BR_VEC_MAX = vec(pack('b*', 1 x $BR_VEC_WIDTH), 0, $BR_VEC_WIDTH);
-our $UNNAMED_BLOCK = 9999;
+our $UNNAMED_BLOCK = -1;
# Prototypes
sub print_usage(*);
@@ -266,8 +272,8 @@
# Prettify version string
$lcov_version =~ s/\$\s*Revision\s*:?\s*(\S+)\s*\$/$1/;
-# Set LANG so that gcov output will be in a unified format
-$ENV{"LANG"} = "C";
+# Set LC_ALL so that gcov output will be in a unified format
+$ENV{"LC_ALL"} = "C";
# Check command line for a configuration file name
Getopt::Long::Configure("pass_through", "no_auto_abbrev");
@@ -275,6 +281,16 @@
"rc=s%" => \%opt_rc);
Getopt::Long::Configure("default");
+# Remove spaces around rc options
+while (my ($key, $value) = each(%opt_rc)) {
+ delete($opt_rc{$key});
+
+ $key =~ s/^\s+|\s+$//g;
+ $value =~ s/^\s+|\s+$//g;
+
+ $opt_rc{$key} = $value;
+}
+
# Read configuration file if available
if (defined($opt_config_file)) {
$config = read_config($opt_config_file);
@@ -684,8 +700,11 @@
@file_list = `find "$directory" $maxdepth $follow -name \\*$ext -type f 2>/dev/null`;
chomp(@file_list);
- @file_list or
- die("ERROR: no $ext files found in $directory!\n");
+ if (!@file_list) {
+ warn("WARNING: no $ext files found in $directory - ".
+ "skipping!\n");
+ return;
+ }
$prefix = get_common_prefix(1, @file_list);
info("Found %d %s files in %s\n", $#file_list+1, $type,
$directory);
@@ -861,7 +880,6 @@
my $source; # gcov source header information
my $object; # gcov object header information
my @matches; # List of absolute paths matching filename
- my @unprocessed; # List of unprocessed source code files
my $base_dir; # Base directory for current file
my @tmp_links; # Temporary links to be cleaned up
my @result;
@@ -1057,7 +1075,6 @@
# Traverse the list of generated .gcov files and combine them into a
# single .info file
- @unprocessed = keys(%{$instr});
foreach $gcov_file (sort(@gcov_list))
{
my $i;
@@ -1140,16 +1157,6 @@
\@matches, \@gcov_content);
}
- # Remove processed file from list
- for ($index = scalar(@unprocessed) - 1; $index >= 0; $index--)
- {
- if ($unprocessed[$index] eq $source_filename)
- {
- splice(@unprocessed, $index, 1);
- last;
- }
- }
-
# Skip external files if requested
if (!$opt_external) {
if (is_external($source_filename)) {
@@ -1246,6 +1253,7 @@
my ($line, $block, $branch, $taken) =
br_gvec_get($gcov_branches, $i);
+ $block = $BR_VEC_MAX if ($block < 0);
print(INFO_HANDLE "BRDA:$line,$block,$branch,$taken\n");
$br_found++;
$br_hit++ if ($taken ne '-' && $taken > 0);
@@ -1294,16 +1302,6 @@
unlink($gcov_file);
}
- # Check for files which show up in the graph file but were never
- # processed
- if (@unprocessed && @gcov_list)
- {
- foreach (@unprocessed)
- {
- warn("WARNING: no data found for $_\n");
- }
- }
-
if (!($output_filename && ($output_filename eq "-")))
{
close(INFO_HANDLE);
@@ -1600,6 +1598,7 @@
# Retrieve data from vector
$line = vec($vec, $offset + $BR_LINE, $BR_VEC_WIDTH);
$block = vec($vec, $offset + $BR_BLOCK, $BR_VEC_WIDTH);
+ $block = -1 if ($block == $BR_VEC_MAX);
$branch = vec($vec, $offset + $BR_BRANCH, $BR_VEC_WIDTH);
$taken = vec($vec, $offset + $BR_TAKEN, $BR_VEC_WIDTH);
@@ -1627,6 +1626,7 @@
$vec = "" if (!defined($vec));
$offset = br_gvec_len($vec) * $BR_VEC_ENTRIES;
+ $block = $BR_VEC_MAX if $block < 0;
# Encode taken value into an integer
if ($taken eq "-") {
@@ -1676,6 +1676,8 @@
my $number;
my $exclude_flag = 0;
my $exclude_line = 0;
+ my $exclude_br_flag = 0;
+ my $exclude_branch = 0;
my $last_block = $UNNAMED_BLOCK;
my $last_line = 0;
local *INPUT;
@@ -1702,11 +1704,13 @@
if (/^branch\s+(\d+)\s+taken\s+=\s+(\d+)/) {
next if (!$br_coverage);
next if ($exclude_line);
+ next if ($exclude_branch);
$branches = br_gvec_push($branches, $last_line,
$last_block, $1, $2);
} elsif (/^branch\s+(\d+)\s+never\s+executed/) {
next if (!$br_coverage);
next if ($exclude_line);
+ next if ($exclude_branch);
$branches = br_gvec_push($branches, $last_line,
$last_block, $1, '-');
}
@@ -1730,6 +1734,19 @@
$exclude_line = 0;
}
}
+ # Check for exclusion markers (branch exclude)
+ if (!$no_markers) {
+ if (/$EXCL_BR_STOP/) {
+ $exclude_br_flag = 0;
+ } elsif (/$EXCL_BR_START/) {
+ $exclude_br_flag = 1;
+ }
+ if (/$EXCL_BR_LINE/ || $exclude_br_flag) {
+ $exclude_branch = 1;
+ } else {
+ $exclude_branch = 0;
+ }
+ }
# Source code execution data
if (/^\t\t(.*)$/)
{
@@ -1775,11 +1792,13 @@
} elsif (/^branch\s+(\d+)\s+taken\s+(\d+)/) {
next if (!$br_coverage);
next if ($exclude_line);
+ next if ($exclude_branch);
$branches = br_gvec_push($branches, $last_line,
$last_block, $1, $2);
} elsif (/^branch\s+(\d+)\s+never\s+executed/) {
next if (!$br_coverage);
next if ($exclude_line);
+ next if ($exclude_branch);
$branches = br_gvec_push($branches, $last_line,
$last_block, $1, '-');
}
@@ -1814,6 +1833,20 @@
$exclude_line = 0;
}
}
+ # Check for exclusion markers (branch exclude)
+ if (!$no_markers) {
+ if (/$EXCL_BR_STOP/) {
+ $exclude_br_flag = 0;
+ } elsif (/$EXCL_BR_START/) {
+ $exclude_br_flag = 1;
+ }
+ if (/$EXCL_BR_LINE/ || $exclude_br_flag) {
+ $exclude_branch = 1;
+ } else {
+ $exclude_branch = 0;
+ }
+ }
+
# <exec count>:<line number>:<source code>
if ($line eq "0")
{
@@ -1833,7 +1866,7 @@
push(@result, 0);
} else {
# Check for zero count
- if ($count eq "#####") {
+ if ($count =~ /^[#=]/) {
$count = 0;
}
push(@result, 1);
@@ -1846,7 +1879,7 @@
}
close(INPUT);
- if ($exclude_flag) {
+ if ($exclude_flag || $exclude_br_flag) {
warn("WARNING: unterminated exclusion section in $filename\n");
}
return(\@result, $branches, \@functions);
@@ -1865,11 +1898,21 @@
my $version_string;
my $result;
- open(GCOV_PIPE, "-|", "$gcov_tool -v")
+ open(GCOV_PIPE, "-|", "$gcov_tool --version")
or die("ERROR: cannot retrieve gcov version!\n");
$version_string = ;
+ # LLVM gcov keeps version information on the second line.
+ # For example, gcov --version yields:
+ # LLVM (http://llvm.org/):
+ # LLVM version 3.4svn
+ $version_string = if ($version_string =~ /LLVM/);
close(GCOV_PIPE);
+ # Remove version information in parenthesis to cope with the following:
+ # - gcov (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
+ # - gcov (crosstool-NG 1.18.0) 4.7.2
+ $version_string =~ s/\([^\)]*\)//g;
+
$result = 0;
if ($version_string =~ /(\d+)\.(\d+)(\.(\d+))?/)
{
@@ -1884,6 +1927,21 @@
$result = $1 << 16 | $2 << 8;
}
}
+ if ($version_string =~ /LLVM/)
+ {
+ # Map LLVM versions to the version of GCC gcov which
+ # they emulate
+ if ($result >= 0x030400)
+ {
+ info("Found LLVM gcov version 3.4, which emulates gcov version 4.2\n");
+ $result = 0x040200;
+ }
+ else
+ {
+ warn("This version of LLVM's gcov is unknown. Assuming it emulates GCC gcov version 4.2.\n");
+ $result = 0x040200;
+ }
+ }
return ($result, $version_string);
}
@@ -2285,6 +2343,15 @@
my $line;
my $linedata;
+ # Skip external files if requested
+ if (!$opt_external) {
+ if (is_external($filename)) {
+ info(" ignoring data for external file ".
+ "$filename\n");
+ next;
+ }
+ }
+
print(INFO_HANDLE "SF:$filename\n");
if (defined($funcdata) && $func_coverage) {
@@ -3341,9 +3408,11 @@
my $fileorder = {};
my $instr;
my $graph;
+ my $filelength;
local *HANDLE;
open(HANDLE, "<", $gcno_filename) or goto open_error;
+ $filelength = (stat(HANDLE))[7];
binmode(HANDLE);
# Read magic
$word = read_gcno_word(*HANDLE, "file magic");
@@ -3375,6 +3444,14 @@
$next_pos = tell(HANDLE);
goto tell_error if ($next_pos == -1);
$next_pos += $length;
+ # Catch garbage at the end of a gcno file
+ if ($next_pos > $filelength) {
+ debug("Overlong record: file_length=$filelength ".
+ "rec_length=$length\n");
+ warn("WARNING: $gcno_filename: Overlong record at end ".
+ "of file!\n");
+ last;
+ }
# Process record
if ($tag == $tag_function) {
($filename, $function) = read_gcno_function_record(
@@ -3443,15 +3520,36 @@
{
my $help = `$gcov_tool --help`;
my %capabilities;
+ my %short_option_translations = (
+ 'a' => 'all-blocks',
+ 'b' => 'branch-probabilities',
+ 'c' => 'branch-counts',
+ 'f' => 'function-summaries',
+ 'h' => 'help',
+ 'l' => 'long-file-names',
+ 'n' => 'no-output',
+ 'o' => 'object-directory',
+ 'p' => 'preserve-paths',
+ 'u' => 'unconditional-branches',
+ 'v' => 'version',
+ );
foreach (split(/\n/, $help)) {
- next if (!/--(\S+)/);
- next if ($1 eq 'help');
- next if ($1 eq 'version');
- next if ($1 eq 'object-directory');
+ my $capability;
+ if (/--(\S+)/) {
+ $capability = $1;
+ } else {
+ # If the line provides a short option, translate it.
+ next if (!/^\s*-(\S)\s/);
+ $capability = $short_option_translations{$1};
+ next if not defined($capability);
+ }
+ next if ($capability eq 'help');
+ next if ($capability eq 'version');
+ next if ($capability eq 'object-directory');
- $capabilities{$1} = 1;
- debug("gcov has capability '$1'\n");
+ $capabilities{$capability} = 1;
+ debug("gcov has capability '$capability'\n");
}
return \%capabilities;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lcov-1.10/bin/genpng new/lcov-1.11/bin/genpng
--- old/lcov-1.10/bin/genpng 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/bin/genpng 2014-05-23 11:03:45.000000000 +0200
@@ -35,7 +35,7 @@
# Constants
-our $lcov_version = 'LCOV version 1.10';
+our $lcov_version = 'LCOV version 1.11';
our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php";
our $tool_name = basename($0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lcov-1.10/bin/lcov new/lcov-1.11/bin/lcov
--- old/lcov-1.10/bin/lcov 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/bin/lcov 2014-05-23 11:03:45.000000000 +0200
@@ -71,7 +71,7 @@
# Global constants
-our $lcov_version = 'LCOV version 1.10';
+our $lcov_version = 'LCOV version 1.11';
our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php";
our $tool_name = basename($0);
@@ -93,6 +93,7 @@
our $BR_TAKEN = 2;
our $BR_VEC_ENTRIES = 3;
our $BR_VEC_WIDTH = 32;
+our $BR_VEC_MAX = vec(pack('b*', 1 x $BR_VEC_WIDTH), 0, $BR_VEC_WIDTH);
# Branch data combination types
our $BR_SUB = 0;
@@ -228,6 +229,16 @@
"rc=s%" => \%opt_rc);
Getopt::Long::Configure("default");
+# Remove spaces around rc options
+while (my ($key, $value) = each(%opt_rc)) {
+ delete($opt_rc{$key});
+
+ $key =~ s/^\s+|\s+$//g;
+ $value =~ s/^\s+|\s+$//g;
+
+ $opt_rc{$key} = $value;
+}
+
# Read configuration file if available
if (defined($opt_config_file)) {
$config = read_config($opt_config_file);
@@ -879,6 +890,9 @@
@param = (@param, "--rc", "$key=".$opt_rc{$key});
}
}
+ if (defined($opt_config_file)) {
+ @param = (@param, "--config-file", $opt_config_file);
+ }
system(@param) and exit($? >> 8);
}
@@ -1459,10 +1473,12 @@
my $i;
$vec = "" if (!defined($vec));
+ $block = $BR_VEC_MAX if $block < 0;
# Check if branch already exists in vector
for ($i = 0; $i < $num; $i++) {
my ($v_block, $v_branch, $v_taken) = br_ivec_get($vec, $i);
+ $v_block = $BR_VEC_MAX if $v_block < 0;
next if ($v_block != $block || $v_branch != $branch);
@@ -1499,6 +1515,7 @@
# Retrieve data from vector
$block = vec($vec, $offset + $BR_BLOCK, $BR_VEC_WIDTH);
+ $block = -1 if ($block == $BR_VEC_MAX);
$branch = vec($vec, $offset + $BR_BRANCH, $BR_VEC_WIDTH);
$taken = vec($vec, $offset + $BR_TAKEN, $BR_VEC_WIDTH);
@@ -1554,6 +1571,10 @@
# "func" -> \%funcdata
# "found" -> $lines_found (number of instrumented lines found in file)
# "hit" -> $lines_hit (number of executed lines in file)
+# "f_found" -> $fn_found (number of instrumented functions found in file)
+# "f_hit" -> $fn_hit (number of executed functions in file)
+# "b_found" -> $br_found (number of instrumented branches found in file)
+# "b_hit" -> $br_hit (number of executed branches in file)
# "check" -> \%checkdata
# "testfnc" -> \%testfncdata
# "sumfnc" -> \%sumfnccount
@@ -1979,8 +2000,8 @@
sub add_counts($$)
{
- my %data1 = %{$_[0]}; # Hash 1
- my %data2 = %{$_[1]}; # Hash 2
+ my $data1_ref = $_[0]; # Hash 1
+ my $data2_ref = $_[1]; # Hash 2
my %result; # Resulting hash
my $line; # Current line iteration scalar
my $data1_count; # Count of line in hash1
@@ -1988,10 +2009,10 @@
my $found = 0; # Total number of lines found
my $hit = 0; # Number of lines with a count > 0
- foreach $line (keys(%data1))
+ foreach $line (keys(%$data1_ref))
{
- $data1_count = $data1{$line};
- $data2_count = $data2{$line};
+ $data1_count = $data1_ref->{$line};
+ $data2_count = $data2_ref->{$line};
# Add counts if present in both hashes
if (defined($data2_count)) { $data1_count += $data2_count; }
@@ -2003,14 +2024,14 @@
if ($data1_count > 0) { $hit++; }
}
- # Add lines unique to data2
- foreach $line (keys(%data2))
+ # Add lines unique to data2_ref
+ foreach $line (keys(%$data2_ref))
{
- # Skip lines already in data1
- if (defined($data1{$line})) { next; }
+ # Skip lines already in data1_ref
+ if (defined($data1_ref->{$line})) { next; }
- # Copy count from data2
- $result{$line} = $data2{$line};
+ # Copy count from data2_ref
+ $result{$line} = $data2_ref->{$line};
$found++;
if ($result{$line} > 0) { $hit++; }
@@ -2615,6 +2636,7 @@
my ($block, $branch, $taken) =
br_ivec_get($brdata, $i);
+ $block = $BR_VEC_MAX if ($block < 0);
print(INFO_HANDLE "BRDA:$line,$block,".
"$branch,$taken\n");
$br_found++;
@@ -3707,10 +3729,10 @@
# Remove count data in testfncdata for functions which are no longer
# in funcdata
- foreach $testname (%{$testfncdata}) {
+ foreach $testname (keys(%{$testfncdata})) {
my $fnccount = $testfncdata->{$testname};
- foreach $func (%{$fnccount}) {
+ foreach $func (keys(%{$fnccount})) {
if (!defined($funcdata->{$func})) {
delete($fnccount->{$func});
}
@@ -3718,7 +3740,7 @@
}
# Remove count data in sumfnccount for functions which are no longer
# in funcdata
- foreach $func (%{$sumfnccount}) {
+ foreach $func (keys(%{$sumfnccount})) {
if (!defined($funcdata->{$func})) {
delete($sumfnccount->{$func});
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lcov-1.10/lcovrc new/lcov-1.11/lcovrc
--- old/lcov-1.10/lcovrc 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/lcovrc 2014-05-23 11:03:45.000000000 +0200
@@ -90,6 +90,9 @@
# Specify the character set of all generated HTML pages
genhtml_charset=UTF-8
+# Allow HTML markup in test case description text if non-zero
+genhtml_desc_html=0
+
# Location of the gcov tool (same as --gcov-info option of geninfo)
#geninfo_gcov_tool = gcov
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lcov-1.10/man/gendesc.1 new/lcov-1.11/man/gendesc.1
--- old/lcov-1.10/man/gendesc.1 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/man/gendesc.1 2014-05-23 11:03:45.000000000 +0200
@@ -1,4 +1,4 @@
-.TH gendesc 1 "LCOV 1.10" 2012\-10\-10 "User Manuals"
+.TH gendesc 1 "LCOV 1.11" 2014\-05\-23 "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.10/man/genhtml.1 new/lcov-1.11/man/genhtml.1
--- old/lcov-1.10/man/genhtml.1 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/man/genhtml.1 2014-05-23 11:03:45.000000000 +0200
@@ -1,4 +1,4 @@
-.TH genhtml 1 "LCOV 1.10" 2012\-10\-10 "User Manuals"
+.TH genhtml 1 "LCOV 1.11" 2014\-05\-23 "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.10/man/geninfo.1 new/lcov-1.11/man/geninfo.1
--- old/lcov-1.10/man/geninfo.1 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/man/geninfo.1 2014-05-23 11:03:45.000000000 +0200
@@ -1,4 +1,4 @@
-.TH geninfo 1 "LCOV 1.10" 2012\-10\-10 "User Manuals"
+.TH geninfo 1 "LCOV 1.11" 2014\-05\-23 "User Manuals"
.SH NAME
geninfo \- Generate tracefiles from .da files
.SH SYNOPSIS
@@ -74,8 +74,10 @@
.B Exclusion markers
To exclude specific lines of code from a tracefile, you can add exclusion
-markers to the source code. Exclusion markers are keywords which can for
-example be added in the form of a comment.
+markers to the source code. Additionally you can exclude specific branches from
+branch coverage without excluding the involved lines from line and function
+coverage. Exclusion markers are keywords which can for example be added in the
+form of a comment.
The following markers are recognized by geninfo:
@@ -96,6 +98,23 @@
section.
.RE
.br
+LCOV_EXCL_BR_LINE
+.RS
+Lines containing this marker will be excluded from branch coverage.
+.br
+.RE
+LCOV_EXCL_BR_START
+.RS
+Marks the beginning of a section which is excluded from branch coverage. The
+current line is part of this section.
+.br
+.RE
+LCOV_EXCL_BR_STOP
+.RS
+Marks the end of a section which is excluded from branch coverage. The current
+line not part of this section.
+.RE
+.br
.SH OPTIONS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lcov-1.10/man/genpng.1 new/lcov-1.11/man/genpng.1
--- old/lcov-1.10/man/genpng.1 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/man/genpng.1 2014-05-23 11:03:45.000000000 +0200
@@ -1,4 +1,4 @@
-.TH genpng 1 "LCOV 1.10" 2012\-10\-10 "User Manuals"
+.TH genpng 1 "LCOV 1.11" 2014\-05\-23 "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.10/man/lcov.1 new/lcov-1.11/man/lcov.1
--- old/lcov-1.10/man/lcov.1 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/man/lcov.1 2014-05-23 11:03:45.000000000 +0200
@@ -1,4 +1,4 @@
-.TH lcov 1 "LCOV 1.10" 2012\-10\-10 "User Manuals"
+.TH lcov 1 "LCOV 1.11" 2014\-05\-23 "User Manuals"
.SH NAME
lcov \- a graphical GCOV front\-end
.SH SYNOPSIS
@@ -573,6 +573,9 @@
.B source:
the source code file for a data set could not be found.
+
+.B graph:
+the graph file could not be found or is corrupted.
.RE
.B \-i
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lcov-1.10/man/lcovrc.5 new/lcov-1.11/man/lcovrc.5
--- old/lcov-1.10/man/lcovrc.5 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/man/lcovrc.5 2014-05-23 11:03:45.000000000 +0200
@@ -1,4 +1,4 @@
-.TH lcovrc 5 "LCOV 1.10" 2012\-10\-10 "User Manuals"
+.TH lcovrc 5 "LCOV 1.11" 2014\-05\-23 "User Manuals"
.SH NAME
lcovrc \- lcov configuration file
@@ -149,6 +149,11 @@
genhtml_charset=UTF\-8
.br
+# Allow HTML markup in test case description text if non\-zero
+.br
+genhtml_desc_html=0
+.br
+
# Location of the gcov tool
.br
#geninfo_gcov_tool = gcov
@@ -546,6 +551,21 @@
Default is UTF-8.
.PP
+
+.BR genhtml_desc_html " ="
+.IR 0 | 1
+.IP
+If non-zero, test case descriptions may contain HTML markup.
+
+Set this option to one if you want to embed HTML markup (for example to
+include links) in test case descriptions. When set to zero, HTML markup
+characters will be escaped to show up as plain text on the test case
+description page.
+.br
+
+Default is 0.
+.PP
+.
.BR geninfo_gcov_tool " ="
.I path_to_gcov
.IP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lcov-1.10/rpm/lcov.spec new/lcov-1.11/rpm/lcov.spec
--- old/lcov-1.10/rpm/lcov.spec 2012-10-10 11:15:55.000000000 +0200
+++ new/lcov-1.11/rpm/lcov.spec 2014-05-23 11:03:45.000000000 +0200
@@ -1,6 +1,6 @@
Summary: A graphical GCOV front-end
Name: lcov
-Version: 1.10
+Version: 1.11
Release: 1
License: GPL
Group: Development/Tools
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org