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