* Make regpkgset accept all the new args that regpkg takes.
* Sort the pkgs into dependency order before invoking regpkg. * Better cleanup. Reviewed by agc
This commit is contained in:
parent
3df0642b27
commit
afb2b54a87
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
#
|
||||
# $NetBSD: regpkgset,v 1.5 2006/01/03 18:31:09 apb Exp $
|
||||
# $NetBSD: regpkgset,v 1.6 2006/01/04 14:18:00 apb Exp $
|
||||
#
|
||||
# Copyright (c) 2003 Alistair G. Crooks. All rights reserved.
|
||||
#
|
||||
|
@ -33,25 +33,93 @@
|
|||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
|
||||
# Usage: regpkgset set
|
||||
# Usage: regpkgset [options] set
|
||||
#
|
||||
# Options:
|
||||
# -q Quiet.
|
||||
# -v Verbose.
|
||||
# -f Force.
|
||||
# -m Ignore errors from missing files.
|
||||
# -u Update.
|
||||
# -c Cache some information in ${BUILD_INFO_CACHE}.
|
||||
# -d destdir Sets DESTDIR.
|
||||
# -t binpkgdir Create a binary package (in *.tgz format) in the
|
||||
# specified directory. Without this option, a binary
|
||||
# package is not created.
|
||||
# -M metalog Use the specified metalog file to override file
|
||||
# or directory attributes when creating a binary package.
|
||||
# -N etcdir Use the specified directory for passwd and group files.
|
||||
|
||||
prog="${0##*/}"
|
||||
toppid=$$
|
||||
rundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/"
|
||||
. "${rundir}/sets.subr"
|
||||
|
||||
verbose=""
|
||||
cache=""
|
||||
bomb()
|
||||
{
|
||||
kill ${toppid} # in case we were invoked from a subshell
|
||||
exit 1
|
||||
}
|
||||
|
||||
# A literal newline
|
||||
nl='
|
||||
'
|
||||
|
||||
#
|
||||
# cleanup() deletes temporary files.
|
||||
#
|
||||
es=0
|
||||
cleanup ()
|
||||
{
|
||||
trap - 0
|
||||
[ x"${BUILD_INFO_CACHE}" != x ] && rm -f "${BUILD_INFO_CACHE}"
|
||||
exit ${es}
|
||||
}
|
||||
trap 'es=128; cleanup' 1 2 3 13 15 # HUP INT QUIT PIPE TERM
|
||||
trap 'es=$?; cleanup' 0 # EXIT
|
||||
|
||||
#
|
||||
# Parse command line args.
|
||||
#
|
||||
verbose=false
|
||||
quiet=false
|
||||
force=false
|
||||
allowmissing=false
|
||||
update=false
|
||||
cache=false
|
||||
pkgdir=""
|
||||
metalog=""
|
||||
etcdir=""
|
||||
all_options=""
|
||||
while [ $# -gt 1 ]; do
|
||||
# XXX: ${all_options} doesn't correctly handle args with
|
||||
# embedded shell special characters.
|
||||
case "$1" in
|
||||
-v) verbose="$1" ;;
|
||||
-c) cache="$1" ;;
|
||||
-q) quiet=true ; verbose=false ;;
|
||||
-v) verbose=true ; quiet=false ;;
|
||||
-f) force=true ;;
|
||||
-m) allowmissing=true ;;
|
||||
-u) update=true ;;
|
||||
-c) cache=true ;;
|
||||
-d) DESTDIR="$2" ; all_options="${all_options} $1" ; shift ;;
|
||||
-d*) DESTDIR="${1#-?}" ;;
|
||||
-t) pkgdir="$2" ; all_options="${all_options} $1" ; shift ;;
|
||||
-t*) pkgdir="${1#-?}" ;;
|
||||
-M) metalog="$2" ; all_options="${all_options} $1" ; shift ;;
|
||||
-M*) metalog="${1#-?}" ;;
|
||||
-N) etcdir="$2" ; all_options="${all_options} $1" ; shift ;;
|
||||
-N*) etcdir="${1#-?}" ;;
|
||||
-*) echo "Usage: regpkgset [options] set ..." ; bomb ;;
|
||||
*) break ;;
|
||||
esac
|
||||
all_options="${all_options} $1"
|
||||
shift
|
||||
done
|
||||
export DESTDIR
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: regpkgset pkgset..."
|
||||
exit 1
|
||||
echo "Usage: regpkgset [options] set ..."
|
||||
bomb
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
|
@ -59,10 +127,12 @@ all) list="base comp etc games man misc text" ;;
|
|||
*) list="$*" ;;
|
||||
esac
|
||||
|
||||
if [ x"${cache}" != x ]; then
|
||||
BUILD_INFO_CACHE="$(${MKTEMP} "/var/tmp/${0##*/}-BUILD_INFO.XXXXXX")"
|
||||
if ${cache} ; then
|
||||
BUILD_INFO_CACHE="$(${MKTEMP} "/var/tmp/${prog}-BUILD_INFO.XXXXXX")"
|
||||
export BUILD_INFO_CACHE
|
||||
{
|
||||
# These variables describe the build
|
||||
# environment, not the target.
|
||||
echo "OPSYS=$(${UNAME} -s)"
|
||||
echo "OS_VERSION=$(${UNAME} -r)"
|
||||
${MAKE} -f- all <<EOF
|
||||
|
@ -72,16 +142,58 @@ all:
|
|||
@echo MACHINE_ARCH=${MACHINE_ARCH}
|
||||
@echo MACHINE_GNU_ARCH=${MACHINE_GNU_ARCH}
|
||||
EOF
|
||||
# XXX: what's the point of reporting _PKGTOOLS_VER
|
||||
# when we roll everything by hand without using
|
||||
# the pkg tools?
|
||||
echo "_PKGTOOLS_VER=$(${PKG_CREATE} -V)"
|
||||
} > "${BUILD_INFO_CACHE}"
|
||||
fi
|
||||
|
||||
for pkgset in ${list}; do
|
||||
for pkg in $("${rundir}/listpkgs" "${pkgset}"); do
|
||||
"${rundir}/regpkg" ${verbose} "${pkgset}" "${pkg}"
|
||||
done
|
||||
#
|
||||
# For each pkgset mentioned in ${list}, get a list of all pkgs in the pkgset.
|
||||
#
|
||||
# Sort all the pkgs into dependency order (with prerequisite pkgs before
|
||||
# pkgs that depend on them).
|
||||
#
|
||||
# Invoke ${rundir}/regpkg for each pkg, taking care to do it in dependency
|
||||
# order. If there were any pkgs for which we failed to find dependency
|
||||
# information, handle them at the end.
|
||||
#
|
||||
pkgs="$( for pkgset in ${list}; do
|
||||
${HOST_SH} "${rundir}/listpkgs" "${pkgset}" || bomb
|
||||
done )"
|
||||
tsort_input="$( ${AWK} '{print $2 " " $1}' <"${rundir}/deps" || bomb )"
|
||||
tsort_output="$( echo "${tsort_input}" | ${TSORT} || bomb )"
|
||||
for pkg in ${tsort_output} ; do
|
||||
case "${nl}${pkgs}${nl}" in
|
||||
*"${nl}${pkg}${nl}"*)
|
||||
# We want this pkg.
|
||||
pkgset="${pkg%%-*}"
|
||||
${verbose} && echo "${prog}: registering ${pkg}"
|
||||
${HOST_SH} "${rundir}/regpkg" ${all_options} \
|
||||
"${pkgset}" "${pkg}" || bomb
|
||||
;;
|
||||
*) # pkg is mentioned in ${tsort_output} but not in ${pkgs}.
|
||||
# We do not want this pkg.
|
||||
;;
|
||||
esac
|
||||
done
|
||||
for pkg in ${pkgs} ; do
|
||||
case "${nl}${tsort_output}${nl}" in
|
||||
*"${nl}${pkg}${nl}"*)
|
||||
# pkg was in the tsort output, so it would have been
|
||||
# handled above.
|
||||
;;
|
||||
*) # This pkg was not in the tsort output.
|
||||
# This is probably an error, but process the
|
||||
# pkg anyway.
|
||||
echo >&2 "${prog}: WARNING: ${pkg} is not mentioned in deps file"
|
||||
pkgset="${pkg%%-*}"
|
||||
${verbose} && echo "${prog}: registering ${pkg}"
|
||||
${HOST_SH} "${rundir}/regpkg" ${all_options} \
|
||||
"${pkgset}" "${pkg}" || bomb
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
[ x"${BUILD_INFO_CACHE}" != x ] && rm -f "${BUILD_INFO_CACHE}"
|
||||
|
||||
exit 0
|
||||
|
|
Loading…
Reference in New Issue