summaryrefslogtreecommitdiff
path: root/mk
diff options
context:
space:
mode:
authorrillig <rillig@pkgsrc.org>2005-11-16 22:18:03 +0000
committerrillig <rillig@pkgsrc.org>2005-11-16 22:18:03 +0000
commit172d2816521ff3b94aa6c2a285199b6189060ebd (patch)
tree20522672a873d81ce3edd3538fc5a79247f2da6d /mk
parent3baf66ff59e11d154c0b9edc107bf20358485e95 (diff)
downloadpkgsrc-172d2816521ff3b94aa6c2a285199b6189060ebd.tar.gz
Made printdepends very similar to printindex, as both iterate over all
pkgsrc packages, collecting different information. - BMAKE is taken from the environment instead of querying `uname -s`. - package-specific log files can be saved in a directory tree different from PKGSRCDIR. - Added sanity checks for BMAKE, bulkfilesdir and brokenfile. - The .pkglist cache is saved in ${BULKFILESDIR} instead of ${PKGSRCDIR}. - Reformatted the diagnostics.
Diffstat (limited to 'mk')
-rw-r--r--mk/bulk/printdepends167
1 files changed, 114 insertions, 53 deletions
diff --git a/mk/bulk/printdepends b/mk/bulk/printdepends
index 6aeeb9b9402..af1e883521f 100644
--- a/mk/bulk/printdepends
+++ b/mk/bulk/printdepends
@@ -1,7 +1,7 @@
#!/bin/sh
-# $NetBSD: printdepends,v 1.19 2005/11/14 20:58:12 rillig Exp $
-
+# $NetBSD: printdepends,v 1.20 2005/11/16 22:18:03 rillig Exp $
#
+
# Copyright (c) 1999, 2000 Hubert Feyrer <hubertf@NetBSD.org>
# All rights reserved.
#
@@ -30,13 +30,24 @@
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
+# usage: printdepends [brokenfile [bulkfilesdir]]
#
-# Print list of pkg dependencies suitable for tsort(1).
-# Start in $USR_PKGSRC.
+# Generates a list of package dependencies suitable for tsort(1) on
+# stdout. Each line of the output has two fields: the package directory
+# of the dependency and the package directory of the depending package
+# (both in the form category/package).
#
-# If an argument is given, use it as a file name
-# to contain any failure messages in each package directory.
+# If <brokenfile> is given, package-specific errors are logged to
+# <bulkfilesdir>/${pkgdir}/<brokenfile>. Otherwise no additional logging
+# takes place.
#
+# The default for <bulkfilesdir> is the pkgsrc directory itself. If
+# <bulkfilesdir> differs from the pkgsrc directory, all directories
+# that are needed for the log files are created automatically.
+#
+# Note: printdepends must be called from a pkgsrc root directory.
+
+set -e
# Pull in PKGLIST
if [ -f "$BULK_BUILD_CONF" ]; then
@@ -45,65 +56,115 @@ else
. `dirname $0`/build.conf
fi
-if [ ! -z "$1" ]; then
- brokenfile=$1
-else
- brokenfile=/dev/null
-fi
+#
+# Global variables
+#
-opsys=`uname -s`
-case "$opsys" in
-NetBSD) BMAKE=make ;;
-*) BMAKE=bmake ;;
+# The brokenfile_flag variable tells whether we want package-specific
+# log files at all. If it is set to "yes", the mkdirs_flag
+# variable tells whether the directories of the package-specific log
+# files are created if necessary.
+brokenfile_flag="yes"
+mkdirs_flag="no"
+pkgsrcdir="${PWD}"
+bulkfilesdir="${pkgsrcdir}"
+brokenfile=""
+
+#
+# Command line parsing
+#
+
+case $# in
+0) brokenfile_flag="no"
+ ;;
+1) brokenfile="$1"
+ ;;
+2) brokenfile="$1"
+ bulkfilesdir="$2"
+ if [ "${bulkfilesdir}" != "${pkgsrcdir}" ]; then
+ mkdirs_flag="yes"
+ fi
+ ;;
+*) echo "usage: $0 [brokenfile [bulkfilesdir]]" 1>&2
+ exit 1
+ ;;
esac
-export BMAKE
+#
+# Sanity checks
+#
-# $USR_PKGSRC
-cwd=$PWD
+case ${BMAKE-""} in
+"") echo "$0: error: BMAKE must be set and non-empty." 1>&2
+ exit 1;;
+esac
+case ${bulkfilesdir} in
+/*) ;;
+*) echo "$0: error: The <bulkfilesdir> argument must be absolute." 1>&2
+ exit 1;;
+esac
+case ${brokenfile} in
+*/*) echo "$0: error: The <brokenfile> argument must not contain a slash." 1>&2
+ exit 1;;
+esac
+
+#
+# Get additional system information
+#
-# get some initial variables
-cd $cwd/pkgtools/pkglint
+cd "${pkgsrcdir}/pkgtools/pkglint"
GREP=`${BMAKE} show-var VARNAME=GREP USE_TOOLS=grep`
+MKDIR=`${BMAKE} show-var VARNAME=MKDIR USE_TOOLS=mkdir`
SED=`${BMAKE} show-var VARNAME=SED USE_TOOLS=sed`
-cd $cwd
+cd "${pkgsrcdir}"
-if [ -n "${PKGLIST}" ]; then
- list="${PKGLIST}"
-else
- # List of all pkgs, from pkgsrc/*/Makefile
+case $mkdirs_flag in
+yes) mkbulkdir="${MKDIR}";;
+*) mkbulkdir=":";;
+esac
+
+case ${PKGLIST} in
+"") # List of all packages, from pkgsrc/*/Makefile
list=`${GREP} '^[[:space:]]*'SUBDIR */Makefile | ${GREP} -v regress/ | ${SED} 's,/Makefile.*=[[:space:]]*,/,'`
-fi
+ ;;
+*) list="${PKGLIST}"
+ ;;
+esac
# cache the package list for printindex
-echo list='"'${list}'"' > .pkglist
-
-for pkgdir in $list
-do
- if [ ! -d $pkgdir ]; then
- echo "WARNING: the package directory $pkgdir is listed in" > /dev/stderr
- echo $pkgdir | ${SED} 's;/.*;/Makefile;g' > /dev/stderr
- echo "but the directory does not exist. Please fix this!" > /dev/stderr
- else
- l=`cd $pkgdir && ${BMAKE} show-depends-dirs`
- if [ $? != 0 ]; then
- echo "WARNING (printdepends): the package in $pkgdir had problem with" > /dev/stderr
- echo " ${BMAKE} show-depends-dirs" > /dev/stderr
- echo " dependency information in the cache will" > /dev/stderr
- echo " be dropped for $pkgdir" > /dev/stderr
- echo "${BMAKE} show-depends-dirs failed:" > $brokenfile
- ${BMAKE} show-depends-dirs >> $brokenfile 2>&1
- echo "$pkgdir $pkgdir"
+${mkbulkdir} "${bulkfilesdir}"
+echo list='"'${list}'"' > "${bulkfilesdir}/.pkglist"
+
+for pkgdir in $list; do
+ if cd "${pkgsrcdir}/${pkgdir}"; then
+ if deps=`${BMAKE} show-depends-dirs`; then
+ case ${deps} in
+ "") # Make the package depend on itself.
+ # Otherwise it would not show up in the
+ # dependency graph.
+ echo "${pkgdir} ${pkgdir}";;
+ *) for dep in $deps; do
+ echo "${dep} ${pkgdir}"
+ done;;
+ esac
else
- if [ "$l" = "" ]; then
- # No dependencies
- echo "$pkgdir $pkgdir"
- else
- for depdir in $l
- do
- echo "$depdir $pkgdir"
- done
- fi
+ echo "$0: error: could not extract dependencies for ${pkgdir} -- skipping." 1>&2
+
+ case $brokenfile_flag in
+ no) continue;;
+ esac
+
+ ${mkbulkdir} "${bulkfilesdir}/${pkgdir}"
+ { echo "[printdepends] command failed: ${BMAKE} show-depends-dir"
+ ( ${BMAKE} show-depends-dirs
+ ) || true
+ } >> "${bulkfilesdir}/${pkgdir}/${brokenfile}" 2>&1
fi
+ else
+ ${mkbulkdir} "${bulkfilesdir}"
+ { echo "[printdepends] command failed: cd ${pkgsrcdir}/${pkgdir}"
+ ( cd "${pkgsrcdir}/${pkgdir}"
+ ) || true
+ } 1>&2
fi
done