diff -r 02d78c9f018e -r 3f65fd25dfd4 deprecated/buildtools/buildsystemtools/scanlog/scanlog.pl --- /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; + } + } + } + } +