Initial release
This commit is contained in:
+225
@@ -0,0 +1,225 @@
|
||||
#!/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
|
||||
#
|
||||
#
|
||||
# gendesc
|
||||
#
|
||||
# This script creates a description file as understood by genhtml.
|
||||
# Input file format:
|
||||
#
|
||||
# For each test case:
|
||||
# <test name><optional whitespace>
|
||||
# <at least one whitespace character (blank/tab)><test description>
|
||||
#
|
||||
# Actual description may consist of several lines. By default, output is
|
||||
# written to stdout. Test names consist of alphanumeric characters
|
||||
# including _ and -.
|
||||
#
|
||||
#
|
||||
# History:
|
||||
# 2002-09-02: created by Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com>
|
||||
#
|
||||
|
||||
use strict;
|
||||
use File::Basename;
|
||||
use Getopt::Long;
|
||||
use Cwd qw/abs_path/;
|
||||
|
||||
|
||||
# Constants
|
||||
our $tool_dir = abs_path(dirname($0));
|
||||
our $lcov_version = "LCOV version 1.13";
|
||||
our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php";
|
||||
our $tool_name = basename($0);
|
||||
|
||||
|
||||
# Prototypes
|
||||
sub print_usage(*);
|
||||
sub gen_desc();
|
||||
sub warn_handler($);
|
||||
sub die_handler($);
|
||||
|
||||
|
||||
# Global variables
|
||||
our $help;
|
||||
our $version;
|
||||
our $output_filename;
|
||||
our $input_filename;
|
||||
|
||||
|
||||
#
|
||||
# Code entry point
|
||||
#
|
||||
|
||||
$SIG{__WARN__} = \&warn_handler;
|
||||
$SIG{__DIE__} = \&die_handler;
|
||||
|
||||
# Parse command line options
|
||||
if (!GetOptions("output-filename=s" => \$output_filename,
|
||||
"version" =>\$version,
|
||||
"help|?" => \$help
|
||||
))
|
||||
{
|
||||
print(STDERR "Use $tool_name --help to get usage information\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$input_filename = $ARGV[0];
|
||||
|
||||
# Check for help option
|
||||
if ($help)
|
||||
{
|
||||
print_usage(*STDOUT);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
# Check for version option
|
||||
if ($version)
|
||||
{
|
||||
print("$tool_name: $lcov_version\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
# Check for input filename
|
||||
if (!$input_filename)
|
||||
{
|
||||
die("No input filename specified\n".
|
||||
"Use $tool_name --help to get usage information\n");
|
||||
}
|
||||
|
||||
# Do something
|
||||
gen_desc();
|
||||
|
||||
|
||||
#
|
||||
# print_usage(handle)
|
||||
#
|
||||
# Write out command line usage information to given filehandle.
|
||||
#
|
||||
|
||||
sub print_usage(*)
|
||||
{
|
||||
local *HANDLE = $_[0];
|
||||
|
||||
print(HANDLE <<END_OF_USAGE)
|
||||
Usage: $tool_name [OPTIONS] INPUTFILE
|
||||
|
||||
Convert a test case description file into a format as understood by genhtml.
|
||||
|
||||
-h, --help Print this help, then exit
|
||||
-v, --version Print version number, then exit
|
||||
-o, --output-filename FILENAME Write description to FILENAME
|
||||
|
||||
For more information see: $lcov_url
|
||||
END_OF_USAGE
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# gen_desc()
|
||||
#
|
||||
# Read text file INPUT_FILENAME and convert the contained description to a
|
||||
# format as understood by genhtml, i.e.
|
||||
#
|
||||
# TN:<test name>
|
||||
# TD:<test description>
|
||||
#
|
||||
# If defined, write output to OUTPUT_FILENAME, otherwise to stdout.
|
||||
#
|
||||
# Die on error.
|
||||
#
|
||||
|
||||
sub gen_desc()
|
||||
{
|
||||
local *INPUT_HANDLE;
|
||||
local *OUTPUT_HANDLE;
|
||||
my $empty_line = "ignore";
|
||||
|
||||
open(INPUT_HANDLE, "<", $input_filename)
|
||||
or die("ERROR: cannot open $input_filename!\n");
|
||||
|
||||
# Open output file for writing
|
||||
if ($output_filename)
|
||||
{
|
||||
open(OUTPUT_HANDLE, ">", $output_filename)
|
||||
or die("ERROR: cannot create $output_filename!\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
*OUTPUT_HANDLE = *STDOUT;
|
||||
}
|
||||
|
||||
# Process all lines in input file
|
||||
while (<INPUT_HANDLE>)
|
||||
{
|
||||
chomp($_);
|
||||
|
||||
if (/^(\w[\w-]*)(\s*)$/)
|
||||
{
|
||||
# Matched test name
|
||||
# Name starts with alphanum or _, continues with
|
||||
# alphanum, _ or -
|
||||
print(OUTPUT_HANDLE "TN: $1\n");
|
||||
$empty_line = "ignore";
|
||||
}
|
||||
elsif (/^(\s+)(\S.*?)\s*$/)
|
||||
{
|
||||
# Matched test description
|
||||
if ($empty_line eq "insert")
|
||||
{
|
||||
# Write preserved empty line
|
||||
print(OUTPUT_HANDLE "TD: \n");
|
||||
}
|
||||
print(OUTPUT_HANDLE "TD: $2\n");
|
||||
$empty_line = "observe";
|
||||
}
|
||||
elsif (/^\s*$/)
|
||||
{
|
||||
# Matched empty line to preserve paragraph separation
|
||||
# inside description text
|
||||
if ($empty_line eq "observe")
|
||||
{
|
||||
$empty_line = "insert";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Close output file if defined
|
||||
if ($output_filename)
|
||||
{
|
||||
close(OUTPUT_HANDLE);
|
||||
}
|
||||
|
||||
close(INPUT_HANDLE);
|
||||
}
|
||||
|
||||
sub warn_handler($)
|
||||
{
|
||||
my ($msg) = @_;
|
||||
|
||||
warn("$tool_name: $msg");
|
||||
}
|
||||
|
||||
sub die_handler($)
|
||||
{
|
||||
my ($msg) = @_;
|
||||
|
||||
die("$tool_name: $msg");
|
||||
}
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/ruby
|
||||
|
||||
VSTGUI_DIR = File.expand_path(ARGV[0])
|
||||
OBJ_DIR = File.expand_path(ARGV[1])
|
||||
UNITTEST_EXE = File.expand_path(ARGV[2])
|
||||
OUTPUT_DIR = File.expand_path(ARGV[3])
|
||||
SCRIPT_DIR = File.expand_path(File.dirname(__FILE__))
|
||||
puts "Generating Code Coverage with:"
|
||||
puts "VSTGUI_DIR=" + VSTGUI_DIR
|
||||
puts "OBJ_DIR=" + OBJ_DIR
|
||||
puts "UNITTEST_EXE=" + UNITTEST_EXE
|
||||
puts "SCRIPT_DIR=" + SCRIPT_DIR
|
||||
|
||||
def removeDataFromTrace(infoFile, directory)
|
||||
puts "Removing test coverage from #{directory}"
|
||||
system ("./lcov --remove #{infoFile} --output-file #{infoFile} #{directory}/*")
|
||||
Dir.foreach(directory) { |path|
|
||||
if (path != ".." && path != ".")
|
||||
d = File.join(directory, path)
|
||||
if (File.directory?(d))
|
||||
removeDataFromTrace(infoFile, d)
|
||||
end
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
begin
|
||||
|
||||
system (UNITTEST_EXE)
|
||||
|
||||
if ($? != 0)
|
||||
raise "unittest error"
|
||||
end
|
||||
|
||||
Dir.chdir (SCRIPT_DIR)
|
||||
|
||||
COVERAGE_FILE = "vstgui-coverage.info"
|
||||
|
||||
system ("./lcov --capture --no-external --base-directory #{VSTGUI_DIR} --directory #{OBJ_DIR} --output-file vstgui-coverage.info")
|
||||
system ("./lcov --remove #{COVERAGE_FILE} --output-file #{COVERAGE_FILE} #{VSTGUI_DIR}/vstgui_mac.mm")
|
||||
removeDataFromTrace(COVERAGE_FILE, "#{VSTGUI_DIR}/uidescription/expat")
|
||||
removeDataFromTrace(COVERAGE_FILE, "#{VSTGUI_DIR}/tests/unittest")
|
||||
removeDataFromTrace(COVERAGE_FILE, "#{VSTGUI_DIR}/lib/platform")
|
||||
# system ("./lcov --remove vstgui-coverage.info --output-file vstgui-coverage.info #{VSTGUI_DIR}/tests/unittest/**")
|
||||
if ($? != 0)
|
||||
raise "lcov error"
|
||||
end
|
||||
|
||||
|
||||
puts "Generating report..."
|
||||
system ("./genhtml vstgui-coverage.info -t 'VSTGUI Test Coverage' --num-spaces 4 --demangle-cpp --output-directory #{OUTPUT_DIR}")
|
||||
|
||||
if ($? != 0)
|
||||
raise "genhtml error"
|
||||
end
|
||||
|
||||
ensure
|
||||
|
||||
Dir.foreach(OBJ_DIR) { |f|
|
||||
ext = File.extname(f)
|
||||
if (ext == ".gcda")
|
||||
File.delete (File.join(OBJ_DIR, f))
|
||||
end
|
||||
}
|
||||
|
||||
end
|
||||
|
||||
+6060
File diff suppressed because it is too large
Load Diff
+3862
File diff suppressed because it is too large
Load Diff
+388
@@ -0,0 +1,388 @@
|
||||
#!/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;
|
||||
use Cwd qw/abs_path/;
|
||||
|
||||
|
||||
# Constants
|
||||
our $tool_dir = abs_path(dirname($0));
|
||||
our $lcov_version = "LCOV version 1.13";
|
||||
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
|
||||
#
|
||||
|
||||
# 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; # 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
|
||||
|
||||
# Handle empty source files
|
||||
if (!@source) {
|
||||
@source = ( "" );
|
||||
}
|
||||
$height = scalar(@source);
|
||||
# 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");
|
||||
}
|
||||
+4448
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user