230 lines
6.6 KiB
Bash
230 lines
6.6 KiB
Bash
#!/bin/sh
|
|
# $NetBSD: pre-build,v 1.39 2004/04/19 23:09:55 seb Exp $
|
|
#
|
|
# Clean up system to be ready for bulk pkg build
|
|
#
|
|
# (c) 2000 Hubert Feyrer, All Rights Reserved.
|
|
#
|
|
|
|
#set -v # Debug
|
|
|
|
# Pull in USR_PKGSRC, CVS_USER:
|
|
if [ -f "$BULK_BUILD_CONF" ]; then
|
|
. $BULK_BUILD_CONF
|
|
else
|
|
. `dirname $0`/build.conf
|
|
fi
|
|
|
|
PRUNEDISTFILES=${PRUNEDISTFILES:-"no"}
|
|
PRUNEPACKAGES=${PRUNEPACKAGES:-"no"}
|
|
PRUNELINKS=${PRUNEPACKAGES:-"no"}
|
|
|
|
PKGLINT_PKG_DIR=${USR_PKGSRC}/pkgtools/pkglint
|
|
|
|
# Extract the name of the files used for the build log and broken build log.
|
|
# These have defaults set by bsd.bulk-pkg.mk and may be overridden in
|
|
# /etc/mk.conf
|
|
BROKENF=`( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} show-var VARNAME=BROKENFILE )`;
|
|
export BROKENF
|
|
if [ "$BROKENF" = "" ]; then
|
|
echo "Had problems determining the name of the .broken files"
|
|
exit 1
|
|
fi
|
|
BLDLOG=`( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} show-var VARNAME=BUILDLOG )`;
|
|
if [ "$BLDLOG" = "" ]; then
|
|
echo "Had problems determining the name of the .make files"
|
|
exit 1
|
|
fi
|
|
STARTFILE=`( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} show-var VARNAME=STARTFILE )`;
|
|
if [ "$STARTFILE" = "" ]; then
|
|
echo "Had problems determining the name of the .start file"
|
|
exit 1
|
|
fi
|
|
|
|
LOCALBASE=`( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} show-var VARNAME=LOCALBASE )`;
|
|
X11BASE=`( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} show-var VARNAME=X11BASE )`;
|
|
|
|
# On non-NetBSD platforms we need to keep the bootstrap-files!
|
|
if [ x"$BMAKE" = x"bmake" ]; then
|
|
( cd $LOCALBASE && tar cf /tmp/$$.tar \
|
|
sbin/mtree sbin/pkg_add sbin/pkg_admin sbin/pkg_create \
|
|
sbin/pkg_delete sbin/pkg_info sbin/pkg_view sbin/linkfarm \
|
|
share/mk/sys.mk share/mk/bsd.dep.mk share/mk/bsd.depall.mk \
|
|
share/mk/bsd.files.mk share/mk/bsd.hostprog.mk \
|
|
share/mk/bsd.doc.mk share/mk/bsd.inc.mk share/mk/bsd.info.mk \
|
|
share/mk/bsd.kernobj.mk share/mk/bsd.kinc.mk \
|
|
share/mk/bsd.kmod.mk share/mk/bsd.lib.mk \
|
|
share/mk/bsd.links.mk share/mk/bsd.man.mk \
|
|
share/mk/bsd.nls.mk share/mk/bsd.obj.mk \
|
|
share/mk/bsd.prog.mk share/mk/bsd.subdir.mk \
|
|
share/mk/bsd.sys.mk share/mk/bsd.own.mk \
|
|
bin/bmake bin/ftp bin/digest bin/nbsed bin/install-sh \
|
|
bin/pax bin/tar bin/cpio man/cat1/ftp.1 man/cat1/pax.0 \
|
|
man/cat1/tar.0 man/cat1/cpio.0 man/cat1/pkg_add.0 \
|
|
man/cat1/pkg_admin.0 man/cat1/pkg_create.0 \
|
|
man/cat1/pkg_delete.0 man/cat1/pkg_info.0 \
|
|
man/cat1/pkg_view.0 man/cat1/linkfarm.0 \
|
|
man/man1/digest.1 man/man1/pax.1 man/man1/cpio.1 \
|
|
man/man1/tar.1 man/man1/nbsed.1 man/man1/pkg_add.1 \
|
|
man/man1/pkg_admin.1 man/man1/pkg_create.1 \
|
|
man/man1/pkg_delete.1 man/man1/pkg_info.1 \
|
|
man/man1/pkg_view.1 man/man1/linkfarm.1 man/cat8/mtree.0 \
|
|
man/man8/mtree.8 man/cat7/packages.0 )
|
|
fi
|
|
|
|
#
|
|
# Clean out everything and its mother
|
|
#
|
|
PKG_DBDIR=`(cd ${PKGLINT_PKG_DIR}; ${BMAKE} show-var VARNAME=PKG_DBDIR)`
|
|
DEPOTBASE=`(cd ${PKGLINT_PKG_DIR}; ${BMAKE} show-var VARNAME=DEPOTBASE)`
|
|
|
|
for dbdir in ${PKG_DBDIR} ${DEPOTBASE}; do
|
|
echo Removing all installed packages in $dbdir
|
|
if [ -d $dbdir ]; then
|
|
cd $dbdir
|
|
for pkg in *
|
|
do
|
|
if `pkg_info -K $dbdir -qe $pkg`; then
|
|
echo pkg_delete -r $pkg
|
|
pkg_delete -K $dbdir -r $pkg
|
|
fi
|
|
done
|
|
#
|
|
# this should have removed everything.
|
|
# Now force any broken pkgs to deinstall.
|
|
#
|
|
for pkg in *
|
|
do
|
|
if `pkg_info -K $dbdir -qe $pkg`; then
|
|
echo pkg_delete -f $pkg
|
|
pkg_delete -K $dbdir -f $pkg
|
|
fi
|
|
done
|
|
|
|
# We've tried our best to get rid of the pkgs, now do it
|
|
# the hard way. If it wasn't for stuff in $X11BASE, I
|
|
# wouldn't have hard feelings about this!
|
|
rm -fr *
|
|
fi
|
|
done
|
|
|
|
cd $LOCALBASE && rm -fr * && rm -fr .??*;
|
|
if [ x"$BMAKE" = x"bmake" ]; then
|
|
( cd $LOCALBASE && tar xf /tmp/$$.tar )
|
|
fi
|
|
|
|
# Stuff known to be broken
|
|
rm -fr $X11BASE/share/gimp
|
|
rm -fr $X11BASE/share/gnome
|
|
rm -fr $X11BASE/share/kde
|
|
rm -fr $X11BASE/share/netscape
|
|
rm -fr /var/tmp/inst*
|
|
rm -fr $X11BASE/lib/libgimp* # gimp doesn't build with old libs around
|
|
rm -fr /nonexistent # broken useradd on pop3d
|
|
rm -fr /home/majordom # mail/majordomo pkg
|
|
rm -fr /home/nut # sysutils/ups-net
|
|
rm -fr /var/wwwoffle # www/wwwoffle
|
|
rm -fr /tmp/config-guess-*
|
|
rm -fr /tmp/mod*
|
|
|
|
|
|
# Clean up state files
|
|
cd ${USR_PKGSRC}
|
|
rm -f $BROKENF */*/$BROKENF
|
|
rm -f $BLDLOG */*/$BLDLOG
|
|
rm -f $STARTFILE
|
|
|
|
|
|
|
|
|
|
#
|
|
# Install cvs package and do a cvs update here
|
|
#
|
|
if [ "$CVS_USER" != "" ]; then
|
|
if [ ! -f /usr/bin/cvs ]; then
|
|
echo Installing required cvs pkgs for CVS update
|
|
( cd ${USR_PKGSRC}/devel/cvs ; ${BMAKE} bulk-install )
|
|
fi
|
|
if [ ! -f /usr/bin/ssh ]; then
|
|
echo Installing required ssh pkgs for CVS update
|
|
( cd ${USR_PKGSRC}/security/ssh ; ${BMAKE} bulk-install )
|
|
fi
|
|
echo Performing CVS update - this will take some time
|
|
su - ${CVS_USER} -c "stty sane ; cd ${USR_PKGSRC} ; \
|
|
env CVS_RSH=ssh cvs -q update -Pd ${CVS_FLAGS} || exit 0"
|
|
if [ $? != 0 ]
|
|
then
|
|
echo CVS update not successful, aborting.
|
|
exit 1
|
|
fi
|
|
echo CVS update done.
|
|
fi
|
|
|
|
#
|
|
# Remove old/broken distfiles and binary packages
|
|
#
|
|
DISTDIR=`( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} show-var VARNAME=DISTDIR )`;
|
|
PACKAGES=`( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} show-var VARNAME=PACKAGES )`;
|
|
|
|
case "$PRUNEDISTFILES" in
|
|
yes|YES)
|
|
echo "Removing old/broken distfiles"
|
|
( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} PRECLEAN=yes bulk-install )
|
|
lintpkgsrc -K $PACKAGES -P $USR_PKGSRC -M $DISTDIR -o -m -r
|
|
echo done.
|
|
;;
|
|
*)
|
|
echo "Skipping distfile pruning."
|
|
;;
|
|
esac
|
|
|
|
case "$PRUNEPACKAGES" in
|
|
yes|YES)
|
|
echo "Removing old (out of date) binary packages"
|
|
( cd ${PKGLINT_PKG_DIR} ; ${BMAKE} PRECLEAN=yes bulk-install )
|
|
lintpkgsrc -K $PACKAGES -P $USR_PKGSRC -M $DISTDIR -p -r
|
|
echo done.
|
|
;;
|
|
*)
|
|
echo "Skipping packages pruning."
|
|
;;
|
|
esac
|
|
|
|
case "$PRUNELINKS" in
|
|
yes|YES)
|
|
echo "Checking for and removing orphaned packages links"
|
|
find $PACKAGES -type l -print | \
|
|
while read f
|
|
do
|
|
if [ ! -d $f -a ! -f $f ]; then
|
|
echo "Removing orphaned link: \"$f\""
|
|
rm $f
|
|
fi
|
|
done
|
|
echo done.
|
|
;;
|
|
*)
|
|
echo "Skipping pruning of packages links."
|
|
;;
|
|
esac
|
|
|
|
# on non-NetBSD, we don't want these to build as they overwrite
|
|
# bootstrap-pkgsrc generated files and thus would break the following builds.
|
|
|
|
if [ x"$BMAKE" = x"bmake" ]; then
|
|
for pkg in archivers/pax devel/bmake devel/mk-files net/tnftp \
|
|
security/kth-krb4 textproc/nbsed; do
|
|
echo "Don't blow away bootstrap-pkgsrc stuff!" > \
|
|
${pkg}/${BROKENF}
|
|
done
|
|
fi
|
|
|
|
if [ -f mk/bulk/pre-build.local ]; then
|
|
. mk/bulk/pre-build.local
|
|
fi
|
|
|
|
if [ ! -d ${PKG_DBDIR} ]; then
|
|
mkdir ${PKG_DBDIR}
|
|
fi
|
|
|
|
touch $STARTFILE
|