7832e64d14
written in perl, and call the environment variable "BMAKE" accordingly (it's set to the name of the NetBSD make(1) program).
294 lines
8.8 KiB
Perl
294 lines
8.8 KiB
Perl
#!/usr/pkg/bin/perl
|
|
# $NetBSD: post-build,v 1.20 2002/08/12 08:46:54 agc Exp $
|
|
#
|
|
# Collect stuff after a pkg bulk build
|
|
#
|
|
# (c) 2000 Hubert Feyrer, All Rights Reserved.
|
|
#
|
|
|
|
use File::Basename;
|
|
|
|
# Where config vars are stored (/bin/sh syntax)
|
|
|
|
if (-f $ENV{"BULK_BUILD_CONF"}) {
|
|
$BULK_BUILD_CONF=$ENV{"BULK_BUILD_CONF"};
|
|
} else {
|
|
$BULK_BUILD_CONF=dirname("$0")."/build.conf";
|
|
}
|
|
|
|
# Dig given variable out of config file, and set it
|
|
sub getconf
|
|
{
|
|
local($var)=@_;
|
|
local($val);
|
|
|
|
chomp($val=`. ./$BULK_BUILD_CONF ; echo \$$var`);
|
|
eval "\$$var=\"$val\";";
|
|
}
|
|
|
|
|
|
getconf("ADMINSIG"); # "-Your Name"
|
|
getconf("FTPURL"); # "pub/NetBSD/pkgstat/`date +%Y%m%d.%H%M`"
|
|
getconf("FTP"); # "/disk1/ftp/${FTPURL}"
|
|
getconf("FTPHOST"); # ftp://ftp.machi.ne/
|
|
getconf("REPORT"); # "broken.html"
|
|
getconf("USR_PKGSRC"); # "/usr/pkgsrc"
|
|
getconf("osrev"); # `uname -r`
|
|
getconf("arch"); # `uname -m`
|
|
chomp($date=`date`);
|
|
$reportf=basename($REPORT);
|
|
|
|
# extract the name of the files used for the build log and broken build log.
|
|
# these have defaults set by bsd.bulk-pkg.mk and may be overridden in /etc/mk.conf
|
|
chomp($BROKENFILE=`( cd $USR_PKGSRC/pkgtools/pkglint ; $ENV{"BMAKE"} show-var VARNAME=BROKENFILE )`);
|
|
|
|
# also extract the names of the cache files used during the bulk build. We'll save a copy of
|
|
# those to help debug if the build messed up.
|
|
chomp($DEPENDSTREEFILE=`( cd $USR_PKGSRC/pkgtools/pkglint ; $ENV{"BMAKE"} show-var VARNAME=DEPENDSTREEFILE )`);
|
|
chomp($DEPENDSFILE=`( cd $USR_PKGSRC/pkgtools/pkglint ; $ENV{"BMAKE"} show-var VARNAME=DEPENDSFILE )`);
|
|
chomp($SUPPORTSFILE=`( cd $USR_PKGSRC/pkgtools/pkglint ; $ENV{"BMAKE"} show-var VARNAME=SUPPORTSFILE )`);
|
|
chomp($INDEXFILE=`( cd $USR_PKGSRC/pkgtools/pkglint ; $ENV{"BMAKE"} show-var VARNAME=INDEXFILE )`);
|
|
chomp($ORDERFILE=`( cd $USR_PKGSRC/pkgtools/pkglint ; $ENV{"BMAKE"} show-var VARNAME=ORDERFILE )`);
|
|
chomp($STARTFILE=`( cd $USR_PKGSRC/pkgtools/pkglint ; $ENV{"BMAKE"} show-var VARNAME=STARTFILE )`);
|
|
chomp($LOCALBASE=`( cd $USR_PKGSRC/pkgtools/pkglint ; $ENV{"BMAKE"} show-var VARNAME=LOCALBASE )`);
|
|
chomp($X11BASE=`( cd $USR_PKGSRC/pkgtools/pkglint ; $ENV{"BMAKE"} show-var VARNAME=X11BASE )`);
|
|
$dtfile=basename($DEPENDSTREEFILE);
|
|
$depfile=basename($DEPENDSFILE);
|
|
$supfile=basename($SUPPORTSFILE);
|
|
$indfile=basename($INDEXFILE);
|
|
$ordfile=basename($ORDERFILE);
|
|
$startfile=basename($STARTFILE);
|
|
|
|
$verbose=1;
|
|
|
|
if ($verbose) {
|
|
print "\n";
|
|
print "*** NetBSD $osrev/$arch\n";
|
|
print "*** Result of bulk pkgsrc build as of $date:\n";
|
|
print "\n";
|
|
printf ("%-23s State \tBreaks\t(last modified, maintainer)\n","Pkg");
|
|
}
|
|
|
|
system("mkdir -p ${FTP}");
|
|
|
|
# Copy over the output from the build process
|
|
chdir("$USR_PKGSRC");
|
|
system("tar plcf - $BROKENFILE */*/$BROKENFILE | ( cd ${FTP} ; tar plxf - )");
|
|
|
|
# Copy over the cache files used during the build
|
|
if (-f $DEPENDSTREEFILE ) {system("cp $DEPENDSTREEFILE ${FTP}");}
|
|
if (-f $DEPENDSFILE ) {system("cp $DEPENDSFILE ${FTP}");}
|
|
if (-f $SUPPORTSFILE ) {system("cp $SUPPORTSFILE ${FTP}");}
|
|
if (-f $INDEXFILE ) {system("cp $INDEXFILE ${FTP}");}
|
|
if (-f $ORDERFILE ) {system("cp $ORDERFILE ${FTP}");}
|
|
|
|
|
|
open(HTML,">$REPORT") or die "Can't write $REPORT: $!\n";
|
|
print HTML <<EOHTML
|
|
<HTML>
|
|
<HEAD>
|
|
<TITLE>NetBSD-$osrev/$arch bulk package build</TITLE>
|
|
</HEAD>
|
|
|
|
<BODY BGCOLOR=#cccccc>
|
|
|
|
<H1> NetBSD $osrev/$arch </H1>
|
|
<H2>Output of the pkgsrc bulk build<BR>
|
|
as of $date</H2>
|
|
|
|
Packages not listed here resulted in a <A
|
|
HREF="../../packages/">binary package</A>. To see the output of
|
|
the (failed) build, select the package below.
|
|
<P>
|
|
|
|
Files not listed in PLISTs can be found in <A HREF="leftovers-${arch}.html">this list</A>.
|
|
<P>
|
|
|
|
<TABLE>
|
|
<TR><TH> Package <TH> State <TH> Pkgs Broken by <TH> Last touched by <TH> File touched last <TH> Maintainer
|
|
EOHTML
|
|
;
|
|
|
|
# some nifty postprocessing of $FTP/.broken* -> HTML here
|
|
$nunpackaged = $nbroken = $nbrokendep = 0;
|
|
chdir("$FTP");
|
|
open(BF,"sort +1 $BROKENFILE |") or die "can't open .broken-file '$BROKENFILE'";
|
|
while (<BF>) {
|
|
($nerrors, $bf, $nbrokenby) = split;
|
|
$pkg = $bf;
|
|
$pkg =~ s,/$BROKENFILE,,;
|
|
|
|
# next
|
|
# if $pkg!~/^a/; # DEBUG! HF
|
|
|
|
if ($nerrors > 0) {
|
|
$color = "red";
|
|
$state = "build broken";
|
|
$nbroken++;
|
|
} elsif ($nerrors == -1) {
|
|
$color = "orange";
|
|
$state = "broken depends";
|
|
$nbrokendep++;
|
|
} else {
|
|
$color = "yellow";
|
|
$state = "not packaged";
|
|
$nunpackaged++;
|
|
}
|
|
|
|
# The idea of this is stolen from bsd.pkg.mk's
|
|
# show-pkgtools-version target - thanks Al! :-)
|
|
$whofile = `find ${USR_PKGSRC}/${pkg} -type f -print | xargs ident 2>/dev/null | awk '\$1 ~ /\\\$NetBSD/ { gsub("/", "", \$4); print \$4 " " \$6 " " \$2 }' | sort -n | tail -n 1 | awk '{ print \$2 " " \$3 }' `;
|
|
$whofile=~s/,v$//;
|
|
chomp($whofile);
|
|
($who,$file) = split(/\s+/, $whofile);
|
|
|
|
# $maintainer=`( cd $USR_PKGSRC/$pkg ; ( echo '.include "Makefile"' ; echo 'bla: ; \@echo ${MAINTAINER}' ) | $ENV{"BMAKE"} -f - bla )`;
|
|
$maintainer=`grep ^MAINTAINER $USR_PKGSRC/$pkg/Makefile | awk '{ print \$2\$3\$4\$5\$6}' | sed -e 's/\</</g' -e 's/\>/>/g'`;
|
|
chomp($maintainer);
|
|
|
|
print HTML "<TR><TD><A HREF=\"$bf\">$pkg</A>";
|
|
print HTML " <TD><FONT COLOR=$color>$state</FONT>";
|
|
if ($nbrokenby > 0){
|
|
print HTML " <TD ALIGN=\"right\"><FONT COLOR=$color>$nbrokenby</FONT>";
|
|
}
|
|
else {
|
|
print HTML " <TD> ";
|
|
}
|
|
print HTML " <TD> $who <TD> $file";
|
|
print HTML " <TD> $maintainer\n";
|
|
|
|
($category, $dbfeed_pkg) = split('/', $pkg);
|
|
|
|
if ($nerrors != 0) {
|
|
if ($nbrokenby > 0){
|
|
printf("%-23s $state\t%-5d\t($who, $maintainer)\n", "$pkg:",$nbrokenby)
|
|
if $verbose;
|
|
}
|
|
else {
|
|
printf("%-23s $state\t%-5s\t($who, $maintainer)\n", "$pkg:","")
|
|
if $verbose;
|
|
}
|
|
|
|
}
|
|
}
|
|
close(BF);
|
|
|
|
|
|
$nbrokentot=$nbroken+$nbrokendep;
|
|
$ntotal=$nunpackaged+$nbroken+$nbrokendep;
|
|
print HTML <<EOHTML
|
|
</TABLE>
|
|
|
|
<HR>
|
|
<P>
|
|
The following cache files were used during the build:
|
|
<UL>
|
|
<LI>The <a href=$dtfile>depends tree file</a>.
|
|
<LI>The <a href=$depfile>depends file</a>.
|
|
<LI>The <a href=$supfile>supports file</a>.
|
|
<LI>The <a href=$indfile>index file</a>.
|
|
<LI>The <a href=$ordfile>build order file</a>.
|
|
</UL>
|
|
<P>
|
|
<HR>
|
|
|
|
<TABLE>
|
|
<TR><TD> Packages not packaged: <TD ALIGHT=RIGHT> <FONT COLOR=yellow>$nunpackaged</FONT>
|
|
<TR><TD> Packages really broken: <TD ALIGHT=RIGHT> <FONT COLOR=red>$nbroken</FONT>
|
|
<TR><TD> Pkgs broken due to them: <TD ALIGHT=RIGHT> <FONT COLOR=blue>$nbrokendep</FONT>
|
|
<TR><TD> Total broken: <TD ALIGHT=RIGHT> $nbrokentot
|
|
<TR><TD> Total: <TD ALIGHT=RIGHT> $ntotal
|
|
</TABLE>
|
|
|
|
<HR>
|
|
<P>
|
|
<UL>
|
|
<!-- <LI>View the <A HREF="$PROG">progress</A> of the build. -->
|
|
<!-- <LI>See the list of <A HREF="../index.html">all log files</A>. -->
|
|
<LI>Visit the <A HREF="http://www.netbsd.org">NetBSD Homepage</A>.
|
|
<LI>Learn about the
|
|
<A HREF="http://www.netbsd.org/Documentation/software/packages.html">
|
|
NetBSD Package System</A>.
|
|
</UL>
|
|
</P>
|
|
<HR>
|
|
Hubert Feyrer, 1999-2000.
|
|
</BODY>
|
|
</HTML>
|
|
EOHTML
|
|
;
|
|
close(HTML);
|
|
|
|
#
|
|
# Adjust "last" symlink
|
|
#
|
|
{
|
|
local($base, $dir) = $FTP=~m|^(.*)/([^/]*)$|;
|
|
|
|
unlink("$base/last");
|
|
symlink($dir, "$base/last");
|
|
}
|
|
|
|
#
|
|
# Generate leftovers-${arch}.html: files not deleted
|
|
# Leftover files are copied to leftovers-${arch} dir, and linked from
|
|
# leftovers-${arch}.html
|
|
#
|
|
{
|
|
chdir("${FTP}");
|
|
system("mkdir -p leftovers-${arch}");
|
|
|
|
# Find files since last build:
|
|
system("find ${LOCALBASE} -newer ${USR_PKGSRC}/${startfile} -type f >>leftovers-${arch}.txt");
|
|
system("find ${X11BASE} -newer ${USR_PKGSRC}/${startfile} -type f >>leftovers-${arch}.txt");
|
|
|
|
# Strip perl-files:
|
|
system("pkg_info -qL perl > .p.${arch}");
|
|
system("fgrep -v -x -f .p.${arch} leftovers-${arch}.txt >leftovers-${arch}.txt.new");
|
|
rename("leftovers-${arch}.txt.new", "leftovers-${arch}.txt");
|
|
unlink(".p.${arch}");
|
|
|
|
# Store leftovers, for easier identification:
|
|
system("tar plcf - `cat leftovers-${arch}.txt` | ( cd leftovers-${arch} ; tar plxf - )");
|
|
|
|
# Add links to leftover list:
|
|
open (IN, "< leftovers-${arch}.txt")
|
|
or die "can't read leftovers-${arch}.txt";
|
|
open (OUT, "> leftovers-${arch}.html")
|
|
or die "can't write leftovers-${arch}.html";
|
|
print OUT <<EOOUT
|
|
<HTML>
|
|
<BODY>
|
|
<PRE>
|
|
EOOUT
|
|
;
|
|
while (<IN>) {
|
|
print OUT "<A HREF=\"${FTPHOST}/${FTPURL}/leftovers-${arch}$_\">$_</A>\n";
|
|
}
|
|
print OUT <<EOOUT2
|
|
</PRE>
|
|
</BODY>
|
|
</HTML>
|
|
EOOUT2
|
|
;
|
|
close(IN);
|
|
close(OUT);
|
|
}
|
|
|
|
if ($verbose) {
|
|
print "\n";
|
|
print "Packages not packaged: $nunpackaged\n";
|
|
print "Packages really broken: $nbroken\n";
|
|
print "Pkgs broken due to them: $nbrokendep\n";
|
|
print "Total broken: $nbrokentot\n";
|
|
print "Total: $ntotal\n";
|
|
print "\n";
|
|
print "See $FTPHOST/$FTPURL/$reportf\n";
|
|
print "for logs of builds broken or not resulting in a binary pkg.\n";
|
|
print "\n";
|
|
print "\n";
|
|
print "$ADMINSIG\n";
|
|
print "\n";
|
|
print "[* This message was created automatically! *]\n";
|
|
print "\n";
|
|
}
|