--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/compile/scanbuildlog.pl Wed Oct 28 14:39:48 2009 +0000
@@ -0,0 +1,157 @@
+#!perl -w
+
+#============================================================================
+#Name : scanbuildlog.pl
+#Part of : Helium
+
+#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+#All rights reserved.
+#This component and the accompanying materials are made available
+#under the terms of the License "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:
+#============================================================================
+
+# ==============================================================================
+# %name: scanbuildlog.pl %
+# Part of: juno_build
+#
+# %version: 1 %
+# %date_modified: Mon Feb 06 17:21:13 2006 %
+#
+# See POD text at the end of this file for usage details.
+# ==============================================================================
+
+use strict;
+use Getopt::Long;
+use Pod::Usage;
+use XML::Simple;
+use lib "$ENV{'BUILD_DRIVE'}\\epoc32\\tools";
+use Scanlog;
+use XML::Parser::Expat;
+
+my $help = 0;
+my $man = 0;
+my $unique = 0;
+my $logfilename = '';
+
+GetOptions('unique' => \$unique,
+ 'log=s' => \$logfilename,
+ 'man' => \$man,
+ 'help|?' => \$help)
+ or pod2usage(2);
+pod2usage(1) if $help;
+pod2usage(-exitstatus => 0, -verbose => 2) if $man;
+$logfilename = shift unless $logfilename;
+my $logfile;
+
+if ($logfilename)
+{
+ open(LOGFILE, $logfilename) or die("Can't open '$logfilename': $!\n");
+ $logfile = \*LOGFILE;
+}
+else
+{
+ $logfile = \*STDIN;
+}
+
+#<!DOCTYPE logfile SYSTEM "logfile.dtd">
+#<?xml-stylesheet type="text/xsl" href="logfile.xsl"?>
+print <<EOT;
+<?xml version="1.0" encoding="ascii"?>
+EOT
+print("<logfile name=\"$logfilename\">\n");
+
+my %logentry = ();
+my $phase = '';
+my $component = '';
+my $parser = new XML::Parser::Expat;
+
+while (<$logfile>)
+{
+ chomp;
+ next if Scanlog::CheckForIgnore($_);
+
+ ($phase = $1) =~ s/\\/\\\\/ and next
+ if /^=== (.+) started ... ... .. (..):(..):(..)/;
+ $phase = $1 and next if /^=== (.+) started ... ... .. (..):(..):(..)/;
+ $component = $1 and next if $phase && /^=== $phase == (\S+)/;
+ if ($phase && /^=== $phase finished ... ... .. (..):(..):(..)/)
+ {
+ $component = '';
+ next;
+ }
+
+ my $logrec = {line => $.,
+ content => $parser->xml_escape($_)};
+
+ $logrec->{severity} = 'info'
+ if Scanlog::CheckForMigrationNotes($_)
+ or Scanlog::CheckForRemarks($_);
+
+ if ( Scanlog::CheckForErrors($_)
+ or Scanlog::CheckForNotBuilt($_)
+ or Scanlog::CheckForMissing($_) )
+ {
+ $logrec->{severity} = 'error';
+ }
+ $logrec->{severity} = 'warn' if Scanlog::CheckForWarnings($_);
+ next unless $logrec->{severity};
+
+ print XMLout($logrec, rootname => 'logentry', noescape => 0);
+}
+
+print("</logfile>\n");
+
+__END__
+
+=head1 NAME
+
+scanbuildlog - Scan EBS build log for errors and warnings
+
+=head1 SYNOPSIS
+
+perl scanbuildlog.pl [-h] | -l <log file>
+
+=head1 OPTIONS
+
+=over 8
+
+=item B<-help>
+
+Print a brief help message and exits.
+
+=item B<-man>
+
+Prints the manual page and exits.
+
+=item B<-l>
+
+Specify the log file to parse.
+
+=back
+
+=head1 DESCRIPTION
+
+Prints out a summary of the errors, warnings and informational
+messages found in the log file in an XML format conforming to the
+following DTD:
+
+ <!ELEMENT logfile (logentry*)>
+ <!ELEMENT logentry (#PCDATA)>
+ <!ATTLIST logentry
+ severity (error|warn|info) #REQUIRED
+ line CDATA #REQUIRED
+ errfile CDATA #IMPLIED
+ errline CDATA #IMPLIED>
+
+=head1 SEE ALSO
+
+=cut