checkflist revision 1.20
11.3Smikel#! /bin/sh --
21.3Smikel#
31.20Slukem#	$NetBSD: checkflist,v 1.20 2003/08/12 04:20:08 lukem Exp $
41.3Smikel#
51.3Smikel# Verify output of makeflist against contents of $DESTDIR.
61.1Scgd
71.15Slukemif [ -z "$DESTDIR" ]; then
81.15Slukem	echo "DESTDIR must be set"
91.1Scgd	exit 1
101.15Slukemfi
111.15Slukem
121.15Slukemprog=${0##*/}
131.1Scgd
141.20Slukem
151.20Slukem# Make sure we don't loop forever if mkdir will always fail.
161.20Slukemif [ ! -d /tmp ]; then
171.20Slukem	echo /tmp is not a directory
181.20Slukem	exit 1
191.20Slukemfi
201.20Slukem
211.20Slukemif [ ! -w /tmp ]; then
221.20Slukem	echo /tmp is not writable
231.20Slukem	exit 1
241.20Slukemfi
251.20Slukem
261.20SlukemSDIR_BASE=/tmp/checkflist.$$
271.20SlukemSDIR_SERIAL=0
281.20Slukem
291.20Slukemwhile true; do
301.20Slukem	SDIR=${SDIR_BASE}.${SDIR_SERIAL}
311.20Slukem	mkdir -m 0700 ${SDIR} && break
321.20Slukem	SDIR_SERIAL=$((${SDIR_SERIAL} + 1))
331.20Slukemdone    
341.20Slukem
351.20Slukemes=0
361.20Slukemcleanup()
371.20Slukem{
381.20Slukem	/bin/rm -rf $SDIR
391.20Slukem	if [ $es -gt 255 ] ; then
401.20Slukem		es=255
411.20Slukem	fi
421.20Slukem	exit $es
431.20Slukem}
441.20Slukemtrap cleanup 0 2 3 13		# EXIT INT QUIT PIPE
451.20Slukem
461.20Slukem
471.9Srossorigin=.
481.10Sperryxargs=""
491.10Sperrydargs=""
501.15Slukemmetalog=
511.10Sperry
521.10Sperry# handle args
531.10Sperrywhile : ; do
541.10Sperry	case $1 in
551.10Sperry	-x11)
561.10Sperry		xargs="-x"
571.18Stron		origin="./etc/X11 ./etc/fonts ./usr/X11R6"
581.10Sperry		;;
591.10Sperry	-both)
601.10Sperry		xargs="-b"
611.10Sperry		;;
621.15Slukem	-M*)
631.15Slukem		metalog=$2; shift
641.15Slukem		;;
651.10Sperry	-*)
661.10Sperry		cat 1>&2 <<USAGE
671.20SlukemUsage: ${prog} [-x11|-both] [-M metalog]
681.10Sperry	-x11		check only x11 lists
691.10Sperry	-both		check netbsd + x11 lists
701.15Slukem	-M metalog	metalog file
711.10SperryUSAGE
721.10Sperry		exit 1
731.10Sperry		;;
741.10Sperry	*)
751.10Sperry		break
761.10Sperry		;;
771.10Sperry	esac
781.10Sperry	shift
791.10Sperrydone
801.10Sperry
811.15Slukemif [ -n "$metalog" ]; then
821.15Slukem	case "$metalog" in
831.15Slukem	${DESTDIR}/*)
841.17Sthorpej		# Metalog would be noticed, so make sure it gets
851.17Sthorpej		# ignored.
861.17Sthorpej		metalog="./${metalog#${DESTDIR}/}"
871.15Slukem		;;
881.17Sthorpej	*)
891.17Sthorpej		metalog=""
901.15Slukem	esac
911.15Slukemfi
921.15Slukem
931.15Slukem
941.20Slukemsh makeflist $xargs $dargs > $SDIR/flist
951.10Sperry
961.15Slukem(
971.15Slukem	cd $DESTDIR
981.17Sthorpej	find $origin \( -type d -o -type f -o -type l \)
991.17Sthorpej) | (
1001.17Sthorpej	while read line; do
1011.19Slukem		case "$line" in
1021.19Slukem		$metalog)
1031.19Slukem			;;
1041.19Slukem		*)
1051.19Slukem			echo $line
1061.19Slukem			;;
1071.19Slukem		esac
1081.17Sthorpej	done
1091.20Slukem) | sort > $SDIR/files
1101.15Slukem
1111.20Slukemcomm -23 $SDIR/flist $SDIR/files > $SDIR/missing
1121.20Slukemcomm -13 $SDIR/flist $SDIR/files > $SDIR/extra
1131.15Slukem
1141.20Slukemif [ -s $SDIR/extra ]; then
1151.20Slukem	echo ""
1161.20Slukem	echo "============  extra files  ==============="
1171.20Slukem	echo "Files in DESTDIR but missing from flist."
1181.20Slukem	echo "File is obsolete or flist is out of date ?"
1191.20Slukem	echo "This is non-fatal."
1201.20Slukem	echo "------------------------------------------"
1211.20Slukem	cat $SDIR/extra
1221.20Slukem	echo "=========  end of extra files  ==========="
1231.20Slukem	echo ""
1241.20Slukemfi
1251.20Slukem
1261.20Slukemif [ -s $SDIR/missing ]; then
1271.20Slukem	echo ""
1281.20Slukem	echo "===========  missing files  =============="
1291.20Slukem	echo "Files in flist but missing from DESTDIR."
1301.20Slukem	echo "File wasn't installed ?"
1311.20Slukem	echo "------------------------------------------"
1321.20Slukem	cat $SDIR/missing
1331.20Slukem	echo "========  end of missing files  =========="
1341.20Slukem	echo ""
1351.20Slukem	es=1
1361.15Slukemfi
1371.20Slukem
1381.20Slukemexit 0		# cleanup will exit with $es
139