deprecated/buildtools/buildsystemtools/scanlog/scanlog.pl
changeset 655 3f65fd25dfd4
--- /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;
+				}
+			}
+		}
+	}
+