checkflist revision 1.29
11.3Smikel#! /bin/sh --
21.3Smikel#
31.29Sapb#	$NetBSD: checkflist,v 1.29 2006/01/03 18:31:09 apb Exp $
41.3Smikel#
51.29Sapb# Verify output of makeflist against contents of ${DESTDIR}.
61.1Scgd
71.29Sapbif [ -z "${DESTDIR}" ]; then
81.15Slukem	echo "DESTDIR must be set"
91.1Scgd	exit 1
101.15Slukemfi
111.15Slukem
121.29Sapbprog="${0##*/}"
131.27Sapbrundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/"
141.27Sapb. "${rundir}/sets.subr"
151.1Scgd
161.29SapbSDIR="$(${MKTEMP} -d "/tmp/${prog}.XXXXXX")"
171.20Slukem
181.20Slukemes=0
191.20Slukemcleanup()
201.20Slukem{
211.29Sapb	/bin/rm -rf "${SDIR}"
221.29Sapb	if [ ${es} -gt 255 ] ; then
231.20Slukem		es=255
241.20Slukem	fi
251.29Sapb	exit ${es}
261.20Slukem}
271.20Slukemtrap cleanup 0 2 3 13		# EXIT INT QUIT PIPE
281.20Slukem
291.20Slukem
301.9Srossorigin=.
311.10Sperryxargs=""
321.10Sperrydargs=""
331.15Slukemmetalog=
341.22Slukemallowextra=false
351.22Slukemallowmissing=false
361.10Sperry
371.10Sperry# handle args
381.24Slukemwhile getopts xbM:em ch; do
391.24Slukem	case ${ch} in
401.24Slukem	x)
411.10Sperry		xargs="-x"
421.18Stron		origin="./etc/X11 ./etc/fonts ./usr/X11R6"
431.10Sperry		;;
441.24Slukem	b)
451.10Sperry		xargs="-b"
461.10Sperry		;;
471.24Slukem	M)
481.29Sapb		metalog="${OPTARG}"
491.15Slukem		;;
501.24Slukem	e)
511.22Slukem		allowextra=true
521.22Slukem		;;
531.24Slukem	m)
541.22Slukem		allowmissing=true
551.22Slukem		;;
561.24Slukem	*)
571.10Sperry		cat 1>&2 <<USAGE
581.24SlukemUsage: ${prog} [-x|-b] [-M metalog] [-e] [-m]
591.24Slukem	-x		check only x11 lists
601.24Slukem	-b		check netbsd + x11 lists
611.15Slukem	-M metalog	metalog file
621.22Slukem	-e		extra files are not considered an error
631.22Slukem	-m		missing files are not considered an error
641.10SperryUSAGE
651.10Sperry		exit 1
661.10Sperry		;;
671.10Sperry	esac
681.10Sperrydone
691.24Slukemshift $((${OPTIND} - 1))
701.10Sperry
711.29Sapbif [ -n "${metalog}" ]; then
721.29Sapb	case "${metalog}" in
731.29Sapb	"${DESTDIR}"/*)
741.17Sthorpej		# Metalog would be noticed, so make sure it gets
751.17Sthorpej		# ignored.
761.29Sapb		metalog="./${metalog#"${DESTDIR}"/}"
771.15Slukem		;;
781.17Sthorpej	*)
791.17Sthorpej		metalog=""
801.15Slukem	esac
811.15Slukemfi
821.15Slukem
831.15Slukem
841.29Sapb${HOST_SH} ./makeflist ${xargs} ${dargs} > "${SDIR}/flist"
851.10Sperry
861.15Slukem(
871.29Sapb	cd "${DESTDIR}"
881.29Sapb	${FIND} ${origin} \( -type d -o -type f -o -type l \) -print
891.17Sthorpej) | (
901.17Sthorpej	while read line; do
911.29Sapb		case "${line}" in
921.29Sapb		"${metalog}")
931.19Slukem			;;
941.19Slukem		*)
951.29Sapb			echo "${line}"
961.19Slukem			;;
971.19Slukem		esac
981.17Sthorpej	done
991.29Sapb) | ${SORT} > "${SDIR}/files"
1001.15Slukem
1011.29Sapb${COMM} -23 "${SDIR}/flist}" "${SDIR}/files}" > "${SDIR}/missing}"
1021.29Sapb${COMM} -13 "${SDIR}/flist}" "${SDIR}/files}" > "${SDIR}/extra}"
1031.15Slukem
1041.29Sapbif [ -s "${SDIR}/extra" ]; then
1051.29Sapb	count="$(${AWK} 'END {print NR}' "${SDIR}/extra")"
1061.20Slukem	echo ""
1071.25Slukem	echo "============  ${count} extra files  ==============="
1081.20Slukem	echo "Files in DESTDIR but missing from flist."
1091.20Slukem	echo "File is obsolete or flist is out of date ?"
1101.22Slukem	if ${allowextra}; then
1111.22Slukem		echo "This is non-fatal."
1121.22Slukem	else
1131.22Slukem		es=1
1141.22Slukem	fi
1151.20Slukem	echo "------------------------------------------"
1161.29Sapb	cat "${SDIR}/extra"
1171.25Slukem	echo "=========  end of ${count} extra files  ==========="
1181.20Slukem	echo ""
1191.20Slukemfi
1201.20Slukem
1211.29Sapbif [ -s "${SDIR}/missing" ]; then
1221.29Sapb	count="$(${AWK} 'END {print NR}' "${SDIR}/missing")"
1231.20Slukem	echo ""
1241.25Slukem	echo "===========  ${count} 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.29Sapb	cat "${SDIR}/missing"
1341.25Slukem	echo "========  end of ${count} missing files  =========="
1351.20Slukem	echo ""
1361.15Slukemfi
1371.20Slukem
1381.29Sapbexit 0		# cleanup will exit with ${es}
139