| Index: third_party/lcov-1.9/bin/genpng
|
| diff --git a/third_party/lcov-1.9/bin/genpng b/third_party/lcov-1.9/bin/genpng
|
| deleted file mode 100755
|
| index 7fe9dfe10caaaceb448d202d8921d0718be0e8c6..0000000000000000000000000000000000000000
|
| --- a/third_party/lcov-1.9/bin/genpng
|
| +++ /dev/null
|
| @@ -1,384 +0,0 @@
|
| -#!/usr/bin/perl -w
|
| -#
|
| -# Copyright (c) International Business Machines Corp., 2002
|
| -#
|
| -# This program is free software; you can redistribute it and/or modify
|
| -# it under the terms of the GNU General Public License as published by
|
| -# the Free Software Foundation; either version 2 of the License, or (at
|
| -# your option) any later version.
|
| -#
|
| -# This program is distributed in the hope that it will be useful, but
|
| -# WITHOUT ANY WARRANTY; without even the implied warranty of
|
| -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
| -# General Public License for more details.
|
| -#
|
| -# You should have received a copy of the GNU General Public License
|
| -# along with this program; if not, write to the Free Software
|
| -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
| -#
|
| -#
|
| -# genpng
|
| -#
|
| -# This script creates an overview PNG image of a source code file by
|
| -# representing each source code character by a single pixel.
|
| -#
|
| -# Note that the PERL module GD.pm is required for this script to work.
|
| -# It may be obtained from http://www.cpan.org
|
| -#
|
| -# History:
|
| -# 2002-08-26: created by Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com>
|
| -#
|
| -
|
| -use strict;
|
| -use File::Basename;
|
| -use Getopt::Long;
|
| -
|
| -
|
| -# Constants
|
| -our $lcov_version = 'LCOV version 1.9';
|
| -our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php";
|
| -our $tool_name = basename($0);
|
| -
|
| -
|
| -# Prototypes
|
| -sub gen_png($$$@);
|
| -sub check_and_load_module($);
|
| -sub genpng_print_usage(*);
|
| -sub genpng_process_file($$$$);
|
| -sub genpng_warn_handler($);
|
| -sub genpng_die_handler($);
|
| -
|
| -
|
| -#
|
| -# Code entry point
|
| -#
|
| -
|
| -# Prettify version string
|
| -$lcov_version =~ s/\$\s*Revision\s*:?\s*(\S+)\s*\$/$1/;
|
| -
|
| -# Check whether required module GD.pm is installed
|
| -if (check_and_load_module("GD"))
|
| -{
|
| - # Note: cannot use die() to print this message because inserting this
|
| - # code into another script via do() would not fail as required!
|
| - print(STDERR <<END_OF_TEXT)
|
| -ERROR: required module GD.pm not found on this system (see www.cpan.org).
|
| -END_OF_TEXT
|
| - ;
|
| - exit(2);
|
| -}
|
| -
|
| -# Check whether we're called from the command line or from another script
|
| -if (!caller)
|
| -{
|
| - my $filename;
|
| - my $tab_size = 4;
|
| - my $width = 80;
|
| - my $out_filename;
|
| - my $help;
|
| - my $version;
|
| -
|
| - $SIG{__WARN__} = \&genpng_warn_handler;
|
| - $SIG{__DIE__} = \&genpng_die_handler;
|
| -
|
| - # Parse command line options
|
| - if (!GetOptions("tab-size=i" => \$tab_size,
|
| - "width=i" => \$width,
|
| - "output-filename=s" => \$out_filename,
|
| - "help" => \$help,
|
| - "version" => \$version))
|
| - {
|
| - print(STDERR "Use $tool_name --help to get usage ".
|
| - "information\n");
|
| - exit(1);
|
| - }
|
| -
|
| - $filename = $ARGV[0];
|
| -
|
| - # Check for help flag
|
| - if ($help)
|
| - {
|
| - genpng_print_usage(*STDOUT);
|
| - exit(0);
|
| - }
|
| -
|
| - # Check for version flag
|
| - if ($version)
|
| - {
|
| - print("$tool_name: $lcov_version\n");
|
| - exit(0);
|
| - }
|
| -
|
| - # Check options
|
| - if (!$filename)
|
| - {
|
| - die("No filename specified\n");
|
| - }
|
| -
|
| - # Check for output filename
|
| - if (!$out_filename)
|
| - {
|
| - $out_filename = "$filename.png";
|
| - }
|
| -
|
| - genpng_process_file($filename, $out_filename, $width, $tab_size);
|
| - exit(0);
|
| -}
|
| -
|
| -
|
| -#
|
| -# genpng_print_usage(handle)
|
| -#
|
| -# Write out command line usage information to given filehandle.
|
| -#
|
| -
|
| -sub genpng_print_usage(*)
|
| -{
|
| - local *HANDLE = $_[0];
|
| -
|
| - print(HANDLE <<END_OF_USAGE)
|
| -Usage: $tool_name [OPTIONS] SOURCEFILE
|
| -
|
| -Create an overview image for a given source code file of either plain text
|
| -or .gcov file format.
|
| -
|
| - -h, --help Print this help, then exit
|
| - -v, --version Print version number, then exit
|
| - -t, --tab-size TABSIZE Use TABSIZE spaces in place of tab
|
| - -w, --width WIDTH Set width of output image to WIDTH pixel
|
| - -o, --output-filename FILENAME Write image to FILENAME
|
| -
|
| -For more information see: $lcov_url
|
| -END_OF_USAGE
|
| - ;
|
| -}
|
| -
|
| -
|
| -#
|
| -# check_and_load_module(module_name)
|
| -#
|
| -# Check whether a module by the given name is installed on this system
|
| -# and make it known to the interpreter if available. Return undefined if it
|
| -# is installed, an error message otherwise.
|
| -#
|
| -
|
| -sub check_and_load_module($)
|
| -{
|
| - eval("use $_[0];");
|
| - return $@;
|
| -}
|
| -
|
| -
|
| -#
|
| -# genpng_process_file(filename, out_filename, width, tab_size)
|
| -#
|
| -
|
| -sub genpng_process_file($$$$)
|
| -{
|
| - my $filename = $_[0];
|
| - my $out_filename = $_[1];
|
| - my $width = $_[2];
|
| - my $tab_size = $_[3];
|
| - local *HANDLE;
|
| - my @source;
|
| -
|
| - open(HANDLE, "<$filename")
|
| - or die("ERROR: cannot open $filename!\n");
|
| -
|
| - # Check for .gcov filename extension
|
| - if ($filename =~ /^(.*).gcov$/)
|
| - {
|
| - # Assume gcov text format
|
| - while (<HANDLE>)
|
| - {
|
| - if (/^\t\t(.*)$/)
|
| - {
|
| - # Uninstrumented line
|
| - push(@source, ":$1");
|
| - }
|
| - elsif (/^ ###### (.*)$/)
|
| - {
|
| - # Line with zero execution count
|
| - push(@source, "0:$1");
|
| - }
|
| - elsif (/^( *)(\d*) (.*)$/)
|
| - {
|
| - # Line with positive execution count
|
| - push(@source, "$2:$3");
|
| - }
|
| - }
|
| - }
|
| - else
|
| - {
|
| - # Plain text file
|
| - while (<HANDLE>) { push(@source, ":$_"); }
|
| - }
|
| - close(HANDLE);
|
| -
|
| - gen_png($out_filename, $width, $tab_size, @source);
|
| -}
|
| -
|
| -
|
| -#
|
| -# gen_png(filename, width, tab_size, source)
|
| -#
|
| -# Write an overview PNG file to FILENAME. Source code is defined by SOURCE
|
| -# which is a list of lines <count>:<source code> per source code line.
|
| -# The output image will be made up of one pixel per character of source,
|
| -# coloring will be done according to execution counts. WIDTH defines the
|
| -# image width. TAB_SIZE specifies the number of spaces to use as replacement
|
| -# string for tabulator signs in source code text.
|
| -#
|
| -# Die on error.
|
| -#
|
| -
|
| -sub gen_png($$$@)
|
| -{
|
| - my $filename = shift(@_); # Filename for PNG file
|
| - my $overview_width = shift(@_); # Imagewidth for image
|
| - my $tab_size = shift(@_); # Replacement string for tab signs
|
| - my @source = @_; # Source code as passed via argument 2
|
| - my $height = scalar(@source); # Height as define by source size
|
| - my $overview; # Source code overview image data
|
| - my $col_plain_back; # Color for overview background
|
| - my $col_plain_text; # Color for uninstrumented text
|
| - my $col_cov_back; # Color for background of covered lines
|
| - my $col_cov_text; # Color for text of covered lines
|
| - my $col_nocov_back; # Color for background of lines which
|
| - # were not covered (count == 0)
|
| - my $col_nocov_text; # Color for test of lines which were not
|
| - # covered (count == 0)
|
| - my $col_hi_back; # Color for background of highlighted lines
|
| - my $col_hi_text; # Color for text of highlighted lines
|
| - my $line; # Current line during iteration
|
| - my $row = 0; # Current row number during iteration
|
| - my $column; # Current column number during iteration
|
| - my $color_text; # Current text color during iteration
|
| - my $color_back; # Current background color during iteration
|
| - my $last_count; # Count of last processed line
|
| - my $count; # Count of current line
|
| - my $source; # Source code of current line
|
| - my $replacement; # Replacement string for tabulator chars
|
| - local *PNG_HANDLE; # Handle for output PNG file
|
| -
|
| - # Create image
|
| - $overview = new GD::Image($overview_width, $height)
|
| - or die("ERROR: cannot allocate overview image!\n");
|
| -
|
| - # Define colors
|
| - $col_plain_back = $overview->colorAllocate(0xff, 0xff, 0xff);
|
| - $col_plain_text = $overview->colorAllocate(0xaa, 0xaa, 0xaa);
|
| - $col_cov_back = $overview->colorAllocate(0xaa, 0xa7, 0xef);
|
| - $col_cov_text = $overview->colorAllocate(0x5d, 0x5d, 0xea);
|
| - $col_nocov_back = $overview->colorAllocate(0xff, 0x00, 0x00);
|
| - $col_nocov_text = $overview->colorAllocate(0xaa, 0x00, 0x00);
|
| - $col_hi_back = $overview->colorAllocate(0x00, 0xff, 0x00);
|
| - $col_hi_text = $overview->colorAllocate(0x00, 0xaa, 0x00);
|
| -
|
| - # Visualize each line
|
| - foreach $line (@source)
|
| - {
|
| - # Replace tabs with spaces to keep consistent with source
|
| - # code view
|
| - while ($line =~ /^([^\t]*)(\t)/)
|
| - {
|
| - $replacement = " "x($tab_size - ((length($1) - 1) %
|
| - $tab_size));
|
| - $line =~ s/^([^\t]*)(\t)/$1$replacement/;
|
| - }
|
| -
|
| - # Skip lines which do not follow the <count>:<line>
|
| - # specification, otherwise $1 = count, $2 = source code
|
| - if (!($line =~ /(\*?)(\d*):(.*)$/)) { next; }
|
| - $count = $2;
|
| - $source = $3;
|
| -
|
| - # Decide which color pair to use
|
| -
|
| - # If this line was not instrumented but the one before was,
|
| - # take the color of that line to widen color areas in
|
| - # resulting image
|
| - if (($count eq "") && defined($last_count) &&
|
| - ($last_count ne ""))
|
| - {
|
| - $count = $last_count;
|
| - }
|
| -
|
| - if ($count eq "")
|
| - {
|
| - # Line was not instrumented
|
| - $color_text = $col_plain_text;
|
| - $color_back = $col_plain_back;
|
| - }
|
| - elsif ($count == 0)
|
| - {
|
| - # Line was instrumented but not executed
|
| - $color_text = $col_nocov_text;
|
| - $color_back = $col_nocov_back;
|
| - }
|
| - elsif ($1 eq "*")
|
| - {
|
| - # Line was highlighted
|
| - $color_text = $col_hi_text;
|
| - $color_back = $col_hi_back;
|
| - }
|
| - else
|
| - {
|
| - # Line was instrumented and executed
|
| - $color_text = $col_cov_text;
|
| - $color_back = $col_cov_back;
|
| - }
|
| -
|
| - # Write one pixel for each source character
|
| - $column = 0;
|
| - foreach (split("", $source))
|
| - {
|
| - # Check for width
|
| - if ($column >= $overview_width) { last; }
|
| -
|
| - if ($_ eq " ")
|
| - {
|
| - # Space
|
| - $overview->setPixel($column++, $row,
|
| - $color_back);
|
| - }
|
| - else
|
| - {
|
| - # Text
|
| - $overview->setPixel($column++, $row,
|
| - $color_text);
|
| - }
|
| - }
|
| -
|
| - # Fill rest of line
|
| - while ($column < $overview_width)
|
| - {
|
| - $overview->setPixel($column++, $row, $color_back);
|
| - }
|
| -
|
| - $last_count = $2;
|
| -
|
| - $row++;
|
| - }
|
| -
|
| - # Write PNG file
|
| - open (PNG_HANDLE, ">$filename")
|
| - or die("ERROR: cannot write png file $filename!\n");
|
| - binmode(*PNG_HANDLE);
|
| - print(PNG_HANDLE $overview->png());
|
| - close(PNG_HANDLE);
|
| -}
|
| -
|
| -sub genpng_warn_handler($)
|
| -{
|
| - my ($msg) = @_;
|
| -
|
| - warn("$tool_name: $msg");
|
| -}
|
| -
|
| -sub genpng_die_handler($)
|
| -{
|
| - my ($msg) = @_;
|
| -
|
| - die("$tool_name: $msg");
|
| -}
|
|
|