syspkgdeps revision 1.5
11.1Sdyoung#!/bin/sh
21.1Sdyoung#
31.1Sdyoung# syspkgdeps [-a arch] [-m machine] [-s setsdir] [-p prefix] sets
41.1Sdyoung#
51.1Sdyoung# Compute naive package dependencies based on file & directory
61.1Sdyoung# nesting. E.g., if pkg P contains /foo/bar and Q contains /foo,
71.1Sdyoung# then Q is considered a dependency of P.
81.1Sdyoung#
91.1Sdyoung
101.1Sdyoung#set -u
111.1Sdyoung
121.3Slukem: ${TOOL_DB=db}
131.3SlukemDB="${TOOL_DB} -q"
141.1Sdyoung
151.1Sdyoung#
161.1Sdyoung# set defaults and import setlist subroutines
171.1Sdyoung#
181.5Serhrundir=${0%/*}
191.5Serh. ${rundir}/sets.subr
201.1Sdyoungprefix=/
211.1Sdyoung
221.3Slukemusage()
231.3Slukem{
241.3Slukem	cat 1>&2 <<USAGE
251.3SlukemUsage: ${0##*/} [-a arch] [-m machine] [-s setsdir] [-p prefix] setname [...]
261.4Slukem	-a arch		set arch (e.g, m68k, mips, powerpc)	[$MACHINE_ARCH]
271.4Slukem	-m machine	set machine (e.g, amiga, i386, macppc)	[$MACHINE]
281.3Slukem	-s setsdir	directory to find sets			[$setsdir]
291.3Slukem	-p prefix	prefix for created plist		[$prefix]
301.3Slukem	setname [...]	sets to find dependencies for
311.3SlukemUSAGE
321.3Slukem	exit 1
331.1Sdyoung}
341.1Sdyoung
351.1Sdyoung# parse arguments
361.3Slukemwhile getopts a:m:ps: ch; do
371.3Slukem	case ${ch} in
381.3Slukem	a)
391.4Slukem		MACHINE_ARCH=${OPTARG}
401.4Slukem		MACHINE_CPU=$(arch_to_cpu ${OPTARG})
411.1Sdyoung		;;
421.3Slukem	m)
431.4Slukem		MACHINE=${OPTARG}
441.1Sdyoung		;;
451.3Slukem	p)
461.3Slukem		prefix=${OPTARG}
471.1Sdyoung		;;
481.3Slukem	s)
491.3Slukem		setsdir=${OPTARG}
501.1Sdyoung		;;
511.3Slukem	*)
521.1Sdyoung		usage
531.1Sdyoung		;;
541.1Sdyoung	esac
551.1Sdyoungdone
561.3Slukemshift $((${OPTIND} - 1))
571.1Sdyoungif [ $# -lt 1 ]; then
581.1Sdyoung	usage
591.1Sdyoungfi
601.1Sdyoung
611.1Sdyoungsets=$@
621.1Sdyoung
631.1Sdyoung# TBD clean up
641.1SdyoungSCRATCH=$(mktemp -d /var/tmp/$(basename $0).XXXXXX)
651.1Sdyoung
661.1Sdyoung[ $? -ne 0 ] && { echo "Could not create scratch directory." 1>&2 ; exit 1 ; }
671.1Sdyoung
681.1SdyoungPATH_MEMBERSHIP=$SCRATCH/path-membership
691.1SdyoungPATH_TO_PKGNAME=$SCRATCH/pathpkg.db
701.1SdyoungPARENT_PKGNAMES=$SCRATCH/parent-pkgnames
711.1SdyoungPARENT_PATHNAMES=$SCRATCH/parent-pathnames
721.1Sdyoung
731.1Sdyoungecho "indexing packages by pathnames" 1>&2
741.1Sdyoung
751.1Sdyounglist_set_files $sets | sed 's/^\.\///' | \
761.1Sdyoungenv PREFIX=$prefix awk '{
771.1Sdyoung	if ($1 == ".") {
781.1Sdyoung		print ENVIRON["PREFIX"] " " $2;
791.1Sdyoung	} else {
801.1Sdyoung		print ENVIRON["PREFIX"] $1 " " $2;
811.1Sdyoung	}
821.1Sdyoung}' | sort -k 1 -u > $PATH_MEMBERSHIP
831.1Sdyoung
841.1Sdyoung$DB -w -f - btree $PATH_TO_PKGNAME < $PATH_MEMBERSHIP || echo "shit" 1>&2
851.1Sdyoung
861.1Sdyoungecho "computing parent pathnames" 1>&2
871.1Sdyoung
881.1Sdyoungwhile read pathname pkgname; do
891.1Sdyoung	# print parent pathname
901.5Serh	echo ${pathname%/*}
911.1Sdyoungdone < $PATH_MEMBERSHIP > $PARENT_PATHNAMES
921.1Sdyoung
931.1Sdyoungecho "selecting parent packages using parent pathnames" 1>&2
941.1Sdyoung
951.1Sdyoung$DB -f - btree $PATH_TO_PKGNAME < $PARENT_PATHNAMES | \
961.1Sdyoung	paste $PATH_MEMBERSHIP - | \
971.5Serh	awk '{ if ($2 != $4) print $2 " " $4; }' | sort -u | $rundir/culldeps
981.1Sdyoung
991.1Sdyoungif [ $? -ne 0 ]; then
1001.1Sdyoung	echo "error in parent-directory lookup, aborting" 1>&2
1011.1Sdyoung	exit 1
1021.1Sdyoungfi
103