version 1.5, 2009/01/09 21:45:27
|
version 1.6, 2010/10/04 23:45:04
|
|
|
#!/usr/bin/perl -- |
#!/home/jsoc/bin/linux_x86_64/perl -w |
| |
use strict; | use strict; |
use warnings; | use warnings; |
use Data::Dumper; | use Data::Dumper; |
| |
|
use constant kNContext => 5; |
|
|
my($TESTERR) = "no"; | my($TESTERR) = "no"; |
my($JSOC_DEV) = "jsoc_dev\@sun.stanford.edu"; | my($JSOC_DEV) = "jsoc_dev\@sun.stanford.edu"; |
#my($JSOC_DEV) = "arta\@sun.stanford.edu"; # for testing purposes | #my($JSOC_DEV) = "arta\@sun.stanford.edu"; # for testing purposes |
|
|
`cd $ROOTDIR/JSOC; make universe -k >& $MAKELOG`; | `cd $ROOTDIR/JSOC; make universe -k >& $MAKELOG`; |
} | } |
| |
open FH, "cd $ROOTDIR/JSOC; \(tail -n 4 $MAKELOG | grep Error\) |" || die "Can't open log file: $!\n"; |
open(FH, "<$ROOTDIR/JSOC/$MAKELOG") || die "Can't open log file: $!\n"; |
my @line = <FH>; |
|
my($oneline); |
my(@lines) = <FH>; |
my($prevline); |
my($linenum); |
|
my($firstidx); |
|
my(@errslice); |
my($errmsg) = ""; | my($errmsg) = ""; |
my($nerrlines); |
|
my($date); | my($date); |
|
my($chomped); |
| |
close FH; |
close(FH); |
if (scalar(@line)) { |
|
$nerrlines = 0; |
if ($#lines >= 0) |
$date = `date`; |
{ |
$errmsg = "${errmsg}JSOC Build Failed on ${date}:\n"; |
# There was a build error. |
$nerrlines++; |
# Go through each line, looking for recognized error strings |
open FH, "$ROOTDIR/JSOC/$MAKELOG"; |
$linenum = 0; |
while($oneline = <FH>) |
$firstidx = 0; |
|
foreach my $aline (@lines) |
{ | { |
chomp($oneline); |
$chomped = $aline; |
if ($oneline =~ /:\s\S*\serror:\s/) |
chomp($chomped); |
|
|
|
if (RecognizedError($chomped)) |
{ | { |
$errmsg = "${errmsg}${oneline}\n"; |
# Collect kNContext lines before error |
$nerrlines++; |
if ($linenum - kNContext >= 0) |
$oneline = <FH>; |
|
if ($oneline) |
|
{ | { |
$errmsg = "${errmsg}${oneline}\n"; |
$firstidx = $linenum - kNContext; |
$nerrlines++; |
|
} | } |
$oneline = <FH>; |
|
if ($oneline) |
@errslice = @lines[$firstidx..$linenum]; |
{ |
|
$errmsg = "${errmsg}${oneline}\n"; |
last; |
$nerrlines++; |
|
} | } |
|
|
|
$linenum++; |
} | } |
elsif ($oneline =~ /:\s+undefined reference to\s+/) |
|
|
if ($#errslice >= 0) |
{ | { |
$errmsg = "${errmsg}${prevline}\n"; |
# We have lines that may indicate an error - look at last few lines to be sure. |
$errmsg = "${errmsg}${oneline}\n"; |
# make isn't consistent so the last line doesn't always have an error code - it |
$nerrlines++; |
# may appear in earlier lines. |
$nerrlines++; |
my($iline); |
|
my($goterror); |
|
|
|
$goterror = 0; |
|
$iline = $#lines; |
|
while ($iline >= 0 && $#lines - $iline < 4) |
|
{ |
|
if ($lines[$iline] =~ /\*\*\*\s+\[.+\]\s+Error/i) |
|
{ |
|
$goterror = 1; |
|
last; |
} | } |
| |
$prevline = $oneline; |
$iline--; |
} | } |
close FH; |
|
| |
if ($nerrlines >= $MAXERRLINES) |
if ($goterror) |
|
{ |
|
$linenum = @errslice; |
|
$date = `date`; |
|
chomp($date); |
|
$errmsg = "${errmsg}JSOC Build Failed on ${date}:\n"; |
|
$linenum++; |
|
$errmsg = join('', $errmsg, @errslice); |
|
|
|
if ($linenum >= $MAXERRLINES) |
{ | { |
$errmsg = "${errmsg}...\n"; | $errmsg = "${errmsg}...\n"; |
} | } |
|
} |
|
} |
| |
|
if (length($errmsg) > 0) |
|
{ |
open FH, "| /usr/bin/Mail -s \"JSOC build problem\" $JSOC_DEV"; | open FH, "| /usr/bin/Mail -s \"JSOC build problem\" $JSOC_DEV"; |
print FH $errmsg; | print FH $errmsg; |
close FH; | close FH; |
|
} |
} else { |
} |
|
else |
|
{ |
my $cmd = "$ROOTDIR/JSOC/doc/doxygen/gendox.csh"; | my $cmd = "$ROOTDIR/JSOC/doc/doxygen/gendox.csh"; |
`chmod +x $cmd`; | `chmod +x $cmd`; |
`$cmd >& $ROOTDIR/JSOC/doxygen.log`; | `$cmd >& $ROOTDIR/JSOC/doxygen.log`; |
create_sl(); | create_sl(); |
} | } |
| |
|
sub RecognizedError |
|
{ |
|
my($line) = $_[0]; |
|
my($rv) = 0; |
|
|
|
if ($line =~ /:\s+undefined reference to\s+/ || $line =~ /:\s\S*\serror:\s/i || $line =~ /icc: error/ || $line =~ /:\serror:/) |
|
{ |
|
$rv = 1; |
|
} |
|
|
|
return $rv; |
|
} |
|
|
sub create_sl { | sub create_sl { |
my $dir = '/web/jsoc/htdocs/doxygen_html'; | my $dir = '/web/jsoc/htdocs/doxygen_html'; |
opendir DH, $dir; | opendir DH, $dir; |