1 |
#!/usr/bin/perl -- |
2 |
|
3 |
use strict; |
4 |
use warnings; |
5 |
use Data::Dumper; |
6 |
|
7 |
my($TESTERR) = "no"; |
8 |
my($JSOC_DEV) = "jsoc_dev\@sun.stanford.edu"; |
9 |
#my($JSOC_DEV) = "arta\@sun.stanford.edu"; # for testing purposes |
10 |
my($ROOTDIR) = "/tmp/jsoc"; |
11 |
my($MAKELOG) = "make.log"; |
12 |
my($ret); |
13 |
my($MAXERRLINES) = 8; |
14 |
|
15 |
$ENV{'CVSROOT'} = ':ext:sunroom.stanford.edu:/home/cvsuser/cvsroot'; |
16 |
$ENV{'CVS_RSH'} = 'ssh'; |
17 |
$ENV{'PATH'} .= ':/usr/local/bin'; |
18 |
|
19 |
if ($TESTERR eq "no") |
20 |
{ |
21 |
if (-e "$ROOTDIR/JSOC") |
22 |
{ |
23 |
`rm -rf "$ROOTDIR/JSOC" 2>&1 1>>/dev/null`; |
24 |
} |
25 |
|
26 |
`mkdir -p "$ROOTDIR/JSOC" 2>&1 1>>/dev/null`; |
27 |
|
28 |
my $cmd = "cd $ROOTDIR; cvs co JSOC; cvs update JSOC; cd JSOC; ./configure"; |
29 |
$cmd = join("; ", map { |
30 |
$_." 2>&1 1>>$ROOTDIR/JSOC/cmd.log"; |
31 |
} split("; ", $cmd)); |
32 |
|
33 |
$ret = `$cmd; make universe -k >& $ROOTDIR/JSOC/$MAKELOG`; |
34 |
} |
35 |
else |
36 |
{ |
37 |
`cd $ROOTDIR/JSOC; make universe -k >& $MAKELOG`; |
38 |
} |
39 |
|
40 |
open FH, "cd $ROOTDIR/JSOC; \(tail -n 4 $MAKELOG | grep Error\) |" || die "Can't open log file: $!\n"; |
41 |
my @line = <FH>; |
42 |
my($oneline); |
43 |
my($prevline); |
44 |
my($errmsg) = ""; |
45 |
my($nerrlines); |
46 |
my($date); |
47 |
|
48 |
close FH; |
49 |
if (scalar(@line)) { |
50 |
$nerrlines = 0; |
51 |
$date = `date`; |
52 |
$errmsg = "${errmsg}JSOC Build Failed on ${date}:\n"; |
53 |
$nerrlines++; |
54 |
open FH, "$ROOTDIR/JSOC/$MAKELOG"; |
55 |
while($oneline = <FH>) |
56 |
{ |
57 |
chomp($oneline); |
58 |
if ($oneline =~ /:\s\S*\serror:\s/) |
59 |
{ |
60 |
$errmsg = "${errmsg}${oneline}\n"; |
61 |
$nerrlines++; |
62 |
$oneline = <FH>; |
63 |
if ($oneline) |
64 |
{ |
65 |
$errmsg = "${errmsg}${oneline}\n"; |
66 |
$nerrlines++; |
67 |
} |
68 |
$oneline = <FH>; |
69 |
if ($oneline) |
70 |
{ |
71 |
$errmsg = "${errmsg}${oneline}\n"; |
72 |
$nerrlines++; |
73 |
} |
74 |
} |
75 |
elsif ($oneline =~ /:\s+undefined reference to\s+/) |
76 |
{ |
77 |
$errmsg = "${errmsg}${prevline}\n"; |
78 |
$errmsg = "${errmsg}${oneline}\n"; |
79 |
$nerrlines++; |
80 |
$nerrlines++; |
81 |
} |
82 |
|
83 |
$prevline = $oneline; |
84 |
} |
85 |
close FH; |
86 |
|
87 |
if ($nerrlines >= $MAXERRLINES) |
88 |
{ |
89 |
$errmsg = "${errmsg}...\n"; |
90 |
} |
91 |
|
92 |
open FH, "| /usr/bin/Mail -s \"JSOC build problem\" $JSOC_DEV"; |
93 |
print FH $errmsg; |
94 |
close FH; |
95 |
|
96 |
} else { |
97 |
my $cmd = "$ROOTDIR/JSOC/doc/doxygen/gendox.csh"; |
98 |
`chmod +x $cmd`; |
99 |
`$cmd >& $ROOTDIR/JSOC/doxygen.log`; |
100 |
create_sl(); |
101 |
} |
102 |
|
103 |
sub create_sl { |
104 |
my $dir = '/web/jsoc/htdocs/doxygen_html'; |
105 |
opendir DH, $dir; |
106 |
|
107 |
my $file; |
108 |
while (defined($file = readdir(DH))) { |
109 |
if ($file =~ /-example/) { |
110 |
my $file2 = $file; |
111 |
$file2 =~ s/-example/-source/; |
112 |
my $cmd = "ln -s $dir/$file $dir/$file2"; |
113 |
# print $cmd, "\n"; |
114 |
`$cmd`; |
115 |
} |
116 |
} |
117 |
|
118 |
closedir DH; |
119 |
} |