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