pkgsrc-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[pkgsrc/trunk]: pkgsrc/mk/bulk Code cleanup, bugfixes and separation of PKGSR...
details: https://anonhg.NetBSD.org/pkgsrc/rev/d2093ed65c9e
branches: trunk
changeset: 503317:d2093ed65c9e
user: rillig <rillig%pkgsrc.org@localhost>
date: Fri Nov 18 10:18:05 2005 +0000
description:
Code cleanup, bugfixes and separation of PKGSRCDIR and BULKFILESDIR.
- Added section headings to make reading the code more efficient.
- Added bp_die() for uniform error messages.
- Added sanity checks:
- $BULK_BUILD_CONF must be a regular file.
- Protect against spurious output from the bulk.conf file.
- Check that configuration variables are defined, non-empty and
do not contain newlines.
- Properly extract MAKECONF from the bulk.conf file when getting the
mk.conf variables.
- Protect against spurious output from BMAKE show-vars.
- Fixed the use of undefined values ($startdate).
- Changed some calls to my_system() to a more secure form.
- Check if the calls to chdir() actually work.
- Look for the BROKENFILEs in BULKFILESDIR instead of USR_PKGSRC.
- Changed postfix conditions to prefix conditions. Example:
do_foo() if $bar; ==> if ($bar) { do_foo(); }
diffstat:
mk/bulk/post-build | 112 +++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 88 insertions(+), 24 deletions(-)
diffs (193 lines):
diff -r ffcc9a655c7e -r d2093ed65c9e mk/bulk/post-build
--- a/mk/bulk/post-build Fri Nov 18 09:03:06 2005 +0000
+++ b/mk/bulk/post-build Fri Nov 18 10:18:05 2005 +0000
@@ -1,5 +1,5 @@
#!/usr/pkg/bin/perl
-# $NetBSD: post-build,v 1.58 2005/09/25 15:05:40 jschauma Exp $
+# $NetBSD: post-build,v 1.59 2005/11/18 10:18:05 rillig Exp $
#
# Collect stuff after a pkg bulk build
#
@@ -11,12 +11,34 @@
use strict;
use warnings;
+#
+# Global variables
+#
+
my %vars;
my $verbose = 1; # set to 2 to see more command execution detail
+#
+# Helper functions
+#
+
+sub pb_die($$) {
+ my ($fname, $msg) = @_;
+ my ($text, $sep);
+
+ $text = "[post-build] error: ";
+ $sep = "";
+ if (defined($fname)) {
+ $text .= "${sep}${fname}";
+ $sep = ": ";
+ }
+ $text .= "${sep}${msg}";
+ die "${text}\n";
+}
+
sub my_system (@) {
print STDERR '> '.join(' ', @_)."\n" if ($verbose >= 2);
- system(@_);
+ return system(@_);
}
# Where config vars are stored (/bin/sh syntax)
@@ -24,20 +46,47 @@
my $BULK_BUILD_CONF = $ENV{BULK_BUILD_CONF} || (dirname($0).'/build.conf');
$BULK_BUILD_CONF = "./$BULK_BUILD_CONF" if ($BULK_BUILD_CONF !~ m:^/:);
+if (!-f $BULK_BUILD_CONF) {
+ pb_die($BULK_BUILD_CONF, "Does not exist.");
+}
+
# Dig given variable out of config file, and set it
-sub getconf (@) {
- open(I, ". $BULK_BUILD_CONF; for var in ".join(' ', @_)."; do eval echo \\\${\$var}; done |") || die 'cannot open pipe';
-
- foreach my $var (@_) {
- $vars{$var} = <I>;
- chomp $vars{$var};
- die "\$$var not defined by $BULK_BUILD_CONF" if ($vars{$var} eq '');
+sub get_build_conf_vars(@) {
+ my (@varnames) = @_;
+ my ($is_set, $value);
+
+ foreach my $varname (@varnames) {
+ open(CMD, ". '$BULK_BUILD_CONF'; echo \"\${${varname}+set}\"; echo \"\${${varname}-}\" |")
+ or pb_die($BULK_BUILD_CONF, "Could not evaluate configuration file.");
+
+ chomp($is_set = <CMD>);
+ { local $/ = undef; $value = <CMD>; }
+ chomp($value); # This must be outside the above {...} block
+
+ close(CMD) or pb_die($BULK_BUILD_CONF, "Could not evaluate configuration file (close).");
- print STDERR "> $var=$vars{$var}\n" if ($verbose >= 2);
+ #
+ # Sanity checks
+ #
+
+ if ($is_set ne "set") {
+ pb_die($BULK_BUILD_CONF, "${varname} must be set.");
+ }
+ if ($value =~ qr"^\s+$") {
+ pb_die($BULK_BUILD_CONF, "${varname} must be non-empty.");
+ }
+ if ($value =~ qr"\n") {
+ pb_die($BULK_BUILD_CONF, "${varname} must not contain newlines.");
+ }
+
+ $vars{$varname} = $value;
+ if ($verbose >= 2) {
+ print STDERR "> $varname=$vars{$varname}\n";
+ }
}
}
-getconf(
+get_build_conf_vars(
'ADMINSIG', # "-Your Name"
'FTPURL', # "pub/NetBSD/pkgstat/`date +%Y%m%d.%H%M`"
'FTP', # "/disk1/ftp/${FTPURL}"
@@ -52,26 +101,39 @@
my $os = `uname -s`;
chomp $os;
-my $BMAKE = $ENV{BMAKE} || die '$BMAKE not defined in environment';
+my $BMAKE = $ENV{BMAKE} || pb_die(undef, "The BMAKE environment variable must be set.");
-sub getmakevars (@) {
- open(I, "cd $vars{USR_PKGSRC}/pkgtools/pkglint && $BMAKE show-vars BATCH=1 VARNAMES='".join(' ', @_)."' |") || die 'cannot open pipe';
+sub get_mk_conf_vars (@) {
+ my ($rest);
+
+ open(I, "set -e; . '$BULK_BUILD_CONF'; . '$vars{USR_PKGSRC}/mk/bulk/post-build-conf'; export_config_vars; cd $vars{USR_PKGSRC}/pkgtools/pkglint && $BMAKE show-vars BATCH=1 VARNAMES='".join('
', @_)."' |")
+ or pb_die(undef, "Cannot get mk.conf variables.");
foreach my $var (@_) {
- $vars{$var} = <I>;
- chomp $vars{$var};
- die "\${$var} not defined by $BMAKE" if ($vars{$var} eq '');
+ chomp($vars{$var} = <I>);
+
+ if ($vars{$var} eq "") {
+ pb_die(undef, "\${$var} must be defined in your mk.conf");
+ }
print STDERR "> $var=$vars{$var}\n" if ($verbose >= 2);
}
+
+ { local $/ = undef; $rest = <I>; }
+ if (defined($rest) && $rest ne "") {
+ pb_die(undef, "Output of $BMAKE show-vars too long:\n${rest}");
+ }
+
+ close(I) or die pb_die(undef, "Cannot get mk.conf variables (close).");
}
# Extract the names of the files used for the build log and broken build logs.
# These have defaults set by bsd.bulk-pkg.mk and may be overridden in
# /etc/mk.conf
-getmakevars(qw(
+get_mk_conf_vars(qw(
BROKENFILE
BROKENWRKLOG
+ BULKFILESDIR
BULK_DBFILE
DEPENDSFILE
DEPENDSTREEFILE
@@ -97,7 +159,7 @@
my $startdate = (stat($vars{STARTFILE}))[9];
my $enddate = '';
-if ($startdate == 0) {
+if (!defined($startdate) || $startdate == 0) {
$startdate = "unknown";
} else {
local $ENV{TZ} = "UTC";
@@ -115,18 +177,20 @@
# $pkg, $nbrokenby, $maintainer
-my_system("mkdir -p $vars{FTP}");
+my_system("mkdir", "-p", "--", $vars{FTP});
# Copy over the output from the build process
-chdir($vars{USR_PKGSRC});
+chdir($vars{"BULKFILESDIR"}) or pb_die($vars{"BULKFILESDIR"}, "Cannot change directory.");
my_system("find . -name $vars{BROKENFILE} -print -o -name $vars{BROKENWRKLOG} -print | $vars{PAX} -r -w -X -p e $vars{FTP}");
# Copy over the cache files used during the build
foreach my $f qw(BULK_DBFILE DEPENDSTREEFILE DEPENDSFILE SUPPORTSFILE INDEXFILE ORDERFILE) {
- my_system("cp $vars{$f} $vars{FTP}") if -f $vars{$f};
+ if (-f $vars{$f}) {
+ my_system("cp", "--", $vars{$f}, $vars{FTP});
+ }
}
-chdir($vars{FTP});
+chdir($vars{FTP}) or pb_die($vars{"FTP"}, "Cannot change directory.");
writeReport();
#
@@ -146,7 +210,7 @@
#
{
chdir($vars{FTP});
- my_system("mkdir -p leftovers-$vars{MACHINE_ARCH}");
+ my_system("mkdir", "-p", "leftovers-$vars{MACHINE_ARCH}");
# Find files since last build:
my $leftovers_txt = "leftovers-$vars{MACHINE_ARCH}.txt";
Home |
Main Index |
Thread Index |
Old Index