--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deprecated/buildtools/buildsystemtools/scanlog/scanlog.pl Mon Oct 18 16:16:46 2010 +0800
@@ -0,0 +1,365 @@
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# summarise an automated build log
+# documentation available in generic\tools\e32toolp\docs\scanlog.txt
+# please update the documentation when modifying this file
+# RegEx's in Scanlog Module
+#
+#
+
+use strict;
+use FindBin; # for FindBin::Bin
+
+# Add the directory contain this perl script into the path to find modules
+use lib $FindBin::Bin;
+
+use Scanlog;
+
+my $line;
+my $iSlurp;
+my $phase;
+my $match_phase='';
+my $command='???';
+my $starttime;
+my $duration;
+my $errorcount=0;
+my $component='???';
+my %errors;
+my %missing;
+my %not_built;
+my $totalduration = 0;
+my $totalerrors = 0;
+my $warningcount=0;
+my %warnings;
+my $totalwarnings = 0;
+my $remarkscount=0;
+my %remarks;
+my $totalremarks = 0;
+my $migrationnotescount=0;
+my %migrationnotes;
+my $totalmigrationnotes = 0;
+my ($iStatus, $iName);
+
+my $verbose = 0;
+my $argc = scalar(@ARGV);
+if ($argc>0 and $ARGV[0]=~/^\s*\-v\s*$/)
+ {
+ $verbose = 1;
+ shift @ARGV;
+ }
+elsif ($argc>0 and $ARGV[0]=~/^\s*\-V\s*$/)
+ {
+ $verbose = 2;
+ shift @ARGV;
+ }
+
+sub do_remarks()
+ {
+ $remarkscount += 1;
+ if (!defined $remarks{$component})
+ {
+ $remarks{$component} = ();
+ }
+ push @{$remarks{$component}}, $line;
+ }
+
+sub do_migrationnotes()
+ {
+ $migrationnotescount += 1;
+ if (!defined $migrationnotes{$component})
+ {
+ $migrationnotes{$component} = ();
+ }
+ push @{$migrationnotes{$component}}, $line;
+ }
+
+sub do_warning()
+ {
+ $warningcount += 1;
+ if (!defined $warnings{$component})
+ {
+ $warnings{$component} = ();
+ }
+ push @{$warnings{$component}}, $line;
+ }
+
+sub do_error()
+ {
+ $errorcount += 1;
+ if (!defined $errors{$component})
+ {
+ $errors{$component} = ();
+ }
+ push @{$errors{$component}}, $line;
+ }
+
+# Read a number of lines in the log ignoreing the content
+sub do_slurp
+{
+ my ($num_lines) =@_;
+ for (my $i = 0; $i < $num_lines; $i++)
+ {
+ <>;
+ }
+}
+
+sub print_command_summary($;$)
+ {
+ my ($command, $duration) = @_;
+
+ return if ($command eq '???' && $errorcount==0 && $warningcount==0 && $remarkscount==0 && $migrationnotescount==0 );
+
+ my $elapsed = '??:??:??';
+ if (defined($duration))
+ {
+ $totalduration += $duration;
+ my ($sec,$min,$hour) = gmtime($duration);
+ $elapsed = sprintf("%02d:%02d:%02d", $hour, $min, $sec);
+ }
+
+ printf "%-28s\t%s\t%6d\t%6d\t%6d\t%6d\n", $command, $elapsed, $errorcount, $warningcount, $remarkscount, $migrationnotescount;
+ $totalerrors += $errorcount;
+ $totalwarnings += $warningcount;
+ $totalremarks += $remarkscount;
+ $totalmigrationnotes += $migrationnotescount;
+ $errorcount = 0;
+ $warningcount = 0;
+ $remarkscount = 0;
+ $migrationnotescount = 0;
+ }
+
+printf "%-28s\t%-8s\t%-6s\t%-6s\t%-6s\t%-6s %s\n", 'Command', 'Time', 'Errors', 'Warning','Remarks','Migration-Notes';
+
+while ($line=<>)
+ {
+
+ # ===-------------------------------------------------
+ # === baseline_bldfiles
+ # ===-------------------------------------------------
+ # === bldfiles started Sat Jul 24 01:38:03 1999.
+
+ if ($line =~ /^===------/)
+ {
+ print_command_summary($command);
+ $line = <>;
+ $line =~ /=== (.*)$/;
+ $command = $1;
+ <>;
+ $line = <>;
+ $line =~ /^=== (.+) started ... ... .. (..):(..):(..)/;
+ $phase = $1;
+ $starttime = ($2*60 + $3)*60 + $4;
+ $match_phase=$phase;
+ $match_phase=~s-\\-\\\\-go;
+ next;
+ }
+
+ # === bldfiles finished Sat Jul 24 01:38:56 1999.
+ if ($line =~ /^=== $match_phase finished ... ... .. (..):(..):(..)/)
+ {
+ $duration = ($1*60 + $2)*60 + $3 - $starttime;
+ if ($duration < 0)
+ {
+ $duration += 24*60*60;
+ }
+
+ print_command_summary($command,$duration);
+ $command = '???';
+ $component = '???';
+ next;
+ }
+
+ # === resource == gdtran 036
+
+ if ($line =~ /=== $match_phase == (\S+)/)
+ {
+ $component = $1;
+ $component =~ /(.*)[\\]$/;
+ $component = $1;
+ next;
+ }
+
+ # Lines to Ignore
+ ($iStatus) =&Scanlog::CheckForIgnore($line);
+ if($iStatus)
+ {
+ next;
+ }
+
+ # migrationnotes
+ ($iStatus, $iSlurp) =&Scanlog::CheckForMigrationNotes($line);
+ if ($iStatus)
+ {
+ do_migrationnotes();
+ do_slurp($iSlurp);
+ next;
+ }
+ # Remarks
+ ($iStatus, $iSlurp) =&Scanlog::CheckForRemarks($line);
+ if ($iStatus)
+ {
+ do_remarks();
+ do_slurp($iSlurp);
+ next;
+ }
+ # Errors
+ ($iStatus) =&Scanlog::CheckForErrors($line);
+ if ($iStatus)
+ {
+ do_error();
+ next;
+ }
+
+ # Warnings
+ ($iStatus) =&Scanlog::CheckForWarnings($line);
+ if ($iStatus)
+ {
+ do_warning();
+ next;
+ }
+
+ # Things Not Built
+ ($iStatus, $iName) =&Scanlog::CheckForNotBuilt($line);
+ if ($iStatus)
+ {
+ do_error();
+ $not_built{$iName} = "$component";
+ next;
+ }
+
+ # Things missing
+ ($iStatus, $iName) =&Scanlog::CheckForMissing($line);
+ if ($iStatus)
+ {
+ do_error();
+ $missing{$iName} += 1;
+ next;
+ }
+
+}
+
+print_command_summary($command);
+print "\n";
+my ($sec,$min,$hour, $mday) = gmtime($totalduration);
+$hour+=($mday-1)*24; # to allow for builds taking longer than 24 hours!
+
+printf "%-28s\t%02d:%02d:%02d\t%6d\t%6d\t%6d\t%6d\n\n", "Total", $hour, $min, $sec, $totalerrors, $totalwarnings, $totalremarks, $totalmigrationnotes;
+
+if (scalar %errors)
+ {
+ print "Fatal Errors by Component\n";
+ $errorcount = 0;
+ foreach $component (sort keys %errors)
+ {
+ printf "%-16s\t%6d\n", $component, scalar(@{$errors{$component}});
+ $errorcount += scalar(@{$errors{$component}});
+ }
+ if ($verbose>0)
+ {
+ print "\nError details";
+ foreach $component (sort keys %errors)
+ {
+ print "\n----------------------------\n$component\n";
+ foreach $line (@{$errors{$component}})
+ {
+ print $line;
+ }
+ }
+ }
+ }
+
+if (scalar %missing)
+ {
+ print "\nDon't know how to make...\n";
+ foreach my $file (sort keys %missing)
+ {
+ printf "%d\t%s\n", $missing{$file}, $file;
+ }
+ }
+
+if (scalar %not_built)
+ {
+ print "\nThings not built...\n";
+ foreach my $file (sort keys %not_built)
+ {
+ print "MISSING: $file ($not_built{$file})\n";
+ }
+ print "\n\n";
+ }
+
+if (scalar %warnings)
+ {
+ print "\nWarnings by Component\n";
+ $warningcount = 0;
+ foreach $component (sort keys %warnings)
+ {
+ printf "%-16s\t%6d\n", $component, scalar @{$warnings{$component}};
+ }
+ if ($verbose>1)
+ {
+ print "\nWarning details";
+ foreach $component (sort keys %warnings)
+ {
+ print "\n----------------------------\n$component\n";
+ foreach $line (@{$warnings{$component}})
+ {
+ print $line;
+ }
+ }
+ }
+ }
+if (scalar %remarks)
+ {
+ print "\nRemarks by Component\n";
+ $remarkscount = 0;
+ foreach $component (sort keys %remarks)
+ {
+ printf "%-16s\t%6d\n", $component, scalar @{$remarks{$component}};
+ }
+ if ($verbose>1)
+ {
+ print "\nRemarks details";
+ foreach $component (sort keys %remarks)
+ {
+ print "\n----------------------------\n$component\n";
+ foreach $line (@{$remarks{$component}})
+ {
+ print $line;
+ }
+ }
+ }
+ }
+
+if (scalar %migrationnotes)
+ {
+ print "\nMigration Notes by Component\n";
+ $migrationnotescount = 0;
+ foreach $component (sort keys %migrationnotes)
+ {
+ printf "%-16s\t%6d\n", $component, scalar @{$migrationnotes{$component}};
+ }
+ if ($verbose>1)
+ {
+ print "\nMigration Notes Details";
+ foreach $component (sort keys %migrationnotes)
+ {
+ print "\n----------------------------\n$component\n";
+ foreach $line (@{$migrationnotes{$component}})
+ {
+ print $line;
+ }
+ }
+ }
+ }
+