212 lines
5.8 KiB
Bash
Executable file
212 lines
5.8 KiB
Bash
Executable file
#!/bin/sh
|
|
# $NetBSD: mkdatabase,v 1.4 2003/05/06 17:42:05 jmmv Exp $
|
|
#
|
|
# Script for generating a database with complete dependency information
|
|
# for a particular package
|
|
#
|
|
# Copyright (c) 2003 The NetBSD Foundation, Inc.
|
|
# All rights reserved.
|
|
#
|
|
# This code is derived from software contributed to The NetBSD Foundation
|
|
# by Dan McMahill.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions
|
|
# are met:
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
# 3. All advertising materials mentioning features or use of this software
|
|
# must display the following acknowledgement:
|
|
# This product includes software developed by the NetBSD
|
|
# Foundation, Inc. and its contributors.
|
|
# 4. Neither the name of The NetBSD Foundation nor the names of its
|
|
# contributors may be used to endorse or promote products derived
|
|
# from this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
|
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
|
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
# POSSIBILITY OF SUCH DAMAGE.
|
|
#
|
|
|
|
|
|
TMPDIR=${TMPDIR:-/tmp}
|
|
BMAKE=${BMAKE:-make}
|
|
AWK=${AWK:-/usr/bin/awk}
|
|
DATABASE=${DATABASE:-${TMPDIR}/pkgdb.$$}
|
|
EXPR=${EXPR:-expr}
|
|
|
|
# as of 2003-01-04, metapkgs/gnome gets to pass #6 so
|
|
# it is very likely that if you reach 25, something is broken
|
|
MAX_PASS=${MAX_PASS:-25}
|
|
|
|
prog=$0
|
|
|
|
usage(){
|
|
echo "$prog - Generates a complete dependency tree for a particular package"
|
|
echo "Usage: $prog [-a|--append] [-d|--debug] [-f|--database database]"
|
|
echo " "
|
|
echo " $prog -h|--help"
|
|
echo " "
|
|
echo " $prog -v|--version"
|
|
echo " "
|
|
echo "The options supported by $prog are: "
|
|
echo " "
|
|
echo " -a|--append Append to the database rather than overwriting it"
|
|
echo " "
|
|
echo " -d|--debug Enables debugging output"
|
|
echo " "
|
|
echo " -f|--database <file> Writes the database into file specified by <file>"
|
|
echo " "
|
|
echo " -h|--help Displays this help message"
|
|
echo " "
|
|
echo " -v|--version Displays the version of this script and exits."
|
|
echo " "
|
|
echo "Example: cd /usr/pkgsrc/graphics/gimp && $prog -d /tmp/gimp_database"
|
|
echo " "
|
|
}
|
|
|
|
clean_and_exit(){
|
|
exit 1
|
|
}
|
|
|
|
|
|
######################################################################
|
|
#
|
|
# Handle command line options
|
|
#
|
|
######################################################################
|
|
|
|
DEBUG=
|
|
append=no
|
|
|
|
while
|
|
test -n "$1"
|
|
do
|
|
case "$1"
|
|
in
|
|
|
|
# Append to the database
|
|
-a|--append)
|
|
append=yes
|
|
shift
|
|
;;
|
|
|
|
# Turn on debugging
|
|
-d|--debug)
|
|
DEBUG=yes
|
|
shift
|
|
;;
|
|
|
|
# Use the specified database file
|
|
-f|--database)
|
|
DATABASE=$2
|
|
shift 2
|
|
;;
|
|
|
|
# Help
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
|
|
# Version
|
|
-v|--version)
|
|
${AWK} '/^#[ \t]*\$NetBSD/ {gsub(/,v/,"",$3);printf("%s: Version %s, %s\n",$3,$4,$5); exit 0;}' $prog
|
|
exit 0
|
|
;;
|
|
|
|
-*) echo "$prog: ERROR: $1 is not a valid option"
|
|
usage
|
|
clean_and_exit
|
|
;;
|
|
|
|
*)
|
|
break
|
|
;;
|
|
|
|
esac
|
|
done
|
|
|
|
if [ "x$DEBUG" = "xyes" ]; then
|
|
set -v
|
|
fi
|
|
|
|
if [ ! -d $TMPDIR ]; then
|
|
mkdir -p $TMPDIR
|
|
fi
|
|
|
|
prompt="----> "
|
|
|
|
case ${DATABASE} in
|
|
/*)
|
|
# we already have the absolute path to the database file
|
|
# so do nothing
|
|
;;
|
|
|
|
*)
|
|
# make sure we have the full path to the database file
|
|
DATABASE=`pwd`/${DATABASE}
|
|
;;
|
|
esac
|
|
|
|
|
|
if [ "X$append" = "Xyes" ]; then
|
|
echo "$prompt Appending to database in ${DATABASE}"
|
|
if [ ! -f ${DATABASE} ]; then
|
|
touch ${DATABASE}
|
|
fi
|
|
# make sure we haven't already been listed before
|
|
# appending ourselves.
|
|
here=`pwd`
|
|
tmp1=`dirname $here`
|
|
pkgcat=`basename $tmp1`
|
|
pkg=`basename $here`
|
|
pkgpath=$pkgcat/$pkg
|
|
if [ "x$DEBUG" = "xyes" ]; then
|
|
echo "Looking for $pkgpath before appending"
|
|
fi
|
|
if grep "^index $pkgpath " ${DATABASE} >/dev/null 2>&1 ; then
|
|
echo "$prompt $pkgpath has already been depended. Skipping..."
|
|
exit 0
|
|
else
|
|
${BMAKE} print-summary-data >> ${DATABASE} || exit 1
|
|
fi
|
|
else
|
|
echo "$prompt Creating new database in ${DATABASE}"
|
|
${BMAKE} print-summary-data > ${DATABASE} || exit 1
|
|
fi
|
|
here=`pwd`
|
|
echo "$prompt Depending in $here (pass #1)"
|
|
dirs=`${AWK} -f ../../mk/scripts/chkdatabase.awk debug=${DEBUG} ${DATABASE}`
|
|
pass=2
|
|
while [ ! -z "$dirs" -a $pass -lt ${MAX_PASS} ]; do
|
|
for d in $dirs ; do
|
|
echo "$prompt Depending in ../../$d (pass #$pass)" ;\
|
|
cd ../../$d && ${BMAKE} print-summary-data >> ${DATABASE} || exit 1
|
|
cd $here
|
|
done
|
|
dirs=`${AWK} -f ../../mk/scripts/chkdatabase.awk debug=${DEBUG} ${DATABASE}`
|
|
pass=`${EXPR} $pass + 1`
|
|
done
|
|
|
|
if [ $pass -eq ${MAX_PASS} ]; then
|
|
echo "ERROR: You have reached $pass times through the dependency tree"
|
|
echo " and _still_ not finished. This is probably due to a broken"
|
|
echo " set of dependencies. You may wish to examine the partial"
|
|
echo " database left in ${DATABASE}"
|
|
exit 1
|
|
else
|
|
echo "Complete dependency database left in ${DATABASE}"
|
|
fi
|
|
|