pkgsrc-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[pkgsrc/trunk]: pkgsrc/mk/bulk - modularize functionality into a number of di...
details: https://anonhg.NetBSD.org/pkgsrc/rev/5c82245b996d
branches: trunk
changeset: 521901:5c82245b996d
user: jschauma <jschauma%pkgsrc.org@localhost>
date: Mon Nov 27 00:05:22 2006 +0000
description:
- modularize functionality into a number of distinct functions
- add the option "-p|--post-build" to allow you to only run the
post-build portion of the bulk-build
diffstat:
mk/bulk/build | 660 +++++++++++++++++++++++++++++++--------------------------
1 files changed, 358 insertions(+), 302 deletions(-)
diffs (truncated from 728 to 300 lines):
diff -r 99b2622eb16b -r 5c82245b996d mk/bulk/build
--- a/mk/bulk/build Sun Nov 26 22:35:10 2006 +0000
+++ b/mk/bulk/build Mon Nov 27 00:05:22 2006 +0000
@@ -1,5 +1,5 @@
#!/bin/sh
-# $NetBSD: build,v 1.95 2006/11/19 03:06:26 jschauma Exp $
+# $NetBSD: build,v 1.96 2006/11/27 00:05:22 jschauma Exp $
#
# Copyright (c) 1999, 2000 Hubert Feyrer <hubertf%NetBSD.org@localhost>
@@ -30,11 +30,27 @@
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
+##
+## Globals
+##
+scriptdir=`dirname "$0"`
+scriptdir=`cd "${scriptdir}" && pwd`
+
#
-# Do bulk build
+# Default values for command line options.
#
+resume=no
+mirror_only=no
+target=bulk-package
+makeargs=""
+noemail=no
+post_only=no
-usage() {
+##
+## Functions
+##
+
+usage () {
cat <<EOF
usage: $0 [options]
$0 -h | --help
@@ -62,6 +78,9 @@
The only difference between this option and a regular bulk build
is that the packages are not actually built.
+ -p | --post-build
+ Run the post-build processing and generate the report only.
+
-r | --resume
Resume a previously interrupted bulk build.
@@ -75,7 +94,8 @@
EOF
}
-die() {
+# print out error message and exit 1
+die () {
echo "$0: error:" 1>&2
for i in "$@"; do
echo " $i" 1>&2
@@ -93,21 +113,332 @@
${SED} "s;^;`date '+%Y/%m/%d %H:%M:%S'` ${percent} ${pkgdir} @ ${MACHINE_ARCH}> ;g"
}
+# find and set a pkgsrc variable
+# usage: load_pkgsrc_var <varname> <bmake-args...>
+load_pkgsrc_var() {
+ case $1 in
+ -z) lpv_check_nonempty=no; shift;;
+ *) lpv_check_nonempty=yes;;
+ esac
-#
-# Find out where we are
-#
-scriptdir=`dirname "$0"`
-scriptdir=`cd "${scriptdir}" && pwd`
+ lpv_varname="$1"; shift
+
+ if lpv_value=`cd "${pkglint_dir}" && ${BMAKE} show-var VARNAME="${lpv_varname}" "$@"`; then
+ case "$lpv_check_nonempty,$lpv_value" in
+ yes,"")
+ die "${lpv_varname} must not be empty.";;
+ esac
+ else
+ die "Could not get the value for the ${lpv_varname} pkgsrc variable."
+ fi
+ eval "${lpv_varname}=\${lpv_value}"
+ printf "%-15s = %s\\n" "${lpv_varname}" "${lpv_value}"
+}
+
+# perform post-processing of the bulk-build results
+do_post_build () {
+ echo "build> Post processing bulk build results..."
+
+ [ -z "${BULK_BUILD_ID_FILE}" ] && load_pkgsrc_var BULK_BUILD_ID_FILE
+ [ -z "${MKDIR}" ] && load_pkgsrc_var MKDIR USE_TOOLS=mkdir
+ [ -z "${PERL5}" ] && load_pkgsrc_var PERL5 USE_TOOLS=perl
+
+ # Re-install BULK_PREREQ as we may need functionality (e.g. SMTP) provided by
+ # them for post-build to run.
+ echo "build> Re-installing prerequisite packages specified with BULK_PREREQ..."
+ for pkgdir in $BULK_PREREQ lang/perl5; do
+ echo "build> Installing prerequisite package $pkgdir"
+ ( cd "${pkgsrc_dir}/${pkgdir}" \
+ && ${BMAKE} bulk-install
+ ) || die "Failed to install prerequisite packages."
+ done
+
+ #
+ # Generate the post-build report.
+ #
+ echo "build> Generating the bulk build report..."
+
+ bulk_build_id=`cat "${BULK_BUILD_ID_FILE}"` \
+ || die "Could not read the bulk build ID from ${BULK_BUILD_ID_FILE}."
+
+ report_dir="${REPORTS_DIR}/${bulk_build_id}"
+ ${MKDIR} "${report_dir}"
+ ( cd "${pkgsrc_dir}" \
+ && ${PERL5} mk/bulk/post-build \
+ > "${report_dir}/${REPORT_TXT_FILE}"
+ ) || die "Could not write the results file."
+}
+
+# Notify the ADMIN of the finished build.
+do_email () {
+ case $noemail in
+ no) cat "${report_dir}/${REPORT_TXT_FILE}" \
+ | ${MAIL_CMD} -s "pkgsrc ${OPSYS} ${OS_VERSION}/${MACHINE_ARCH} bulk build results ${bulk_build_id}" "$ADMIN"
+ esac
+}
+
+# output final note that we're done
+do_done () {
+ echo ""
+ echo "build> Bulk build ended: `date`"
+}
+
+# set all commonly used variables, prepare files etc.
+do_common_setup () {
+
+ #
+ # Choose an appropriate value for BMAKE depending on the operating
+ # system.
+ #
+ opsys=`uname -s`
+ case "$opsys" in
+ NetBSD) BMAKE=make ;;
+ *) BMAKE=bmake ;;
+ esac
+ export BMAKE
+
+ #
+ # Set resource limits as high as possible
+ #
+ ulimit -S -s `ulimit -H -s`
+ ulimit -S -d `ulimit -H -d`
+
+ #
+ # Find the configuration file.
+ #
+ BULK_BUILD_CONF="${BULK_BUILD_CONF-${scriptdir}/build.conf}"
+ case $BULK_BUILD_CONF in
+ /*) ;;
+ *) BULK_BUILD_CONF="${PWD}/${BULK_BUILD_CONF}"
+ esac
+ #
+ # Load the variables from the configuration file.
+ #
+ { test -f "${BULK_BUILD_CONF}" \
+ && . "${BULK_BUILD_CONF}" \
+ && . "${scriptdir}/post-build-conf" \
+ && check_config_vars \
+ && export_config_vars
+ } || die "Cannot load config file ${BULK_BUILD_CONF}, aborting."
+
+ #
+ # Set the paths to commonly used directories.
+ #
+ pkgsrc_dir="${USR_PKGSRC}"
+ pkglint_dir="${USR_PKGSRC}/pkgtools/pkglint"
+
+ #
+ # Set up variables specific for the bulk build.
+ #
+ BATCH="1"
+ DEPENDS_TARGET="bulk-install"
+ export BATCH DEPENDS_TARGET
+
+ #
+ # Unset some environment variables that could disturbe the build.
+ #
+ unset CDPATH || true # ensure cd does not print new cwd to stdout, which
+ # confuses the printindex script.
+ unset DISPLAY || true # allow sane failure for gimp, xlispstat
+}
+
+# Check that the package tools are up to date.
+check_tools () {
+ echo "build> Checking if the pkgtools are up-to-date"
+ ( cd "${pkglint_dir}" \
+ && ${BMAKE} fetch >/dev/null 2>&1
+ ) || {
+ echo "build> Updating pkgtools"
+ ( cd "${pkgsrc_dir}/pkgtools/pkg_install" \
+ && ${BMAKE} clean \
+ && ${BMAKE} install \
+ && ${BMAKE} clean
+ ) || die "Could not update the package tools."
+ }
+}
+
+# Run the pre-build script if necessary.
+run_pre_build () {
+ case $resume in
+ yes) echo "build> Resuming -- skipping pre-build script";;
+ *) # make veryveryclean :)
+ ( cd "${pkgsrc_dir}" \
+ && /bin/sh mk/bulk/pre-build
+ ) || die "Error during bulk-build preparations, aborting.";;
+ esac
+}
+
+# Load pkgsrc variables that affect the build process.
+load_vars () {
+ echo "+----------------------------------------+"
+ echo "| Some variables used in the bulk build: |"
+ echo "+----------------------------------------+"
+ load_pkgsrc_var OPSYS
+ load_pkgsrc_var OS_VERSION
+ load_pkgsrc_var MACHINE_ARCH
+ load_pkgsrc_var -z BULK_PREREQ
+
+ load_pkgsrc_var BULKFILESDIR
+ load_pkgsrc_var BULK_DBFILE
+ load_pkgsrc_var DEPENDSFILE
+ load_pkgsrc_var DEPENDSTREEFILE
+ load_pkgsrc_var INDEXFILE
+ load_pkgsrc_var ORDERFILE
+ load_pkgsrc_var STARTFILE
+ load_pkgsrc_var SUPPORTSFILE
+ load_pkgsrc_var BULK_BUILD_ID_FILE
+
+ load_pkgsrc_var BUILDLOG
+ load_pkgsrc_var BROKENFILE
+ load_pkgsrc_var BROKENWRKLOG
+
+ load_pkgsrc_var AWK USE_TOOLS=awk
+ load_pkgsrc_var GREP USE_TOOLS=grep
+ load_pkgsrc_var MAIL_CMD USE_TOOLS=mail
+ load_pkgsrc_var MKDIR USE_TOOLS=mkdir
+ load_pkgsrc_var PERL5 USE_TOOLS=perl
+ load_pkgsrc_var PKG_DELETE
+ load_pkgsrc_var PKG_INFO
+ load_pkgsrc_var SED USE_TOOLS=sed
+ echo "------------------------------------------"
+
+ # Get the location of commonly used files
+ main_buildlog="${BULKFILESDIR}/${BUILDLOG}"
+}
+
+# Install prerequisite packages.
#
-# Default values for command line options.
+# Note: we do this _before_ the depends tree because some packages like
+# xpkgwedge only become DEPENDS if they are installed.
+install_prereqs () {
+ echo "build> Installing prerequisite packages specified with BULK_PREREQ..."
+ for pkgdir in $BULK_PREREQ; do
+ echo "build> Installing prerequisite package $pkgdir"
+ ( cd "${pkgsrc_dir}/${pkgdir}" \
+ && ${BMAKE} bulk-install
+ ) || die "Could not install prerequisite packages."
+ done
+}
+
+# Everything is prepared. We can start building the real packages now.
#
-resume=no
-mirror_only=no
-target=bulk-package
-makeargs=""
-noemail=no
+# Loop over every package in the correct order. Before building
+# each one, check to see if we've already processed this package
+# before. This could happen if the build got interrupted and we
+# started it again with the '-resume' option. This prevents us
+# from having to do a potentially very large number of make's to
+# get back to where we let off. After we build each package, add
+# it to the top level buildlog
+# (usually '.make' or '.make.${MACHINE}'). As a side benefit, this
+# can make a progress-meter very simple to add!
+do_real_bulk_build () {
+
+ cd "${pkgsrc_dir}" || die "The pkgsrc directory does not exist."
+
+ echo "build> Starting actual build using the order specified in $ORDERFILE..."
+
Home |
Main Index |
Thread Index |
Old Index