find-build-errors revision 810
a4544a5a0e622ef69e38641f87ab1b5685e05911Phill Cunnington#! /usr/perl5/bin/perl -w
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Use is subject to license terms.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# Permission is hereby granted, free of charge, to any person obtaining a
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# copy of this software and associated documentation files (the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# "Software"), to deal in the Software without restriction, including
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# without limitation the rights to use, copy, modify, merge, publish,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# distribute, and/or sell copies of the Software, and to permit persons
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# to whom the Software is furnished to do so, provided that the above
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# copyright notice(s) and this permission notice appear in all copies of
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# the Software and that both the above copyright notice(s) and this
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# permission notice appear in supporting documentation.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
a4544a5a0e622ef69e38641f87ab1b5685e05911Phill Cunnington# Except as contained in this notice, the name of a copyright holder
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# shall not be used in advertising or otherwise to promote the sale, use
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# or other dealings in this Software without prior written authorization
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster# of the copyright holder.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster#
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna# ident "@(#)find-build-errors 1.4 09/10/13 SMI"
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna#
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna
88f608b8855a99b19653376900fc5f234b7e771cDavid Lunarequire 5.005; # minimal Perl version required
88f608b8855a99b19653376900fc5f234b7e771cDavid Lunause strict; #
88f608b8855a99b19653376900fc5f234b7e771cDavid Lunause diagnostics; #
88f608b8855a99b19653376900fc5f234b7e771cDavid Lunause File::Spec; # pathname manipulation routines
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosteruse File::stat; # Named results from stat() function
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosteruse English qw( -nomatchvars );
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fostermy $default_logfile = 'buildit-XW';
636f2dcf39bd5b102f4204903069609d12a7dcd6jeff.schenkmy $default_logpath = 'log/' . $default_logfile;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fostermy $default_pkglogpath = 'proto-packages/logs/package_build';
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fostermy $logfile;
88f608b8855a99b19653376900fc5f234b7e771cDavid Lunamy $pkglog;
88f608b8855a99b19653376900fc5f234b7e771cDavid Lunamy $pkgfailed;
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterif (defined $ARGV[0]) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (-d $ARGV[0]) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $logfile = $ARGV[0] . '/' . $default_logpath;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } elsif ($ARGV[0] =~ m{/package_build$}ms) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $pkglog = $ARGV[0];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $logfile = $ARGV[0];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster} elsif ( -f $default_logfile ) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $logfile = $default_logfile;
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna} elsif ( -f $default_logpath ) {
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna $logfile = $default_logpath;
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna} else {
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna my @dirtree = File::Spec->splitdir(
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna File::Spec->rel2abs(File::Spec->curdir()));
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna # climb the tree, removing one parent at a time to find the logfile
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna while (scalar(@dirtree) > 0) {
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna $logfile = File::Spec->catfile( @dirtree, $default_logpath);
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna last if ( -f $logfile);
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna# print "$logfile not found\n";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster pop @dirtree;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
7b8fd79c6177846da551bb2cd5e1579b7c650a3cDavid Luna if (scalar(@dirtree) == 0) {
7b8fd79c6177846da551bb2cd5e1579b7c650a3cDavid Luna die "$default_logfile not found, please specify path to log\n";
dcaf67650b5323dbf22121c7bf12be9be903f8c5David Luna }
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna}
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna
fb3b3a01405c222ae1fdbbe6f5c1d4aa696195bbDavid Lunaif (defined $logfile) {
fb3b3a01405c222ae1fdbbe6f5c1d4aa696195bbDavid Luna open my $LOGFILE, '<', $logfile
fb3b3a01405c222ae1fdbbe6f5c1d4aa696195bbDavid Luna or die "Can't open '$logfile': $OS_ERROR";
fb3b3a01405c222ae1fdbbe6f5c1d4aa696195bbDavid Luna
fb3b3a01405c222ae1fdbbe6f5c1d4aa696195bbDavid Luna print "Scanning $logfile for error messages...\n\n";
fb3b3a01405c222ae1fdbbe6f5c1d4aa696195bbDavid Luna
fb3b3a01405c222ae1fdbbe6f5c1d4aa696195bbDavid Luna my @steplines;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna my $found_error = 0;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna while (my $l = <$LOGFILE>) {
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna # Finished if we see the end line
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna last if $l =~ m{Finished building the X Window System Consolidation}ms;
87d68743726585ee101ba2e7be2cf06cd34ebb80Neil Madden
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # Clear saved lines for each new module/subdir
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (($l =~ m{^\#\# making \S+ in \S+\.\.\.$}ms) || # open-src pattern
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ($l =~ m{^dmake: Warning: Target `subdirs' not remade because of errors}ms) ||
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ($l =~ m{^\S+ing( \S+)* in \S+\.\.\.$}ms)) { # xc pattern
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster @steplines = ();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $found_error = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # If we already hit an error, skip the rest of this module
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster next if ($found_error != 0);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # Add this line to the saved output, combine with previous if previous
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # ended with an \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (($#steplines >= 0) && ($steplines[$#steplines] =~ m{\\\Z}ms)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $steplines[$#steplines] .= $l;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster push @steplines, $l;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # Skip ahead to next line if this line ends with \
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster next if ($l =~ m{\\\Z}ms);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # Found a new error?
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (($l =~ m{\*\*\* }ms) || ($l =~ m{^make: Fatal error}ms)) {
7b8fd79c6177846da551bb2cd5e1579b7c650a3cDavid Luna $found_error = 1;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # Print section header
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster print $steplines[0], "\n";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster my $lastmake;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster my $lastcommand = 1;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster my $lastplus = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # scan back to figure out how far back to print
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for my $ln (1..($#steplines - 1)) {
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna my $sl = $steplines[$ln];
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna
fb3b3a01405c222ae1fdbbe6f5c1d4aa696195bbDavid Luna # print "lastmake: $lastmake, lastcom: $lastcommand, lastplus: $lastplus, line #$ln: $sl\n";
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna if ($sl =~ m{\b(make|dmake|gmake)\b}ms) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $lastmake = $ln;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
fb3b3a01405c222ae1fdbbe6f5c1d4aa696195bbDavid Luna if ($sl =~ m{\breturned\b}ms) {
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna # don't treat this as a command
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } elsif ($sl =~ m{\b(cc|gcc|CC|g\+\+|ld|gpatch|libtool|GEN|CCLD)\s+}ms) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ($sl !~ m{usage:}) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $lastcommand = $ln;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } elsif ($sl =~ m{^\+ }ms) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # print from start of shell's set -x output, not end
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ($lastplus != ($ln - 1)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $lastcommand = $ln;
1d407e39b7d8f68d9a2b1e178f35fab037d9835aRobert Wapshott }
1d407e39b7d8f68d9a2b1e178f35fab037d9835aRobert Wapshott $lastplus = $ln;
1d407e39b7d8f68d9a2b1e178f35fab037d9835aRobert Wapshott } elsif ($lastplus == ($ln - 1)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $lastcommand = $ln;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # print "lastmake: $lastmake, lastcommand: $lastcommand\n";
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna if ($lastmake && ($lastmake < $lastcommand)) {
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna print $steplines[$lastmake];
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna }
fb3b3a01405c222ae1fdbbe6f5c1d4aa696195bbDavid Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna for my $ln ($lastcommand..$#steplines) {
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna print $steplines[$ln];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster print "\n", '-'x78, "\n";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster my $printme = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # end of file stuff
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while (my $l = <$LOGFILE>) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ($l =~ m{^Runtime: }) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster print $l;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster next;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # Look for package build results
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ($l =~ m{^result log is in (.*/package_build)$}ms) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $pkglog = $1;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } elsif ($l =~ m{^Packages built:}ms) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster print $l;
7b8fd79c6177846da551bb2cd5e1579b7c650a3cDavid Luna } elsif ($l =~ m{^Packages failed:\s+(\d+)}ms) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $pkgfailed = $1;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster print $l;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # print lines where messages about COPYING file errors appear
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # between "Copying package descriptions" & "Building packages"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster elsif ($l =~ m{Copying package descriptions}) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $printme = 1;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } elsif ($l =~ m{Building packages}) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $printme = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster elsif ($printme == 1) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster print $l;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster close($LOGFILE);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fostersub check_pkglog {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster my ($pl) = @_;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ( -f $pl ) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster my $logfile_sb = stat($logfile);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster my $pkglog_sb = stat($pl);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ($logfile_sb > $pkglog_sb) {
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna # Haven't rebuilt packages since last build, so no point reporting errors
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster undef $pl;
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna }
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna } else {
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna undef $pl;
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna }
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna return $pl;
88f608b8855a99b19653376900fc5f234b7e771cDavid Luna}
fb3b3a01405c222ae1fdbbe6f5c1d4aa696195bbDavid Luna
fb3b3a01405c222ae1fdbbe6f5c1d4aa696195bbDavid Luna# No packaging log found in build log, try to guess where it is
fb3b3a01405c222ae1fdbbe6f5c1d4aa696195bbDavid Lunaif (!defined($pkglog)) {
fb3b3a01405c222ae1fdbbe6f5c1d4aa696195bbDavid Luna my $path_to_check = $logfile;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna $path_to_check =~ s{$default_logpath}{$default_pkglogpath}ms;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna $pkglog = check_pkglog($path_to_check);
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!defined($pkglog)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $path_to_check = $logfile;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster $path_to_check =~ s{($default_logpath).*$}{$default_pkglogpath}ms;
7b8fd79c6177846da551bb2cd5e1579b7c650a3cDavid Luna
7b8fd79c6177846da551bb2cd5e1579b7c650a3cDavid Luna $pkglog = check_pkglog($path_to_check);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterif ((!defined($pkgfailed) || ($pkgfailed > 0)) && defined($pkglog)) {
7b8fd79c6177846da551bb2cd5e1579b7c650a3cDavid Luna open my $PKGLOG, '<', $pkglog
7b8fd79c6177846da551bb2cd5e1579b7c650a3cDavid Luna or die "Can't open '$pkglog': $OS_ERROR";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster my @pkglines;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while (my $l = <$PKGLOG>) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # Clear saved lines for each new package
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ($l =~ m{^[*]+ Making the \S+ package [*]+$}ms) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster @pkglines = ();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster # Warnings we can ignore
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster next if $l =~ m{^WARNING: parameter \<PSTAMP\> set}ms;
7b8fd79c6177846da551bb2cd5e1579b7c650a3cDavid Luna next if $l =~ m{^WARNING: parameter \<CLASSES\> set to "none"}ms;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster push @pkglines, $l;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
7b8fd79c6177846da551bb2cd5e1579b7c650a3cDavid Luna if (($l =~ m{(Packaging was not successful.|was not found ; skipping)}ms)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster || ($l =~ m{^WARNING: }ms)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster print join('', @pkglines);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster @pkglines = ();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster close($PKGLOG);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster