#!/bin/sh # Copyright Gavan Fantom, 2004 # # $Id: update,v 1.2 2004/11/28 02:08:30 gavan Exp $ PKG_DBDIR=/var/db/pkg PKGSRCDIR=/usr/pkgsrc PACKAGEDIR=$PKGSRCDIR/packages MAKE=make findreqs() { for REQNAME in `pkg_info -qR $1` do echo "$REQNAME" findreqs $REQNAME done } makebuildlist_normal() { BUILDLIST_TMP=`pkg_chk -n -fci | grep "^cd " | grep "make fetch-list" | sed -e "s/^cd \(.*\) &&.*$/\\1/" -e "s/\/usr\/pkgsrc\///"` } makebuildlist_all() { BUILDLIST_TMP=`sed -n -e "s/#.*\$//" -e "/^./p" <${PKGSRCDIR}/pkgchk.conf | awk "{print \\$1}"` } makebuildlist() { makebuildlist_${ALL_FLAG} for PKG in $BUILDLIST_TMP do BUILDLIST_ALL="$BUILDLIST_ALL $PKG" PKGNAME=`cd $PKGSRCDIR/$PKG && ${MAKE} show-var VARNAME=PKGBASE` for REQ in `findreqs $PKGNAME` do REQPATH=`pkg_info -qB $REQ | grep PKGPATH | sed "s/PKGPATH=//"` if ! echo "$BUILDLIST_ALL" | grep -q $REQPATH then BUILDLIST_ALL="$BUILDLIST_ALL $REQPATH" fi done done for PKG in `echo "$BUILDLIST_ALL " | sort -u -R ' '` do PKGNAME=`cd $PKGSRCDIR/$PKG && ${MAKE} show-var VARNAME=PKGBASE` if [ "X$PKGNAME" != "X" ] then if [ ! -e $PKG_DBDIR/$PKGNAME-[0-9]*/+REQUIRED_BY ] then BUILDLIST="$BUILDLIST $PKG" fi fi done } COMMAND= ALL_FLAG=normal HALT_FLAG= while : do case $1 in -a) ALL_FLAG="all" shift ;; -n) COMMAND="echo" shift ;; -h) HALT_FLAG="yes" shift ;; *) break esac done if ! pkg_info pkg_chk >/dev/null then echo "Please install pkgtools/pkg_chk" exit 1 fi if ! pkg_info pkg_comp >/dev/null then echo "Please install and configure pkgtools/pkg_comp" exit 1 fi if ! pkg_info pkglint >/dev/null then echo "Please install pkgtools/pkglint" exit 1 fi echo -n "Checking packages which require work: " makebuildlist if [ "X$BUILDLIST" = "X" ] then echo "Nothing to be done." exit 0 fi echo "$BUILDLIST" echo if [ -n "${HALT_FLAG}" ] then exit 0 fi echo "Removing old binary packages" lintpkgsrc -p -r echo "Removing binary packages which lack a full dependency chain" cd $PACKAGEDIR/All DONE=no while [ "X$DONE" = "Xno" ] do DONE=yes for PKG in *.tgz do for DEP in `pkg_info -. -qN $PKG` do if [ ! -e "$DEP.tgz" ] then echo "Deleting $PKG" rm -f $PACKAGEDIR/*/$PKG DONE=no continue 2 fi done done done if [ "X$BUILDLIST" != "X" ] then echo "Packages which need building: $BUILDLIST" echo "Using pkg_comp to build packages" ${COMMAND} pkg_comp auto $BUILDLIST fi for PKG in $BUILDLIST do PKGNAME=`cd $PKGSRCDIR/$PKG && ${MAKE} show-var VARNAME=PKGNAME` if [ ! -e $PACKAGEDIR/All/$PKGNAME.tgz ] then MISSING="$MISSING $PKG" fi done if [ "X$MISSING" != "X" ] then echo -n "Failed to build the following packages: " echo $MISSING exit 1 fi echo "System ready to be updated. Run pkg_chk -r ; pkg_chk -akb"