syspkgdeps revision 1.1
11.1Sdyoung#!/bin/sh
21.1Sdyoung#
31.1Sdyoung# syspkgdeps [-a arch] [-m machine] [-s setsdir] [-p prefix] sets
41.1Sdyoung#
51.1Sdyoung# Compute naive package dependencies based on file & directory
61.1Sdyoung# nesting. E.g., if pkg P contains /foo/bar and Q contains /foo,
71.1Sdyoung# then Q is considered a dependency of P.
81.1Sdyoung#
91.1Sdyoung
101.1Sdyoung#set -u
111.1Sdyoung
121.1SdyoungDB="db -q"
131.1Sdyoung
141.1Sdyoung#
151.1Sdyoung# set defaults and import setlist subroutines
161.1Sdyoung#
171.1Sdyoung. ./sets.subr
181.1Sdyoungsetd=$(pwd)
191.1Sdyoungprefix=/
201.1Sdyoung
211.1Sdyoungusage() {
221.1Sdyoungexec 1>&2
231.1Sdyoung
241.1Sdyoungecho "Usage: $0 [-a arch] [-m machine] [-s setsdir] [-p prefix] sets"
251.1Sdyoungecho "	-a arch		set arch (e.g, m68k, mips, powerpc)	[$machine_arch]"
261.1Sdyoungecho "	-m machine	set machine (e.g, amiga, i386, macppc)	[$machine]"
271.1Sdyoungecho "	-s setsdir	directory to find sets			[$setd]"
281.1Sdyoungecho "	-p prefix	prefix for created plist		[$prefix]"
291.1Sdyoungecho "	sets		sets to find dependencies for"
301.1Sdyoung
311.1Sdyoungexit 1
321.1Sdyoung}
331.1Sdyoung
341.1Sdyoung# parse arguments
351.1Sdyoungwhile : ; do
361.1Sdyoung	case $1 in
371.1Sdyoung	-a*)
381.1Sdyoung		machine_arch=`MACHINE_ARCH=${2} ${make} print_machine_arch`
391.1Sdyoung		machine_cpu=`MACHINE_ARCH=${2} ${make} print_machine_cpu`
401.1Sdyoung		shift
411.1Sdyoung		;;
421.1Sdyoung	-m*)
431.1Sdyoung		machine=$2; shift
441.1Sdyoung		;;
451.1Sdyoung	-s*)
461.1Sdyoung		setd=$2; shift
471.1Sdyoung		;;
481.1Sdyoung	-p*)
491.1Sdyoung		prefix=$2; shift
501.1Sdyoung		;;
511.1Sdyoung	-*)
521.1Sdyoung		usage
531.1Sdyoung		;;
541.1Sdyoung	*)
551.1Sdyoung		break
561.1Sdyoung		;;
571.1Sdyoung	esac
581.1Sdyoung	shift
591.1Sdyoungdone
601.1Sdyoungif [ $# -lt 1 ]; then
611.1Sdyoung	usage
621.1Sdyoungfi
631.1Sdyoung
641.1Sdyoungsets=$@
651.1Sdyoung
661.1Sdyoungif [ "$object_fmt" = "ELF" ]; then
671.1Sdyoung	shlib=elf
681.1Sdyoungelse
691.1Sdyoung	shlib=aout
701.1Sdyoungfi
711.1Sdyoungstlib=$shlib
721.1Sdyoung
731.1Sdyoung# Turn off shlibs for some ports.
741.1Sdyoungif [ "$machine_cpu" = "sh3" -o "$machine_arch" = "m68000" ]; then
751.1Sdyoung	shlib=no
761.1Sdyoungfi
771.1Sdyoung
781.1Sdyounglkm=yes
791.1Sdyoung# Turn off LKMs for some ports.
801.1Sdyoungif [ "$machine" = "evbppc" ]; then
811.1Sdyoung	lkm=no
821.1Sdyoungfi
831.1Sdyoung
841.1Sdyoung# Turn off lintlibs for some ports.
851.1Sdyoung# Not needed anymore, leave the hook here for future use.
861.1Sdyounglintlibs=
871.1Sdyoung
881.1Sdyoung# TBD clean up
891.1SdyoungSCRATCH=$(mktemp -d /var/tmp/$(basename $0).XXXXXX)
901.1Sdyoung
911.1Sdyoung[ $? -ne 0 ] && { echo "Could not create scratch directory." 1>&2 ; exit 1 ; }
921.1Sdyoung
931.1SdyoungPATH_MEMBERSHIP=$SCRATCH/path-membership
941.1SdyoungPATH_TO_PKGNAME=$SCRATCH/pathpkg.db
951.1SdyoungPARENT_PKGNAMES=$SCRATCH/parent-pkgnames
961.1SdyoungPARENT_PATHNAMES=$SCRATCH/parent-pathnames
971.1Sdyoung
981.1Sdyoungecho "indexing packages by pathnames" 1>&2
991.1Sdyoung
1001.1Sdyounglist_set_files $sets | sed 's/^\.\///' | \
1011.1Sdyoungenv PREFIX=$prefix awk '{
1021.1Sdyoung	if ($1 == ".") {
1031.1Sdyoung		print ENVIRON["PREFIX"] " " $2;
1041.1Sdyoung	} else {
1051.1Sdyoung		print ENVIRON["PREFIX"] $1 " " $2;
1061.1Sdyoung	}
1071.1Sdyoung}' | sort -k 1 -u > $PATH_MEMBERSHIP
1081.1Sdyoung
1091.1Sdyoung$DB -w -f - btree $PATH_TO_PKGNAME < $PATH_MEMBERSHIP || echo "shit" 1>&2
1101.1Sdyoung
1111.1Sdyoungecho "computing parent pathnames" 1>&2
1121.1Sdyoung
1131.1Sdyoungwhile read pathname pkgname; do
1141.1Sdyoung	# print parent pathname
1151.1Sdyoung	dirname $pathname
1161.1Sdyoungdone < $PATH_MEMBERSHIP > $PARENT_PATHNAMES
1171.1Sdyoung
1181.1Sdyoungecho "selecting parent packages using parent pathnames" 1>&2
1191.1Sdyoung
1201.1Sdyoung$DB -f - btree $PATH_TO_PKGNAME < $PARENT_PATHNAMES | \
1211.1Sdyoung	paste $PATH_MEMBERSHIP - | \
1221.1Sdyoung	awk '{ if ($2 != $4) print $2 " " $4; }' | sort -u | ./culldeps
1231.1Sdyoung
1241.1Sdyoungif [ $? -ne 0 ]; then
1251.1Sdyoung	echo "error in parent-directory lookup, aborting" 1>&2
1261.1Sdyoung	exit 1
1271.1Sdyoungfi
128