#!/bin/sh
#
# syspkgdeps [-a arch] [-m machine] [-s setsdir] [-p prefix] sets
#
# Compute naive package dependencies based on file & directory
# nesting. E.g., if pkg P contains /foo/bar and Q contains /foo,
# then Q is considered a dependency of P.
#

#set -u

: ${TOOL_DB=db}
DB="${TOOL_DB} -q"

#
# set defaults and import setlist subroutines
#
rundir=${0%/*}
. ${rundir}/sets.subr
prefix=/

usage()
{
	cat 1>&2 <<USAGE
Usage: ${0##*/} [-a arch] [-m machine] [-s setsdir] [-p prefix] setname [...]
	-a arch		set arch (e.g, m68k, mips, powerpc)	[$MACHINE_ARCH]
	-m machine	set machine (e.g, amiga, i386, macppc)	[$MACHINE]
	-s setsdir	directory to find sets			[$setsdir]
	-p prefix	prefix for created plist		[$prefix]
	setname [...]	sets to find dependencies for
USAGE
	exit 1
}

# parse arguments
while getopts a:m:ps: ch; do
	case ${ch} in
	a)
		MACHINE_ARCH=${OPTARG}
		MACHINE_CPU=$(arch_to_cpu ${OPTARG})
		;;
	m)
		MACHINE=${OPTARG}
		;;
	p)
		prefix=${OPTARG}
		;;
	s)
		setsdir=${OPTARG}
		;;
	*)
		usage
		;;
	esac
done
shift $((${OPTIND} - 1))
if [ $# -lt 1 ]; then
	usage
fi

sets=$@

# TBD clean up
SCRATCH=$(mktemp -d /var/tmp/$(basename $0).XXXXXX)

[ $? -ne 0 ] && { echo "Could not create scratch directory." 1>&2 ; exit 1 ; }

PATH_MEMBERSHIP=$SCRATCH/path-membership
PATH_TO_PKGNAME=$SCRATCH/pathpkg.db
PARENT_PKGNAMES=$SCRATCH/parent-pkgnames
PARENT_PATHNAMES=$SCRATCH/parent-pathnames

echo "indexing packages by pathnames" 1>&2

list_set_files $sets | sed 's/^\.\///' | \
env PREFIX=$prefix awk '{
	if ($1 == ".") {
		print ENVIRON["PREFIX"] " " $2;
	} else {
		print ENVIRON["PREFIX"] $1 " " $2;
	}
}' | sort -k 1 -u > $PATH_MEMBERSHIP

$DB -w -f - btree $PATH_TO_PKGNAME < $PATH_MEMBERSHIP || echo "shit" 1>&2

echo "computing parent pathnames" 1>&2

while read pathname pkgname; do
	# print parent pathname
	echo ${pathname%/*}
done < $PATH_MEMBERSHIP > $PARENT_PATHNAMES

echo "selecting parent packages using parent pathnames" 1>&2

$DB -f - btree $PATH_TO_PKGNAME < $PARENT_PATHNAMES | \
	paste $PATH_MEMBERSHIP - | \
	awk '{ if ($2 != $4) print $2 " " $4; }' | sort -u | $rundir/culldeps

if [ $? -ne 0 ]; then
	echo "error in parent-directory lookup, aborting" 1>&2
	exit 1
fi
