summaryrefslogtreecommitdiff
path: root/pkgtools/pkgchk/files/pkgchk.sh
diff options
context:
space:
mode:
Diffstat (limited to 'pkgtools/pkgchk/files/pkgchk.sh')
-rwxr-xr-xpkgtools/pkgchk/files/pkgchk.sh593
1 files changed, 0 insertions, 593 deletions
diff --git a/pkgtools/pkgchk/files/pkgchk.sh b/pkgtools/pkgchk/files/pkgchk.sh
deleted file mode 100755
index 3df127cb105..00000000000
--- a/pkgtools/pkgchk/files/pkgchk.sh
+++ /dev/null
@@ -1,593 +0,0 @@
-#!/bin/sh -e
-#
-# $Id: pkgchk.sh,v 1.49 2004/02/07 21:40:17 grant Exp $
-#
-# TODO: Handle updates with dependencies via binary packages
-
-PATH=/usr/sbin:/usr/bin:${PATH}
-
-check_packages_installed()
- {
- UPDATE_TODO=
- MISSING_TODO=
- MISMATCH_TODO=
-
- for pkgdir in $* ; do
-
- if [ ! -f $PKGSRCDIR/$pkgdir/Makefile ];then
- echo "WARNING: No $pkgdir/Makefile - package moved or obsolete?"
- continue
- fi
- cd $PKGSRCDIR/$pkgdir
- if [ -n "$opt_B" ];then
- extract_make_vars PKGNAME FILESDIR PKGDIR DISTINFO_FILE PATCHDIR
- else
- extract_make_vars PKGNAME
- fi
- if [ -z "$PKGNAME" ]; then
- echo "Unable to extract PKGNAME for $pkgdir"
- exit 1
- fi
- if [ ! -d $PKG_DBDIR/$PKGNAME ];then
- echo_n "$PKGNAME: "
- pkg=`echo $PKGNAME | sed 's/-[0-9].*//'`
- pkginstalled=`sh -c "${PKG_INFO} -e $pkg" || true`
- INSTALL=
- if [ -n "$pkginstalled" ];then
- echo_n "version mismatch - $pkginstalled"
- MISMATCH_TODO="$MISMATCH_TODO $pkginstalled"
- UPDATE_TODO="$UPDATE_TODO $PKGNAME $pkgdir"
- else
- echo_n "missing"
- MISSING_TODO="$MISSING_TODO $PKGNAME $pkgdir"
- fi
- if [ -f $PACKAGES/All/$PKGNAME.tgz ] ;then
- echo_n " (binary package available)"
- fi
- echo
- else
- if [ -n "$opt_B" ];then
- current_build_ver=`get_build_ver`
- installed_build_ver=`sed "s|^[^:]*/[^:]*:||" $PKG_DBDIR/$PKGNAME/+BUILD_VERSION`
- if [ x"$current_build_ver" != x"$installed_build_ver" ];then
- echo "$PKGNAME: build version information mismatch"
- MISMATCH_TODO="$MISMATCH_TODO $PKGNAME"
- # should we mark this pkg to be updated if -u is given ??
- elif [ -n "$opt_v" ];then
- echo "$PKGNAME: OK"
- fi
- elif [ -n "$opt_v" ];then
- echo "$PKGNAME: OK"
- fi
- fi
- done
- }
-
-list_packages()
- {
- CHECKLIST=' '
- for pkgdir in $* ; do
-
- if [ ! -f $PKGSRCDIR/$pkgdir/Makefile ];then
- echo "WARNING: No $pkgdir/Makefile - package moved or obsolete?"
- continue
- fi
- cd $PKGSRCDIR/$pkgdir
- extract_make_vars PKGNAME
- if [ -z "$PKGNAME" ]; then
- echo "Unable to extract PKGNAME for $pkgdir"
- exit 1
- fi
- if [ ! -f $PACKAGES/All/$PKGNAME.tgz ] ;then
- echo " ** $PKGNAME - binary package missing"
- if [ -n "$opt_k" ];then
- exit 1
- fi
- continue
- fi
- if [ -n "$opt_v" ];then
- echo "$PKGNAME.tgz: found"
- fi
- CHECKLIST="$CHECKLIST$PKGNAME ";
- if [ $PKGNAME = 'samba-2.2.8anb4.tgz' ] ; then
- echo XXX
- break
- fi
- done
- while [ "$CHECKLIST" != ' ' ]; do
- PKGLIST="$PKGLIST$CHECKLIST"
- NEXTCHECK=' '
- for pkg in $CHECKLIST ; do
- if [ ! -f $PACKAGES/All/$pkg.tgz ] ; then
- echo " ** $PKGNAME - binary package (dependency) missing"
- if [ -n "$opt_k" ];then
- exit 1
- fi
- continue
- fi
- for dep in `pkg_info -N $PACKAGES/All/$pkg.tgz | ${SED} '1,/Built using:/d' | ${GREP} ..` ; do
- case "$PKGLIST$NEXTCHECK" in
- *\ $dep\ *)
- if [ -n "$opt_v" ];then
- echo "Duplicate depend $dep"
- fi;;
- *)
- NEXTCHECK="$NEXTCHECK$dep "
- if [ -n "$opt_v" ];then
- echo "Add depend $dep"
- fi;;
- esac
- done
- done
- CHECKLIST="$NEXTCHECK"
- done
- for pkg in $PKGLIST ; do
- echo $pkg.tgz
- done
- }
-
-echo_n()
- {
- echo $ac_n "$*"$ac_c
- }
-
-extract_make_vars()
- {
- MAKEDATA=".PHONY: x\nx:\n";
- for var in $* ; do
- MAKEDATA=$MAKEDATA"\t@echo $var=\${$var}\n"
- done
- eval `printf "$MAKEDATA" | ${MAKE} -f - -f Makefile x | \
- sed -e 's/[^=]*=/&"/' -e 's/$/"/'`
- }
-
-# $1 = name of variable
-# $2 = default value
-extract_mk_dir_var()
- {
- if [ -z "`eval echo \\$$1`" ] ; then
- eval `printf "BSD_PKG_MK=1\n.PHONY: x\nx:\n\t@echo $1="'$'"{$1}\n" | ${MAKE} -f - -f $MAKECONF x`
- if [ -z "`eval echo \\$$1`" ]; then
- eval "$1=$2"
- fi
- if [ ! -d `eval echo \\$$1` ];then
- echo "Unable to locate $1 `eval echo \\$$1`"
- exit 1;
- fi
- fi
- }
-
-extract_variables()
- {
- extract_mk_dir_var PKGSRCDIR /usr/pkgsrc
- extract_mk_dir_var PKG_DBDIR /var/db/pkg
-
- # Now we have PKGSRCDIR, use it to determine PACKAGES, and PKGCHK_CONF
- # as well as AWK, GREP, SED, PKGCHK_TAGS and PKGCHK_NOTAGS
- #
-
- cd $PKGSRCDIR/pkgtools/pkgchk
- extract_make_vars AWK GREP SED PACKAGES PKG_INFO PKG_ADD PKG_DELETE \
- PKGCHK_CONF PKGCHK_TAGS PKGCHK_NOTAGS
-
- if [ -z "$PACKAGES" ];then
- PACKAGES=$PKGSRCDIR/packages
- fi
-
- if [ -z "$PKGCHK_CONF" ];then
- PKGCHK_CONF=$PKGSRCDIR/pkgchk.conf
- fi
- }
-
-get_build_ver()
- {
- files=""
- for f in Makefile ${FILESDIR}/* ${PKGDIR}/*; do
- if [ -f $f ];then
- files="$files $f"
- fi
- done
- if [ -f ${DISTINFO_FILE} ]; then
- for f in `${AWK} 'NF == 4 && $3 == "=" { gsub("[()]", "", $2); print $2 }' < ${DISTINFO_FILE}`; do
- if [ -f ${PATCHDIR}/$f ]; then
- files="$files ${PATCHDIR}/$f";
- fi;
- done
- fi
- if [ -d ${PATCHDIR} ]; then
- for f in ${PATCHDIR}/patch-*; do
- case $f in
- *.orig|*.rej|*~) ;;
- ${PATCHDIR}/patch-local-*)
- files="$files $f" ;;
- esac
- done
- fi
- cat $files | ${GREP} '\$NetBSD'
- }
-
-pkg_fetch()
- {
- PKGNAME=$1
- PKGDIR=$2
-
- run_cmd "cd $PKGSRCDIR/$PKGDIR && ${MAKE} fetch-list | sh"
- if [ -n "$FAIL" ]; then
- FAIL_DONE=$FAIL_DONE" "$PKGNAME
- else
- FETCH_DONE=$FETCH_DONE" "$PKGNAME
- fi
- }
-
-pkg_install()
- {
- PKGNAME=$1
- PKGDIR=$2
- INSTALL=$3
-
- if [ -d $PKG_DBDIR/$PKGNAME ];then
- echo "$PKGNAME installed in previous stage"
- elif [ -n "$opt_b" -a -f $PACKAGES/All/$PKGNAME.tgz ] ; then
- if [ $INSTALL = Update ];then
- PKG=`echo $PKGNAME | sed 's/-[0-9].*//'`
- run_cmd "${PKG_DELETE} $PKG" 1
- if [ -n "$FAIL" ]; then
- echo "Can only update packages with dependencies via -s"
- exit 1
- fi
- fi
- if [ -n "$saved_PKG_PATH" ] ; then
- export PKG_PATH=$saved_PKG_PATH
- fi
- run_cmd "cd $PACKAGES/All && ${PKG_ADD} $PKGNAME.tgz"
- if [ -n "$saved_PKG_PATH" ] ; then
- unset PKG_PATH
- fi
- elif [ -n "$opt_s" ]; then
- run_cmd "cd $PKGSRCDIR/$PKGDIR && ${MAKE} update CLEANDEPENDS=yes"
- fi
-
- if [ -z "$opt_n" -a ! -d $PKG_DBDIR/$PKGNAME ];then
- FAIL=1
- fi
-
- if [ -n "$FAIL" ]; then
- FAIL_DONE=$FAIL_DONE" "$PKGNAME
- elif [ $INSTALL = Update ];then
- UPDATE_DONE=$UPDATE_DONE" "$PKGNAME
- else
- INSTALL_DONE=$INSTALL_DONE" "$PKGNAME
- fi
- }
-
-pkg_fetchlist()
- {
- PKGLIST=$@
- echo "[ Fetch...]"
- while [ $# != 0 ]; do
- pkg_fetch $1 $2
- shift ; shift;
- done
- }
-
-pkg_installlist()
- {
- INSTALL=$1 ; shift
- echo "[ $INSTALL...]" ;
- while [ $# != 0 ]; do
- pkg_install $1 $2 $INSTALL
- shift ; shift;
- done
- }
-
-run_cmd()
- {
- FAIL=
- if [ -n "$2" ]; then
- FAILOK=$2
- else
- FAILOK=$opt_k
- fi
- echo $1
- if [ -z "$opt_n" ];then
- if [ -n "$opt_L" ] ; then
- sh -c "$1" >> "$opt_L" 2>&1 || FAIL=1
- else
- sh -c "$1" || FAIL=1
- fi
- if [ -n "$FAIL" ] ; then
- echo "** '$1' failed"
- if [ -n "$opt_L" ] ; then
- tail -100 "$opt_L" | egrep -v '^(\*\*\* Error code 1|Stop\.)' |\
- tail -40
- fi
- if [ "$FAILOK" != 1 ]; then
- exit 1
- fi
- fi
- fi
- }
-
-args=`getopt BC:D:L:U:abcfghiklnrsuv $*`
-if [ $? != 0 ]; then
- opt_h=1
-fi
-set -- $args
-while [ $# != 0 ]; do
- case "$1" in
- -B ) opt_B=1 ; opt_i=1 ;;
- -C ) opt_C="$2" ; shift;;
- -D ) opt_D="$2" ; shift;;
- -L ) opt_L="$2" ; shift;;
- -U ) opt_U="$2" ; shift;;
- -a ) opt_a=1 ; opt_c=1 ;;
- -b ) opt_b=1 ;;
- -c ) opt_c=1 ;;
- -f ) opt_f=1 ;;
- -g ) opt_g=1 ;;
- -h ) opt_h=1 ;;
- -i ) opt_i=1 ;;
- -k ) opt_k=1 ;;
- -l ) opt_l=1 ;;
- -n ) opt_n=1 ;;
- -r ) opt_r=1 ; opt_i=1 ;;
- -s ) opt_s=1 ;;
- -u ) opt_u=1 ; opt_i=1 ;;
- -v ) opt_v=1 ;;
- -- ) break ;;
- esac
- shift
-done
-
-if [ -z "$opt_b" -a -z "$opt_s" ];then
- opt_b=1; opt_s=1;
-fi
-
-if [ -z "$opt_a" -a -z "$opt_c" -a -z "$opt_g" -a -z "$opt_i" -a -z "$opt_l" ];then
- echo "Must specify at least one of -a, -c, -g, -i, -l, or -u";
- echo
- opt_h=1;
-fi
-
-if [ -n "$opt_h" -o $# != 1 ];then
- echo 'Usage: pkg_chk [opts]
- -B Check the "Build version" of packages (implies -i)
- -C conf Use pkgchk.conf file 'conf'
- -D tags Comma separated list of additional pkgchk.conf tags to set
- -L file Redirect output from commands run into file (should be fullpath)
- -U tags Comma separated list of pkgchk.conf tags to unset
- -a Add all missing packages (implies -c)
- -b Limit installations to binary packages
- -c Check installed packages against pkgchk.conf
- -f Perform a 'make fetch' for all required packages
- -g Generate an initial pkgchk.conf file
- -h This help
- -i Check versions of installed packages (not using pkgchk.conf)
- -k Continue with further packages if errors are encountered
- -l List binary packages including dependencies (implies -c)
- -n Display actions that would be taken, but do not perform them
- -r Recursively remove mismatches (use with care) (implies -i)
- -s Limit installations to building from source
- -u Update all mismatched packages (implies -i)
- -v Verbose
-
-pkg_chk verifies installed packages against pkgsrc.
-The most common usage is 'pkg_chk -i' to check all installed packages.
-For more advanced usage, including defining a set of desired packages based
-on hostname and type, see pkg_chk(8).
-'
- exit 1
-fi
-
-# Hide PKG_PATH to avoid breakage in 'make' calls
-saved_PKG_PATH=$PKG_PATH
-unset PKG_PATH || true
-
-test -n "$MAKE" || MAKE="@MAKE@"
-test -n "$MAKECONF" || MAKECONF="@MAKECONF@"
-if [ ! -f $MAKECONF ] ; then
- if [ -f /etc/mk.conf ] ; then
- MAKECONF=/etc/mk.conf
- else
- MAKECONF=/dev/null
- fi
-fi
-
-# grabbed from GNU configure
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-fi
-
-if [ -n "$opt_L" ] ; then
- rm -f $opt_L
-fi
-
-extract_variables
-if [ -n "$opt_C" ] ; then
- PKGCHK_CONF=$opt_C
-fi
-
-cd $PKGSRCDIR
-real_pkgsrcdir=`pwd`
-
-if [ -n "$opt_i" ];then
- PKGDIRLIST=`sh -c "${PKG_INFO} -B \*" | ${AWK} -F= '/PKGPATH=/{print $2" "}'`
-fi
-
-if [ -n "$opt_g" ]; then
- if [ -r $PKGCHK_CONF ]; then
- mv $PKGCHK_CONF ${PKGCHK_CONF}.old
- fi
- echo "# Generated automatically at `date`" > $PKGCHK_CONF
- ${PKG_INFO} -qBa | ${AWK} '/^PKGPATH/ { sub("PKGPATH=[ ]*", ""); print }' >> $PKGCHK_CONF
-fi
-
-if [ -n "$opt_c" -o -n "$opt_l" ];then
-
- if [ ! -r $PKGCHK_CONF ];then
- echo "Unable to read PKGCHK_CONF '$PKGCHK_CONF'"
- exit 1;
- fi
-
- # Determine list of tags
- #
- TAGS="`hostname | sed -e 's,\..*,,'`,`hostname`,`uname -srm | ${AWK} '{print $1"-"$2"-"$3","$1"-"$2","$1"-"$3","$1","$2","$3}'`"
- if [ -f /usr/X11R6/lib/libX11.so -o -f /usr/X11R6/lib/libX11.a ];then
- TAGS="$TAGS,x11"
- fi
- if [ -n "$PKGCHK_TAGS" ];then
- TAGS="$TAGS,$PKGCHK_TAGS"
- fi
- if [ -n "$PKGCHK_NOTAGS" ];then
- if [ -n "$opt_U" ];then
- opt_U="$opt_U,$PKGCHK_NOTAGS"
- else
- opt_U="$PKGCHK_NOTAGS"
- fi
- fi
- if [ -n "$opt_D" ];then
- TAGS="$TAGS,$opt_D"
- fi
- if [ -n "$opt_v" ];then
- echo "set TAGS=$TAGS"
- echo "unset TAGS=$opt_U"
- fi
-
- # Extract list of valid pkgdirs (skip any 'alreadyset' in $PKGDIRLIST)
- #
- PKGDIRLIST="$PKGDIRLIST "`${AWK} -v alreadyset="$PKGDIRLIST" -v setlist=$TAGS -v unsetlist=$opt_U '
- BEGIN {
- split(alreadyset, tmp, " ");
- for (tag in tmp) { skip[tmp[tag]] = 1; }
-
- split(setlist, tmp, ",");
- for (tag in tmp) { taglist[tmp[tag]] = 1; }
-
- split(unsetlist, tmp, ",");
- for (tag in tmp) { skip[tmp[tag]] = 1; delete taglist[tmp[tag]] }
-
- taglist["*"] = "*"
- }
- function and_expr_with_dict(expr, dict, ary, i, r) {
- split(expr,ary,/\\+/);
- r = 1;
- for (i in ary)
- if (! (ary[i] in dict))
- { r = 0; break ;}
- return r;
- }
- {
- sub("#.*", "");
- if (skip[$1])
- { next; }
- need = 0;
- for (f = 1 ; f<=NF ; ++f) { # For each word on the line
- if (sub("^-", "", $f)) { # If it begins with a '-'
- if ($f ~ /\\+/) { # If it is a ANDed tag expression
- if (and_expr_with_dict($f, taglist))
- next; # If it is true, discard
- } else { # If it is a simple tag
- if ($f in taglist) # If match, discard
- next;
- }
- } else {
- if ($f ~ /\\+/) { # If it is a ANDed tag expression
- if (and_expr_with_dict($f, taglist))
- need = 1; # If it is true, note needed
- } else { # If it is a simple tag
- if ($f in taglist) # If match, note needed
- need = 1;
- }
- }
- }
- if (NF == 1 || need)
- { print $1 }
- }
- ' < $PKGCHK_CONF
- `
-fi
-
-if [ -n "$opt_l" ] ; then
- list_packages $PKGDIRLIST
-else
- # Check $PKGDIRLIST packages are installed and correct version
- #
- check_packages_installed $PKGDIRLIST
-fi
-
-if [ -n "$opt_r" -a -n "$MISMATCH_TODO" ]; then
- run_cmd "${PKG_DELETE} -r $MISMATCH_TODO" 1
- if [ -n "$opt_a" ] ; then
- echo "[ Rechecking packages after deletions ]"
- check_packages_installed $PKGDIRLIST # May need to add more packages
- fi
-fi
-
-UPDATE_FETCH_TODO="$UPDATE_TODO"
-if [ -n "$UPDATE_TODO" ];then
- # Generate list including packages which depend on updates
- #
- set -- $UPDATE_TODO
- while [ $# != 0 ]; do
- PKGNAME=`echo $1 | sed 's/-[0-9].*//'`
- if [ -f $PKG_DBDIR/$PKGNAME-[0-9]*/+REQUIRED_BY ];then
- LIST="$LIST$1|$2|`cat $PKG_DBDIR/$PKGNAME-[0-9]*/+REQUIRED_BY | xargs echo`\n"
- else
- LIST="$LIST$1|$2\n"
- fi
- shift ; shift;
- done
-
- # drop any packages whose 'parents' are also to be updated
- #
- UPDATE_TODO=`printf "$LIST" | ${AWK} -F '|' '
- {
- pkg2dir[$1] = $2
- split($3, deplist, " ")
- for (pkg in deplist)
- {
- dep = deplist[pkg]
- sub("-[0-9].*", "", dep) # Strip version
- covered[dep] = 1
- }
- }
- END {
- for (pkg in pkg2dir)
- {
- chk = pkg
- sub("-[0-9].*", "", chk); # Strip version
- if (!covered[chk])
- print pkg" "pkg2dir[pkg]
- }
- }
- '`
-fi
-
-if [ -n "$opt_f" ] ; then
- pkg_fetchlist $UPDATE_FETCH_TODO
- pkg_fetchlist $MISSING_TODO
-fi
-if [ -n "$opt_u" ] ; then
- pkg_installlist Update $UPDATE_TODO
-fi
-if [ -n "$opt_a" ] ; then
- pkg_installlist Install $MISSING_TODO
-fi
-
-if [ -n "$UPDATE_DONE" ];then
- echo "Updated:$UPDATE_DONE"
-fi
-if [ -n "$INSTALL_DONE" ];then
- echo "Installed:$INSTALL_DONE"
-fi
-if [ -n "$FAIL_DONE" ];then
- echo "Failed:$FAIL_DONE"
-fi