checkflist revision 1.22
11.3Smikel#! /bin/sh --
21.3Smikel#
31.22Slukem#	$NetBSD: checkflist,v 1.22 2003/09/30 06:23:43 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.22Slukem: ${MKTEMP=mktemp}
151.22SlukemSDIR=$(${MKTEMP} -d /tmp/${prog}.XXXXXX)
161.20Slukem
171.20Slukemes=0
181.20Slukemcleanup()
191.20Slukem{
201.20Slukem	/bin/rm -rf $SDIR
211.20Slukem	if [ $es -gt 255 ] ; then
221.20Slukem		es=255
231.20Slukem	fi
241.20Slukem	exit $es
251.20Slukem}
261.20Slukemtrap cleanup 0 2 3 13		# EXIT INT QUIT PIPE
271.20Slukem
281.20Slukem
291.9Srossorigin=.
301.10Sperryxargs=""
311.10Sperrydargs=""
321.15Slukemmetalog=
331.22Slukemallowextra=false
341.22Slukemallowmissing=false
351.10Sperry
361.10Sperry# handle args
371.10Sperrywhile : ; do
381.10Sperry	case $1 in
391.10Sperry	-x11)
401.10Sperry		xargs="-x"
411.18Stron		origin="./etc/X11 ./etc/fonts ./usr/X11R6"
421.10Sperry		;;
431.10Sperry	-both)
441.10Sperry		xargs="-b"
451.10Sperry		;;
461.22Slukem	-M)
471.15Slukem		metalog=$2; shift
481.15Slukem		;;
491.22Slukem	-e)
501.22Slukem		allowextra=true
511.22Slukem		;;
521.22Slukem	-m)
531.22Slukem		allowmissing=true
541.22Slukem		;;
551.10Sperry	-*)
561.10Sperry		cat 1>&2 <<USAGE
571.22SlukemUsage: ${prog} [-x11|-both] [-M metalog] [-e] [-m]
581.10Sperry	-x11		check only x11 lists
591.10Sperry	-both		check netbsd + x11 lists
601.15Slukem	-M metalog	metalog file
611.22Slukem	-e		extra files are not considered an error
621.22Slukem	-m		missing files are not considered an error
631.10SperryUSAGE
641.10Sperry		exit 1
651.10Sperry		;;
661.10Sperry	*)
671.10Sperry		break
681.10Sperry		;;
691.10Sperry	esac
701.10Sperry	shift
711.10Sperrydone
721.10Sperry
731.15Slukemif [ -n "$metalog" ]; then
741.15Slukem	case "$metalog" in
751.15Slukem	${DESTDIR}/*)
761.17Sthorpej		# Metalog would be noticed, so make sure it gets
771.17Sthorpej		# ignored.
781.17Sthorpej		metalog="./${metalog#${DESTDIR}/}"
791.15Slukem		;;
801.17Sthorpej	*)
811.17Sthorpej		metalog=""
821.15Slukem	esac
831.15Slukemfi
841.15Slukem
851.15Slukem
861.20Slukemsh makeflist $xargs $dargs > $SDIR/flist
871.10Sperry
881.15Slukem(
891.15Slukem	cd $DESTDIR
901.17Sthorpej	find $origin \( -type d -o -type f -o -type l \)
911.17Sthorpej) | (
921.17Sthorpej	while read line; do
931.19Slukem		case "$line" in
941.19Slukem		$metalog)
951.19Slukem			;;
961.19Slukem		*)
971.19Slukem			echo $line
981.19Slukem			;;
991.19Slukem		esac
1001.17Sthorpej	done
1011.20Slukem) | sort > $SDIR/files
1021.15Slukem
1031.20Slukemcomm -23 $SDIR/flist $SDIR/files > $SDIR/missing
1041.20Slukemcomm -13 $SDIR/flist $SDIR/files > $SDIR/extra
1051.15Slukem
1061.20Slukemif [ -s $SDIR/extra ]; then
1071.20Slukem	echo ""
1081.20Slukem	echo "============  extra files  ==============="
1091.20Slukem	echo "Files in DESTDIR but missing from flist."
1101.20Slukem	echo "File is obsolete or flist is out of date ?"
1111.22Slukem	if ${allowextra}; then
1121.22Slukem		echo "This is non-fatal."
1131.22Slukem	else
1141.22Slukem		es=1
1151.22Slukem	fi
1161.20Slukem	echo "------------------------------------------"
1171.20Slukem	cat $SDIR/extra
1181.20Slukem	echo "=========  end of extra files  ==========="
1191.20Slukem	echo ""
1201.20Slukemfi
1211.20Slukem
1221.20Slukemif [ -s $SDIR/missing ]; then
1231.20Slukem	echo ""
1241.20Slukem	echo "===========  missing files  =============="
1251.20Slukem	echo "Files in flist but missing from DESTDIR."
1261.20Slukem	echo "File wasn't installed ?"
1271.22Slukem	if ${allowmissing}; then
1281.22Slukem		echo "This is non-fatal."
1291.22Slukem	else
1301.22Slukem		es=1
1311.22Slukem	fi
1321.20Slukem	echo "------------------------------------------"
1331.20Slukem	cat $SDIR/missing
1341.20Slukem	echo "========  end of missing files  =========="
1351.20Slukem	echo ""
1361.15Slukemfi
1371.20Slukem
1381.20Slukemexit 0		# cleanup will exit with $es
139