1*b1cdbd2cSJim Jagielski#!/usr/bin/perl -w 2*b1cdbd2cSJim Jagielski# ************************************************************* 3*b1cdbd2cSJim Jagielski# 4*b1cdbd2cSJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 5*b1cdbd2cSJim Jagielski# or more contributor license agreements. See the NOTICE file 6*b1cdbd2cSJim Jagielski# distributed with this work for additional information 7*b1cdbd2cSJim Jagielski# regarding copyright ownership. The ASF licenses this file 8*b1cdbd2cSJim Jagielski# to you under the Apache License, Version 2.0 (the 9*b1cdbd2cSJim Jagielski# "License"); you may not use this file except in compliance 10*b1cdbd2cSJim Jagielski# with the License. You may obtain a copy of the License at 11*b1cdbd2cSJim Jagielski# 12*b1cdbd2cSJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 13*b1cdbd2cSJim Jagielski# 14*b1cdbd2cSJim Jagielski# Unless required by applicable law or agreed to in writing, 15*b1cdbd2cSJim Jagielski# software distributed under the License is distributed on an 16*b1cdbd2cSJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17*b1cdbd2cSJim Jagielski# KIND, either express or implied. See the License for the 18*b1cdbd2cSJim Jagielski# specific language governing permissions and limitations 19*b1cdbd2cSJim Jagielski# under the License. 20*b1cdbd2cSJim Jagielski# 21*b1cdbd2cSJim Jagielski# ************************************************************* 22*b1cdbd2cSJim Jagielski# 23*b1cdbd2cSJim Jagielski# $Id: gcov_resultcompare.pl,v 1.2 2004-03-19 14:46:51 obo Exp $ 24*b1cdbd2cSJim Jagielski# 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski# GCOV_RESULTCOMPARE 27*b1cdbd2cSJim Jagielski# 28*b1cdbd2cSJim Jagielski# Helper, to compare two different results 29*b1cdbd2cSJim Jagielski# 30*b1cdbd2cSJim Jagielski# Q: Why perl? 31*b1cdbd2cSJim Jagielski# A: regexp ;-) 32*b1cdbd2cSJim Jagielski# 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielskiuse strict; 35*b1cdbd2cSJim Jagielskiuse File::Basename; 36*b1cdbd2cSJim Jagielskiuse Getopt::Long; 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielskiour $version_info = 'gcov_resultcompare $Revision: 1.2 $ '; 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielskiour $help; # Help option flag 41*b1cdbd2cSJim Jagielskiour $version; # Version option flag 42*b1cdbd2cSJim Jagielski# our $infile; 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielskiour $orig; 45*b1cdbd2cSJim Jagielskiour $compare; 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski# Prototypes 48*b1cdbd2cSJim Jagielskisub print_usage(*); 49*b1cdbd2cSJim Jagielskisub read_gcov_function_file($); 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski# Parse command line options 52*b1cdbd2cSJim Jagielskiif (!GetOptions( 53*b1cdbd2cSJim Jagielski "o=s" => \$orig, 54*b1cdbd2cSJim Jagielski "c=s" => \$compare, 55*b1cdbd2cSJim Jagielski "help" => \$help, 56*b1cdbd2cSJim Jagielski "version" => \$version 57*b1cdbd2cSJim Jagielski )) 58*b1cdbd2cSJim Jagielski{ 59*b1cdbd2cSJim Jagielski print_usage(*STDERR); 60*b1cdbd2cSJim Jagielski exit(1); 61*b1cdbd2cSJim Jagielski} 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski# Check for help option 64*b1cdbd2cSJim Jagielskiif ($help) 65*b1cdbd2cSJim Jagielski{ 66*b1cdbd2cSJim Jagielski print_usage(*STDOUT); 67*b1cdbd2cSJim Jagielski exit(0); 68*b1cdbd2cSJim Jagielski} 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski# Check for version option 71*b1cdbd2cSJim Jagielskiif ($version) 72*b1cdbd2cSJim Jagielski{ 73*b1cdbd2cSJim Jagielski print("$version_info\n"); 74*b1cdbd2cSJim Jagielski exit(0); 75*b1cdbd2cSJim Jagielski} 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski# check if enough parameters 78*b1cdbd2cSJim Jagielski# if ($#ARGV < 1) 79*b1cdbd2cSJim Jagielski# { 80*b1cdbd2cSJim Jagielski# print("No input filenames specified\n"); 81*b1cdbd2cSJim Jagielski# print_usage(*STDERR); 82*b1cdbd2cSJim Jagielski# exit(1); 83*b1cdbd2cSJim Jagielski# } 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielskiif (! $orig) 86*b1cdbd2cSJim Jagielski{ 87*b1cdbd2cSJim Jagielski print_usage(*STDOUT); 88*b1cdbd2cSJim Jagielski exit(0); 89*b1cdbd2cSJim Jagielski} 90*b1cdbd2cSJim Jagielskiif (! $compare) 91*b1cdbd2cSJim Jagielski{ 92*b1cdbd2cSJim Jagielski print_usage(*STDOUT); 93*b1cdbd2cSJim Jagielski exit(0); 94*b1cdbd2cSJim Jagielski} 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------ 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielskimy %origlist = read_gcov_function_file($orig); 99*b1cdbd2cSJim Jagielskimy %cmplist = read_gcov_function_file($compare); 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielskimy $key; 102*b1cdbd2cSJim Jagielskimy $value; 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielskiwhile (($key, $value) = each %origlist) 105*b1cdbd2cSJim Jagielski{ 106*b1cdbd2cSJim Jagielski my $cmpvalue = $cmplist{$key}; 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski if ($cmpvalue != 0.00) 109*b1cdbd2cSJim Jagielski { 110*b1cdbd2cSJim Jagielski if ($value < 100.00) 111*b1cdbd2cSJim Jagielski { 112*b1cdbd2cSJim Jagielski if ($cmpvalue > $value && $value < 90.0) 113*b1cdbd2cSJim Jagielski { 114*b1cdbd2cSJim Jagielski print "$key, $value, CMP:$cmpvalue\n"; 115*b1cdbd2cSJim Jagielski } 116*b1cdbd2cSJim Jagielski } 117*b1cdbd2cSJim Jagielski } 118*b1cdbd2cSJim Jagielski} 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski# -------------------------------------------------------------------------------- 121*b1cdbd2cSJim Jagielski# Read the gcov function (gcov -f) file 122*b1cdbd2cSJim Jagielski# and compare line by line with the export function list 123*b1cdbd2cSJim Jagielski# so we get a list of functions, which are only exported, and not all stuff. 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielskisub read_gcov_function_file($) 126*b1cdbd2cSJim Jagielski{ 127*b1cdbd2cSJim Jagielski local *INPUT_HANDLE; 128*b1cdbd2cSJim Jagielski my $file = shift; 129*b1cdbd2cSJim Jagielski my %list; 130*b1cdbd2cSJim Jagielski my $line = ""; 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski open(INPUT_HANDLE, $file) 133*b1cdbd2cSJim Jagielski or die("ERROR: cannot open $file!\n"); 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski while ($line = <INPUT_HANDLE>) 136*b1cdbd2cSJim Jagielski { 137*b1cdbd2cSJim Jagielski chomp($line); 138*b1cdbd2cSJim Jagielski # sample line (for reg exp:) 139*b1cdbd2cSJim Jagielski # 100.00 rtl_ustr_toDouble 140*b1cdbd2cSJim Jagielski if ($line =~ /^(.{6}) (\w+)$/ ) 141*b1cdbd2cSJim Jagielski { 142*b1cdbd2cSJim Jagielski my $percent = $1; 143*b1cdbd2cSJim Jagielski my $value = $2; 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski $list{$value} = $percent; 146*b1cdbd2cSJim Jagielski } 147*b1cdbd2cSJim Jagielski } 148*b1cdbd2cSJim Jagielski close(INPUT_HANDLE); 149*b1cdbd2cSJim Jagielski return %list; 150*b1cdbd2cSJim Jagielski} 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski# ---------------------------------------------------------------------------- 153*b1cdbd2cSJim Jagielskisub print_usage(*) 154*b1cdbd2cSJim Jagielski{ 155*b1cdbd2cSJim Jagielski local *HANDLE = $_[0]; 156*b1cdbd2cSJim Jagielski my $tool_name = basename($0); 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski print(HANDLE <<END_OF_USAGE); 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim JagielskiUsage: $tool_name [OPTIONS] INPUTFILE 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski -o Original File, which gives the main values 163*b1cdbd2cSJim Jagielski if here a value is smaller than in compare, the found value is a candidate for better check. 164*b1cdbd2cSJim Jagielski -c Compare file. 165*b1cdbd2cSJim Jagielski 166*b1cdbd2cSJim Jagielski -h, --help Print this help, then exit 167*b1cdbd2cSJim Jagielski -v, --version Print version number, then exit 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim JagielskiEND_OF_USAGE 170*b1cdbd2cSJim Jagielski ; 171*b1cdbd2cSJim Jagielski} 172