syspkgdeps revision 1.8
1#!/bin/sh
2#
3# syspkgdeps [-a arch] [-m machine] [-s setsdir] [-p prefix] sets
4#
5# Compute naive package dependencies based on file & directory
6# nesting. E.g., if pkg P contains /foo/bar and Q contains /foo,
7# then Q is considered a dependency of P.
8#
9
10#set -u
11
12#
13# set defaults and import setlist subroutines
14#
15rundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/"
16. "${rundir}/sets.subr"
17
18
19usage()
20{
21	cat 1>&2 <<USAGE
22Usage: ${0##*/} [-a arch] [-m machine] [-s setsdir] [-p prefix] setname [...]
23	-a arch		set arch (e.g, m68k, mips, powerpc)	[$MACHINE_ARCH]
24	-m machine	set machine (e.g, amiga, i386, macppc)	[$MACHINE]
25	-s setsdir	directory to find sets			[$setsdir]
26	-p prefix	prefix for created plist		[$prefix]
27	setname [...]	sets to find dependencies for
28USAGE
29	exit 1
30}
31
32# parse arguments
33while getopts a:m:ps: ch; do
34	case ${ch} in
35	a)
36		MACHINE_ARCH=${OPTARG}
37		MACHINE_CPU=$(arch_to_cpu ${OPTARG})
38		;;
39	m)
40		MACHINE=${OPTARG}
41		;;
42	p)
43		prefix=${OPTARG}
44		;;
45	s)
46		setsdir=${OPTARG}
47		;;
48	*)
49		usage
50		;;
51	esac
52done
53shift $((${OPTIND} - 1))
54if [ $# -lt 1 ]; then
55	usage
56fi
57
58sets=$@
59
60# TBD clean up
61SCRATCH=$(${MKTEMP} -d /var/tmp/$(basename $0).XXXXXX)
62
63[ $? -ne 0 ] && { echo "Could not create scratch directory." 1>&2 ; exit 1 ; }
64
65PATH_MEMBERSHIP=$SCRATCH/path-membership
66PATH_TO_PKGNAME=$SCRATCH/pathpkg.db
67PARENT_PKGNAMES=$SCRATCH/parent-pkgnames
68PARENT_PATHNAMES=$SCRATCH/parent-pathnames
69
70echo "indexing packages by pathnames" 1>&2
71
72list_set_files $sets | ${SED} 's/^\.\///' | \
73${ENV_CMD} PREFIX=$prefix ${AWK} '{
74	if ($1 == ".") {
75		print ENVIRON["PREFIX"] " " $2;
76	} else {
77		print ENVIRON["PREFIX"] $1 " " $2;
78	}
79}' | ${SORT} -k 1 -u > $PATH_MEMBERSHIP
80
81$DB -q -w -f - btree $PATH_TO_PKGNAME < $PATH_MEMBERSHIP || echo "shit" 1>&2
82
83echo "computing parent pathnames" 1>&2
84
85while read pathname pkgname; do
86	# print parent pathname
87	echo ${pathname%/*}
88done < $PATH_MEMBERSHIP > $PARENT_PATHNAMES
89
90echo "selecting parent packages using parent pathnames" 1>&2
91
92$DB -q -f - btree $PATH_TO_PKGNAME < $PARENT_PATHNAMES | \
93	${PASTE} $PATH_MEMBERSHIP - | \
94	${AWK} '{ if ($2 != $4) print $2 " " $4; }' | \
95	${SORT} -u | \
96	$rundir/culldeps
97
98if [ $? -ne 0 ]; then
99	echo "error in parent-directory lookup, aborting" 1>&2
100	exit 1
101fi
102