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