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