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