Show report.pl syntax highlighted
#!/usr/bin/perl
# Generate report on experimental results
# Directories to report on
@dirs = ("out/drivers");
# Flags
$flag_nousage = 0; # Don't print time/memory usage statisticss
foreach (@ARGV) {
if (/-nousage/) { $flag_nousage = 1; }
else {
printf("Usage: report.pl [ -nousage ]\n");
printf("-nousage Don't print time/memory usage statistics\n");
exit(0);
}
}
print_header();
while ($dir = shift(@dirs)) {
opendir(DIR, $dir);
@files = readdir(DIR);
closedir(DIR);
foreach $file (sort(@files)) {
next if ($file =~ /^\./);
if (-d "$dir/$file") {
push(@dirs, "$dir/$file");
}
else {
@info = getinfo("$dir/$file");
print_info(@info);
}
}
}
# Extract analysis summary from file
sub getinfo
{
my $funcs, $errs, $time, $vmsize, $filename, $finished;
$filename = shift;
$funcs = 0;
$errs = 0;
$time = "???";
$finished = 0;
open(FILE, "<$filename");
while (<FILE>) {
if (/^Assuming/) { $funcs++; }
elsif (/inconsistent/) { $errs++; }
elsif (/^Elapsed time/) { ($time) = m/^Elapsed time: (.*)s/; }
elsif (/^VMSize/) { ($vmsize) = m/^VMSize: (.*)K/; }
elsif (/^Analysis complete/) { $finished = 1; }
}
if ($finished) {
return ($funcs, $errs, $time, $vmsize);
}
else {
return (-1, -1, -1, -1);
}
}
# Remove $n levels of directories from the left of name
sub shiftdirs
{
my $n, $name, @path, $i;
($n, $name) = @_;
@path = split(/\//, $name);
for ($i = 0; $i < $n; $i++) {
shift(@path);
}
$name = join("/", @path);
return $name;
}
# Printing routines
sub print_header
{
printf("%-45s %3s %4s", "File", "Fn", "Err");
if ($flag_nousage) {
printf("\n");
}
else {
# printf(" %8s %6s\n", "File", "Fn", "Err", "Time", "Mem");
printf(" %8s %6s\n", "Time", "Mem");
}
printf("----------------------------------------------------------------------------\n");
}
sub print_info
{
my $funcs, $errs, $time, $vmsize, $name;
($funcs, $errs, $time, $vmsize) = @_;
$name = shiftdirs(2, "$dir/$file");
if ($errs == -1) {
if ($flag_nousage) {
printf("%-45s %s\n", "$name", "ANALYSIS ERROR");
}
else {
printf("%-45s %24s\n", "$name", "ANALYSIS ERROR");
}
}
else {
if ($flag_nousage) {
printf("%-45s %3d %4d\n", "$name", $funcs, $errs);
}
else {
printf("%-45s %3d %4d %8s %5dM\n", "$name", $funcs, $errs, $time, $vmsize / 1024);
}
}
}
See more files for this project here