find-build-errors revision 919
ee9c9500ab13c1093fc3feaf2aa5a0d330d0bfadKay Sievers#! /usr/perl5/bin/perl -w
19aadacf92ad86967ffb678e37b2ff9e83cb9480Jan Engelhardt
cff452c7e974db5053cdbd0d7bbbab2e3b4c91b9Kay Sievers#
cff452c7e974db5053cdbd0d7bbbab2e3b4c91b9Kay Sievers# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
cff452c7e974db5053cdbd0d7bbbab2e3b4c91b9Kay Sievers# Use is subject to license terms.
cff452c7e974db5053cdbd0d7bbbab2e3b4c91b9Kay Sievers#
f957632b960a0a42999b38ded7089fa602b41745Kay Sievers# Permission is hereby granted, free of charge, to any person obtaining a
f957632b960a0a42999b38ded7089fa602b41745Kay Sievers# copy of this software and associated documentation files (the "Software"),
f957632b960a0a42999b38ded7089fa602b41745Kay Sievers# to deal in the Software without restriction, including without limitation
f957632b960a0a42999b38ded7089fa602b41745Kay Sievers# the rights to use, copy, modify, merge, publish, distribute, sublicense,
a40593a0d0d740efa387e35411e1e456a6c5aba7Lennart Poettering# and/or sell copies of the Software, and to permit persons to whom the
20ffc4c4a9226b0e45cc02ad9c0108981626c0bbKay Sievers# Software is furnished to do so, subject to the following conditions:
19aadacf92ad86967ffb678e37b2ff9e83cb9480Jan Engelhardt#
ea92ae33e0fbbf8a98cd2e08ca5a850d83d57faeMaciej Wereski# The above copyright notice and this permission notice (including the next
ea92ae33e0fbbf8a98cd2e08ca5a850d83d57faeMaciej Wereski# paragraph) shall be included in all copies or substantial portions of the
04ac799283f517672a5424e7c5bf066cfa4ca020Zbigniew Jędrzejewski-Szmek# Software.
04ac799283f517672a5424e7c5bf066cfa4ca020Zbigniew Jędrzejewski-Szmek#
04ac799283f517672a5424e7c5bf066cfa4ca020Zbigniew Jędrzejewski-Szmek# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
04ac799283f517672a5424e7c5bf066cfa4ca020Zbigniew Jędrzejewski-Szmek# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
7b4da18c1717f811bae67ea3d39290495857c03eLennart Poettering# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
81d112a8f0522a09fcfe317f420363a2b728137cLennart Poettering# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering# DEALINGS IN THE SOFTWARE.
466784c8710e5cb0e0b86a16506d992d7ec5b619Kay Sievers#
55d32caf94d8df547ca763be52b0c35bb6388606Lennart Poettering#
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering
bafb15bab99887d1b6b8a35136531bac6c3876a6Lennart Poetteringrequire 5.005; # minimal Perl version required
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poetteringuse strict; #
bafb15bab99887d1b6b8a35136531bac6c3876a6Lennart Poetteringuse diagnostics; #
eb124a97fb72d076014253b1acde69d428f15ecfLennart Poetteringuse File::Spec; # pathname manipulation routines
154ff088d371bee5651eaa2bc9bde8a34c185656Lennart Poetteringuse File::stat; # Named results from stat() function
b6741478e7661c7e580e5dcfd6a6fccd1899c1d0Lennart Poetteringuse English qw( -nomatchvars );
b6741478e7661c7e580e5dcfd6a6fccd1899c1d0Lennart Poettering
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poetteringmy $default_logfile = 'buildit-XW';
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poetteringmy $default_logpath = 'log/' . $default_logfile;
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poetteringmy $default_pkglogpath = 'proto-packages/logs/package_build';
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poetteringmy $logfile;
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poetteringmy $pkglog;
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poetteringmy $pkgfailed;
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poetteringif (defined $ARGV[0]) {
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering if (-d $ARGV[0]) {
0bee65f0622c4faa8ac8ae771cc0c8a936dfa284Lennart Poettering $logfile = $ARGV[0] . '/' . $default_logpath;
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering } elsif ($ARGV[0] =~ m{/package_build$}ms) {
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering $pkglog = $ARGV[0];
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering } else {
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering $logfile = $ARGV[0];
ebcf1f97de4f6b1580ae55eb56b1a3939fe6b602Lennart Poettering }
08cd15525450ff2c2ac814a58930f6d82284a1baLennart Poettering} elsif ( -f $default_logfile ) {
08cd15525450ff2c2ac814a58930f6d82284a1baLennart Poettering $logfile = $default_logfile;
2e41a51ea4cf68f67d6d1e71482d95d9d50091b3Lennart Poettering} elsif ( -f $default_logpath ) {
718db96199eb307751264e4163555662c9a389faLennart Poettering $logfile = $default_logpath;
718db96199eb307751264e4163555662c9a389faLennart Poettering} else {
718db96199eb307751264e4163555662c9a389faLennart Poettering my @dirtree = File::Spec->splitdir(
718db96199eb307751264e4163555662c9a389faLennart Poettering File::Spec->rel2abs(File::Spec->curdir()));
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering
718db96199eb307751264e4163555662c9a389faLennart Poettering # climb the tree, removing one parent at a time to find the logfile
718db96199eb307751264e4163555662c9a389faLennart Poettering while (scalar(@dirtree) > 0) {
718db96199eb307751264e4163555662c9a389faLennart Poettering $logfile = File::Spec->catfile( @dirtree, $default_logpath);
966204e010ed432a1d7a0481d41a326d8ec7b0c8Lennart Poettering last if ( -f $logfile);
966204e010ed432a1d7a0481d41a326d8ec7b0c8Lennart Poettering# print "$logfile not found\n";
94676f3e9352cbf1f72e0a512ee0d2ed83ff676dLennart Poettering pop @dirtree;
6fd4d0209827e5c3e52fa8c7144852f550f8f95cLennart Poettering }
ced4d06784dbb19666688947901961f949f2aa6dLennart Poettering
ced4d06784dbb19666688947901961f949f2aa6dLennart Poettering if (scalar(@dirtree) == 0) {
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering die "$default_logfile not found, please specify path to log\n";
416446221d905b6815175dc4d525d27f8ae43d1bLennart Poettering }
416446221d905b6815175dc4d525d27f8ae43d1bLennart Poettering}
416446221d905b6815175dc4d525d27f8ae43d1bLennart Poettering
9db76355212de5eb7985829d352183d3bdfb56d5Lennart Poetteringif (defined $logfile) {
9db76355212de5eb7985829d352183d3bdfb56d5Lennart Poettering open my $LOGFILE, '<', $logfile
baa89da40a1d42242c9c62603501ada7e9e52613Lennart Poettering or die "Can't open '$logfile': $OS_ERROR";
baa89da40a1d42242c9c62603501ada7e9e52613Lennart Poettering
7f79cd7109a60810140a045cc725291fc5515264Lennart Poettering print "Scanning $logfile for error messages...\n\n";
0aafd43d235982510d1c40564079f7bcec0c7c19Lennart Poettering
19aadacf92ad86967ffb678e37b2ff9e83cb9480Jan Engelhardt my @steplines;
19aadacf92ad86967ffb678e37b2ff9e83cb9480Jan Engelhardt my $found_error = 0;
df5f6971e6e15b4632884916c71daa076c8bae96Lennart Poettering
df5f6971e6e15b4632884916c71daa076c8bae96Lennart Poettering while (my $l = <$LOGFILE>) {
19aadacf92ad86967ffb678e37b2ff9e83cb9480Jan Engelhardt # Finished if we see the end line
982e44dbc3e70c97e83464a30354b80973d52b41Lennart Poettering last if $l =~ m{Finished building the X Window System Consolidation}ms;
982e44dbc3e70c97e83464a30354b80973d52b41Lennart Poettering
982e44dbc3e70c97e83464a30354b80973d52b41Lennart Poettering # Clear saved lines for each new module/subdir
fcba531ed4c6e6f8f21d8ca4e3a56e3162b1c578Lennart Poettering if (($l =~ m{^\#\# making \S+ in \S+\.\.\.$}ms) || # open-src pattern
fcba531ed4c6e6f8f21d8ca4e3a56e3162b1c578Lennart Poettering ($l =~ m{^dmake: Warning: Target `subdirs' not remade because of errors}ms) ||
8b8f259170e35b93e6c6d1757cb8b835bbdaa40cZbigniew Jędrzejewski-Szmek ($l =~ m{^\S+ing( \S+)* in \S+\.\.\.$}ms)) { # xc pattern
8b8f259170e35b93e6c6d1757cb8b835bbdaa40cZbigniew Jędrzejewski-Szmek @steplines = ();
e1b7e7ec9b34ae6ae54a4c8084395cbf2bfe9960Lennart Poettering $found_error = 0;
6aaa8c2f783cd1b3ac27c5ce40625d032e7e3d71Zbigniew Jędrzejewski-Szmek }
c3bb87dbab8b79bb9253407cb5b7f3e6fe8db395Lennart Poettering
e1b7e7ec9b34ae6ae54a4c8084395cbf2bfe9960Lennart Poettering # If we already hit an error, skip the rest of this module
18d4e7c26e7806ac363d19989df7144d5058ce41Lennart Poettering next if ($found_error != 0);
bdeeb6b543a2a2d0a494f17b85f1498859cdfc2fLennart Poettering
bdeeb6b543a2a2d0a494f17b85f1498859cdfc2fLennart Poettering # Add this line to the saved output, combine with previous if previous
bdeeb6b543a2a2d0a494f17b85f1498859cdfc2fLennart Poettering # ended with an \
bdeeb6b543a2a2d0a494f17b85f1498859cdfc2fLennart Poettering if (($#steplines >= 0) && ($steplines[$#steplines] =~ m{\\\Z}ms)) {
9444b1f20e311f073864d81e913bd4f32fe95cfdLennart Poettering $steplines[$#steplines] .= $l;
69af45035913e7119cffd94c542bd3039600e45dZbigniew Jędrzejewski-Szmek } else {
9444b1f20e311f073864d81e913bd4f32fe95cfdLennart Poettering push @steplines, $l;
466784c8710e5cb0e0b86a16506d992d7ec5b619Kay Sievers }
466784c8710e5cb0e0b86a16506d992d7ec5b619Kay Sievers
9444b1f20e311f073864d81e913bd4f32fe95cfdLennart Poettering # Skip ahead to next line if this line ends with \
19aadacf92ad86967ffb678e37b2ff9e83cb9480Jan Engelhardt next if ($l =~ m{\\\Z}ms);
1f263d4dc23b9807ac6138eb5014d3d94c5fe51aLennart Poettering
4e09014daf8f98584b3f15e64e93bed232e70a6bLennart Poettering # Found a new error?
4e09014daf8f98584b3f15e64e93bed232e70a6bLennart Poettering if (($l =~ m{\*\*\* }ms) || ($l =~ m{^make: Fatal error}ms)) {
4e09014daf8f98584b3f15e64e93bed232e70a6bLennart Poettering $found_error = 1;
eb01ba5de14859d7a94835ab9299de40132d549aLennart Poettering
eb01ba5de14859d7a94835ab9299de40132d549aLennart Poettering # Print section header
86312ab8de59c1066d6d2b456f3a9106ce3e0991Lennart Poettering print $steplines[0], "\n";
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering my $lastmake;
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering my $lastcommand = 1;
bee7e928990fd8a0c5909c2022a2b9eede557c81Lennart Poettering my $lastplus = 0;
bee7e928990fd8a0c5909c2022a2b9eede557c81Lennart Poettering
80caea6cc72ebd311a311b1527cc6b87201c13bfLennart Poettering # scan back to figure out how far back to print
0a825b5cd4adb4d9dadfb2e237cdceae09399804Lennart Poettering for my $ln (1..($#steplines - 1)) {
0a825b5cd4adb4d9dadfb2e237cdceae09399804Lennart Poettering my $sl = $steplines[$ln];
0a825b5cd4adb4d9dadfb2e237cdceae09399804Lennart Poettering
452de75e5b8b1cff207243848f4e5de68620554cLennart Poettering # print "lastmake: $lastmake, lastcom: $lastcommand, lastplus: $lastplus, line #$ln: $sl\n";
df98a87ba389bdfc0359beedf47557411f3af434Lennart Poettering if ($sl =~ m{\b(make|dmake|gmake)\b}ms) {
df98a87ba389bdfc0359beedf47557411f3af434Lennart Poettering $lastmake = $ln;
df98a87ba389bdfc0359beedf47557411f3af434Lennart Poettering }
df98a87ba389bdfc0359beedf47557411f3af434Lennart Poettering
bee7e928990fd8a0c5909c2022a2b9eede557c81Lennart Poettering if ($sl =~ m{\breturned\b}ms) {
0058679911db806b6db2fa445a1ce879a436c9d6Lennart Poettering # don't treat this as a command
0058679911db806b6db2fa445a1ce879a436c9d6Lennart Poettering } elsif ($sl =~ m{\b(cc|gcc|CC|g\+\+|ld|gpatch|libtool|GEN|CCLD)\s+}ms) {
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering if ($sl !~ m{usage:}) {
f38afcd0c7f558ca5bf0854b42f8c6954f8ad7f3Lennart Poettering $lastcommand = $ln;
12179984a38fe74581333fbcdc11c822d81f505fLennart Poettering }
eb01ba5de14859d7a94835ab9299de40132d549aLennart Poettering } elsif ($sl =~ m{^\+ }ms) {
154ff088d371bee5651eaa2bc9bde8a34c185656Lennart Poettering # print from start of shell's set -x output, not end
154ff088d371bee5651eaa2bc9bde8a34c185656Lennart Poettering if ($lastplus != ($ln - 1)) {
154ff088d371bee5651eaa2bc9bde8a34c185656Lennart Poettering $lastcommand = $ln;
154ff088d371bee5651eaa2bc9bde8a34c185656Lennart Poettering }
d686f034c3b9021e07faefe172ee660abd952871Lennart Poettering $lastplus = $ln;
d686f034c3b9021e07faefe172ee660abd952871Lennart Poettering } elsif ($lastplus == ($ln - 1)) {
d686f034c3b9021e07faefe172ee660abd952871Lennart Poettering $lastcommand = $ln;
69af45035913e7119cffd94c542bd3039600e45dZbigniew Jędrzejewski-Szmek }
19aa7c4fef4a3f1dfc6d9980574ca220a6a40a71Lennart Poettering }
69af45035913e7119cffd94c542bd3039600e45dZbigniew Jędrzejewski-Szmek
e8a7a315391a6a07897122725cd707f4e9ce63d7Lennart Poettering # print "lastmake: $lastmake, lastcommand: $lastcommand\n";
461bd8e47cafacfcd38389e7558330bfb6e902adLennart Poettering if ($lastmake && ($lastmake < $lastcommand)) {
461bd8e47cafacfcd38389e7558330bfb6e902adLennart Poettering print $steplines[$lastmake];
461bd8e47cafacfcd38389e7558330bfb6e902adLennart Poettering }
ab8e074ce25b9947314c69e17afe1bd2527ee26dLennart Poettering
ab8e074ce25b9947314c69e17afe1bd2527ee26dLennart Poettering for my $ln ($lastcommand..$#steplines) {
ab8e074ce25b9947314c69e17afe1bd2527ee26dLennart Poettering print $steplines[$ln];
ab8e074ce25b9947314c69e17afe1bd2527ee26dLennart Poettering }
b454b11220e87add6d0f011695c7912b009c853dLennart Poettering print "\n", '-'x78, "\n";
b454b11220e87add6d0f011695c7912b009c853dLennart Poettering }
b454b11220e87add6d0f011695c7912b009c853dLennart Poettering }
b454b11220e87add6d0f011695c7912b009c853dLennart Poettering
06db8540cdfc8259423ed90e7352dbc1d71eccd9Lennart Poettering my $printme = 0;
06db8540cdfc8259423ed90e7352dbc1d71eccd9Lennart Poettering
4ff49cb63075aba646b578f2516b37a8dfd5a65bLennart Poettering # end of file stuff
4ff49cb63075aba646b578f2516b37a8dfd5a65bLennart Poettering while (my $l = <$LOGFILE>) {
fff87a35d9e26c0d4ea41273a963c0eb20e18da4Zbigniew Jędrzejewski-Szmek if ($l =~ m{^Runtime: }) {
fff87a35d9e26c0d4ea41273a963c0eb20e18da4Zbigniew Jędrzejewski-Szmek print $l;
fff87a35d9e26c0d4ea41273a963c0eb20e18da4Zbigniew Jędrzejewski-Szmek next;
b8b4d3dddc7611dce3bf28004b0375d661120c62Lennart Poettering }
b8b4d3dddc7611dce3bf28004b0375d661120c62Lennart Poettering
b8b4d3dddc7611dce3bf28004b0375d661120c62Lennart Poettering # Look for package build results
3df82d5a8cdc510f518fd5e234ccb3233b748719Lennart Poettering if ($l =~ m{^result log is in (.*/package_build)$}ms) {
3df82d5a8cdc510f518fd5e234ccb3233b748719Lennart Poettering $pkglog = $1;
3df82d5a8cdc510f518fd5e234ccb3233b748719Lennart Poettering } elsif ($l =~ m{^Packages built:}ms) {
3df82d5a8cdc510f518fd5e234ccb3233b748719Lennart Poettering print $l;
b5c03638d48c07aa0eaf13b5f54000c7133e1883Lennart Poettering } elsif ($l =~ m{^Packages failed:\s+(\d+)}ms) {
b5c03638d48c07aa0eaf13b5f54000c7133e1883Lennart Poettering $pkgfailed = $1;
b5c03638d48c07aa0eaf13b5f54000c7133e1883Lennart Poettering print $l;
b5c03638d48c07aa0eaf13b5f54000c7133e1883Lennart Poettering }
b5c03638d48c07aa0eaf13b5f54000c7133e1883Lennart Poettering # print lines where messages about COPYING file errors appear
eece8c6fb5f4d354dcef6fd369e876c4f3a3f163Lennart Poettering # between "Copying package descriptions" & "Building packages"
eece8c6fb5f4d354dcef6fd369e876c4f3a3f163Lennart Poettering elsif ($l =~ m{Copying package descriptions}) {
eece8c6fb5f4d354dcef6fd369e876c4f3a3f163Lennart Poettering $printme = 1;
356ce9915ab1a4a1e6dc26954df34936a69e7c12Lennart Poettering } elsif ($l =~ m{Building packages}) {
356ce9915ab1a4a1e6dc26954df34936a69e7c12Lennart Poettering $printme = 0;
356ce9915ab1a4a1e6dc26954df34936a69e7c12Lennart Poettering }
356ce9915ab1a4a1e6dc26954df34936a69e7c12Lennart Poettering elsif ($printme == 1) {
3b953d68c628c6ae70adba871719ac0f16083b51Josh Triplett print $l;
3b953d68c628c6ae70adba871719ac0f16083b51Josh Triplett }
3b953d68c628c6ae70adba871719ac0f16083b51Josh Triplett }
3b953d68c628c6ae70adba871719ac0f16083b51Josh Triplett
3b953d68c628c6ae70adba871719ac0f16083b51Josh Triplett close($LOGFILE);
09f727eebd87661f263d3c2c1e0de7b7771acd40Lennart Poettering}
09f727eebd87661f263d3c2c1e0de7b7771acd40Lennart Poettering
09f727eebd87661f263d3c2c1e0de7b7771acd40Lennart Poetteringsub check_pkglog {
795607b22308f5b92073b012e43be1892fdd97c0Lennart Poettering my ($pl) = @_;
795607b22308f5b92073b012e43be1892fdd97c0Lennart Poettering
795607b22308f5b92073b012e43be1892fdd97c0Lennart Poettering if ( -f $pl ) {
795607b22308f5b92073b012e43be1892fdd97c0Lennart Poettering my $logfile_sb = stat($logfile);
795607b22308f5b92073b012e43be1892fdd97c0Lennart Poettering my $pkglog_sb = stat($pl);
0be8342c04bbf129b4a21e5073eacccbbce4e896Lennart Poettering
0be8342c04bbf129b4a21e5073eacccbbce4e896Lennart Poettering if ($logfile_sb > $pkglog_sb) {
0be8342c04bbf129b4a21e5073eacccbbce4e896Lennart Poettering # Haven't rebuilt packages since last build, so no point reporting errors
0be8342c04bbf129b4a21e5073eacccbbce4e896Lennart Poettering undef $pl;
0be8342c04bbf129b4a21e5073eacccbbce4e896Lennart Poettering }
e5ec62c56963d997edaffa904af5dc45dac23988Lennart Poettering } else {
54c31a79f72ff57ac8eba089acacc4ab482b745dLennart Poettering undef $pl;
826872b61e4857dfffe63ba84e2b005623baecd6Lennart Poettering }
826872b61e4857dfffe63ba84e2b005623baecd6Lennart Poettering
54c31a79f72ff57ac8eba089acacc4ab482b745dLennart Poettering return $pl;
826872b61e4857dfffe63ba84e2b005623baecd6Lennart Poettering}
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering# No packaging log found in build log, try to guess where it is
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poetteringif (!defined($pkglog)) {
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering my $path_to_check = $logfile;
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering $path_to_check =~ s{$default_logpath}{$default_pkglogpath}ms;
3679d1126bae52e02f6cd60fca196f616b9e660dLennart Poettering
cbb7712189527f9f483321607e44c4ead3dd11b8Lennart Poettering $pkglog = check_pkglog($path_to_check);
cbb7712189527f9f483321607e44c4ead3dd11b8Lennart Poettering
d01a73b6396f57792113c1b5df6e8492fc703e5eLennart Poettering if (!defined($pkglog)) {
d01a73b6396f57792113c1b5df6e8492fc703e5eLennart Poettering $path_to_check = $logfile;
f8aeee1f1fe432924b355f48f01f09c9a552ed97Lennart Poettering $path_to_check =~ s{($default_logpath).*$}{$default_pkglogpath}ms;
f8aeee1f1fe432924b355f48f01f09c9a552ed97Lennart Poettering
f8aeee1f1fe432924b355f48f01f09c9a552ed97Lennart Poettering $pkglog = check_pkglog($path_to_check);
f8aeee1f1fe432924b355f48f01f09c9a552ed97Lennart Poettering }
f8aeee1f1fe432924b355f48f01f09c9a552ed97Lennart Poettering}
356ce9915ab1a4a1e6dc26954df34936a69e7c12Lennart Poettering
490b7e47093d491a2bdb1084fe92b796f4e07eefLennart Poetteringif ((!defined($pkgfailed) || ($pkgfailed > 0)) && defined($pkglog)) {
81d112a8f0522a09fcfe317f420363a2b728137cLennart Poettering open my $PKGLOG, '<', $pkglog
490b7e47093d491a2bdb1084fe92b796f4e07eefLennart Poettering or die "Can't open '$pkglog': $OS_ERROR";
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering my @pkglines;
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering while (my $l = <$PKGLOG>) {
466784c8710e5cb0e0b86a16506d992d7ec5b619Kay Sievers # Clear saved lines for each new package
e41814846c19a48f4490169d82e359e005c4db45Lennart Poettering if ($l =~ m{^[*]+ Making the \S+ package [*]+$}ms) {
c0fe5db522b52f27e030655ce2c03e05cbbc1558Kay Sievers @pkglines = ();
e9fd44b728ff1fc0d1f24fccb87a767f6865df27Lennart Poettering }
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering
e9fd44b728ff1fc0d1f24fccb87a767f6865df27Lennart Poettering # Warnings we can ignore
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering next if $l =~ m{^WARNING: parameter \<PSTAMP\> set}ms;
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering next if $l =~ m{^WARNING: parameter \<CLASSES\> set to "none"}ms;
3040728b6691ea2e9df3a2060e2d49a792bbaedaLennart Poettering
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering push @pkglines, $l;
8ed206517c2be381324ac5832bf34cc14024270eLennart Poettering
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering if (($l =~ m{(Packaging was not successful.|was not found ; skipping)}ms)
e6c6e7afffa80ad74efdb1ddfa815294624f1608Lennart Poettering || ($l =~ m{^WARNING: }ms)) {
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering print join('', @pkglines);
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering @pkglines = ();
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering }
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering }
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering close($PKGLOG);
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering}
b44be3ecf6326c27aa2c6c6d1fe34e22e22592a0Lennart Poettering