blob: f5127edbaf4b3659bd437f19eb32113e3a5effd5 [file] [log] [blame]
#!/usr/bin/perl -w
# *************************************************************
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# *************************************************************
#
# $Id: gcov_resultinterpreter.pl,v 1.3 2005-11-02 17:24:12 kz Exp $
#
# GCOV_RESULTINTERPRETER
#
# Helper, to interpret the result
#
# Q: Why perl?
# A: regexp ;-)
#
use strict;
use File::Basename;
use Getopt::Long;
our $version_info = 'gcov helper $Revision: 1.3 $ ';
our $help; # Help option flag
our $version; # Version option flag
# our $infile;
our $usedFunctions; # show all functions, which have a value > 0
our $nonusedFunctions; # show all functions, which have a value == 0
our $nPercent; # show all functions, which have a value > $nPercent
our $complete; # show all functions, which have a value == 100
our $incomplete; # show all functions, which have a value > 0 && < 100
# Prototypes
sub print_usage(*);
sub read_gcov_function_file($);
# Parse command line options
if (!GetOptions(
"usedfunctions" => \$usedFunctions,
"nonusedfunctions" => \$nonusedFunctions,
"percent=s" => \$nPercent,
"complete" => \$complete,
"incomplete" => \$incomplete,
"help" => \$help,
"version" => \$version
))
{
print_usage(*STDERR);
exit(1);
}
# Check for help option
if ($help)
{
print_usage(*STDOUT);
exit(0);
}
# Check for version option
if ($version)
{
print("$version_info\n");
exit(0);
}
# check if enough parameters
if ($#ARGV < 0)
{
print("No input filename specified\n");
print_usage(*STDERR);
exit(1);
}
if ($complete)
{
$nPercent = 100.00;
}
# ------------------------------------------------------------------------------
my %list = read_gcov_function_file($ARGV[0]);
my $key;
my $value;
while (($key, $value) = each %list)
{
# print "function: $key = $value\n";
if ($nonusedFunctions)
{
if ($value <= 0.00)
{
print "$key\n";
}
}
elsif ($usedFunctions)
{
if ($value != 0.00)
{
print "$key, $value\n";
}
}
elsif ($nPercent)
{
if ($value >= $nPercent)
{
print "$key, $value\n";
}
}
elsif ($incomplete)
{
if ($value > 0.00 && $value < 100.00)
{
print "$key, $value\n";
}
}
else
{
print "$key, $value\n";
}
}
# --------------------------------------------------------------------------------
# Read the gcov function (gcov -f) file
# and compare line by line with the export function list
# so we get a list of functions, which are only exported, and not all stuff.
sub read_gcov_function_file($)
{
local *INPUT_HANDLE;
my $file = $_[0];
my %list;
my $line = "";
open(INPUT_HANDLE, $file)
or die("ERROR: cannot open $file!\n");
while ($line = <INPUT_HANDLE>)
{
chomp($line);
# sample line (for reg exp:)
# 100.00 rtl_ustr_toDouble
if ($line =~ /^(.*) (\w+)$/ )
{
my $percent = $1;
my $value = $2;
$list{$value} = $percent;
}
}
close(INPUT_HANDLE);
return %list;
}
# ----------------------------------------------------------------------------
sub print_usage(*)
{
local *HANDLE = $_[0];
my $tool_name = basename($0);
print(HANDLE <<END_OF_USAGE);
Usage: $tool_name [OPTIONS] INPUTFILE
-u, --usedFunctions show all functions, which have a value > 0
-n, --nonusedFunctions show all functions, which have a value == 0
-p, --percent show all functions, which have a value > percent
-c, --complete show all functions, which have a value == 100
-i, --incomplete show all functions, which have a value > 0 && < 100
-h, --help Print this help, then exit
-v, --version Print version number, then exit
END_OF_USAGE
;
}