syspkgdeps revision 1.1
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
12DB="db -q"
13
14#
15# set defaults and import setlist subroutines
16#
17. ./sets.subr
18setd=$(pwd)
19prefix=/
20
21usage() {
22exec 1>&2
23
24echo "Usage: $0 [-a arch] [-m machine] [-s setsdir] [-p prefix] sets"
25echo "	-a arch		set arch (e.g, m68k, mips, powerpc)	[$machine_arch]"
26echo "	-m machine	set machine (e.g, amiga, i386, macppc)	[$machine]"
27echo "	-s setsdir	directory to find sets			[$setd]"
28echo "	-p prefix	prefix for created plist		[$prefix]"
29echo "	sets		sets to find dependencies for"
30
31exit 1
32}
33
34# parse arguments
35while : ; do
36	case $1 in
37	-a*)
38		machine_arch=`MACHINE_ARCH=${2} ${make} print_machine_arch`
39		machine_cpu=`MACHINE_ARCH=${2} ${make} print_machine_cpu`
40		shift
41		;;
42	-m*)
43		machine=$2; shift
44		;;
45	-s*)
46		setd=$2; shift
47		;;
48	-p*)
49		prefix=$2; shift
50		;;
51	-*)
52		usage
53		;;
54	*)
55		break
56		;;
57	esac
58	shift
59done
60if [ $# -lt 1 ]; then
61	usage
62fi
63
64sets=$@
65
66if [ "$object_fmt" = "ELF" ]; then
67	shlib=elf
68else
69	shlib=aout
70fi
71stlib=$shlib
72
73# Turn off shlibs for some ports.
74if [ "$machine_cpu" = "sh3" -o "$machine_arch" = "m68000" ]; then
75	shlib=no
76fi
77
78lkm=yes
79# Turn off LKMs for some ports.
80if [ "$machine" = "evbppc" ]; then
81	lkm=no
82fi
83
84# Turn off lintlibs for some ports.
85# Not needed anymore, leave the hook here for future use.
86lintlibs=
87
88# TBD clean up
89SCRATCH=$(mktemp -d /var/tmp/$(basename $0).XXXXXX)
90
91[ $? -ne 0 ] && { echo "Could not create scratch directory." 1>&2 ; exit 1 ; }
92
93PATH_MEMBERSHIP=$SCRATCH/path-membership
94PATH_TO_PKGNAME=$SCRATCH/pathpkg.db
95PARENT_PKGNAMES=$SCRATCH/parent-pkgnames
96PARENT_PATHNAMES=$SCRATCH/parent-pathnames
97
98echo "indexing packages by pathnames" 1>&2
99
100list_set_files $sets | sed 's/^\.\///' | \
101env PREFIX=$prefix awk '{
102	if ($1 == ".") {
103		print ENVIRON["PREFIX"] " " $2;
104	} else {
105		print ENVIRON["PREFIX"] $1 " " $2;
106	}
107}' | sort -k 1 -u > $PATH_MEMBERSHIP
108
109$DB -w -f - btree $PATH_TO_PKGNAME < $PATH_MEMBERSHIP || echo "shit" 1>&2
110
111echo "computing parent pathnames" 1>&2
112
113while read pathname pkgname; do
114	# print parent pathname
115	dirname $pathname
116done < $PATH_MEMBERSHIP > $PARENT_PATHNAMES
117
118echo "selecting parent packages using parent pathnames" 1>&2
119
120$DB -f - btree $PATH_TO_PKGNAME < $PARENT_PATHNAMES | \
121	paste $PATH_MEMBERSHIP - | \
122	awk '{ if ($2 != $4) print $2 " " $4; }' | sort -u | ./culldeps
123
124if [ $? -ne 0 ]; then
125	echo "error in parent-directory lookup, aborting" 1>&2
126	exit 1
127fi
128