syspkgdeps revision 1.8
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.1Sdyoung# 131.1Sdyoung# set defaults and import setlist subroutines 141.1Sdyoung# 151.7Sapbrundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/" 161.7Sapb. "${rundir}/sets.subr" 171.7Sapb 181.1Sdyoung 191.3Slukemusage() 201.3Slukem{ 211.3Slukem cat 1>&2 <<USAGE 221.3SlukemUsage: ${0##*/} [-a arch] [-m machine] [-s setsdir] [-p prefix] setname [...] 231.4Slukem -a arch set arch (e.g, m68k, mips, powerpc) [$MACHINE_ARCH] 241.4Slukem -m machine set machine (e.g, amiga, i386, macppc) [$MACHINE] 251.3Slukem -s setsdir directory to find sets [$setsdir] 261.3Slukem -p prefix prefix for created plist [$prefix] 271.3Slukem setname [...] sets to find dependencies for 281.3SlukemUSAGE 291.3Slukem exit 1 301.1Sdyoung} 311.1Sdyoung 321.1Sdyoung# parse arguments 331.3Slukemwhile getopts a:m:ps: ch; do 341.3Slukem case ${ch} in 351.3Slukem a) 361.4Slukem MACHINE_ARCH=${OPTARG} 371.4Slukem MACHINE_CPU=$(arch_to_cpu ${OPTARG}) 381.1Sdyoung ;; 391.3Slukem m) 401.4Slukem MACHINE=${OPTARG} 411.1Sdyoung ;; 421.3Slukem p) 431.3Slukem prefix=${OPTARG} 441.1Sdyoung ;; 451.3Slukem s) 461.3Slukem setsdir=${OPTARG} 471.1Sdyoung ;; 481.3Slukem *) 491.1Sdyoung usage 501.1Sdyoung ;; 511.1Sdyoung esac 521.1Sdyoungdone 531.3Slukemshift $((${OPTIND} - 1)) 541.1Sdyoungif [ $# -lt 1 ]; then 551.1Sdyoung usage 561.1Sdyoungfi 571.1Sdyoung 581.1Sdyoungsets=$@ 591.1Sdyoung 601.1Sdyoung# TBD clean up 611.8SapbSCRATCH=$(${MKTEMP} -d /var/tmp/$(basename $0).XXXXXX) 621.1Sdyoung 631.1Sdyoung[ $? -ne 0 ] && { echo "Could not create scratch directory." 1>&2 ; exit 1 ; } 641.1Sdyoung 651.1SdyoungPATH_MEMBERSHIP=$SCRATCH/path-membership 661.1SdyoungPATH_TO_PKGNAME=$SCRATCH/pathpkg.db 671.1SdyoungPARENT_PKGNAMES=$SCRATCH/parent-pkgnames 681.1SdyoungPARENT_PATHNAMES=$SCRATCH/parent-pathnames 691.1Sdyoung 701.1Sdyoungecho "indexing packages by pathnames" 1>&2 711.1Sdyoung 721.8Sapblist_set_files $sets | ${SED} 's/^\.\///' | \ 731.8Sapb${ENV_CMD} PREFIX=$prefix ${AWK} '{ 741.1Sdyoung if ($1 == ".") { 751.1Sdyoung print ENVIRON["PREFIX"] " " $2; 761.1Sdyoung } else { 771.1Sdyoung print ENVIRON["PREFIX"] $1 " " $2; 781.1Sdyoung } 791.8Sapb}' | ${SORT} -k 1 -u > $PATH_MEMBERSHIP 801.1Sdyoung 811.8Sapb$DB -q -w -f - btree $PATH_TO_PKGNAME < $PATH_MEMBERSHIP || echo "shit" 1>&2 821.1Sdyoung 831.1Sdyoungecho "computing parent pathnames" 1>&2 841.1Sdyoung 851.1Sdyoungwhile read pathname pkgname; do 861.1Sdyoung # print parent pathname 871.5Serh echo ${pathname%/*} 881.1Sdyoungdone < $PATH_MEMBERSHIP > $PARENT_PATHNAMES 891.1Sdyoung 901.1Sdyoungecho "selecting parent packages using parent pathnames" 1>&2 911.1Sdyoung 921.8Sapb$DB -q -f - btree $PATH_TO_PKGNAME < $PARENT_PATHNAMES | \ 931.8Sapb ${PASTE} $PATH_MEMBERSHIP - | \ 941.8Sapb ${AWK} '{ if ($2 != $4) print $2 " " $4; }' | \ 951.8Sapb ${SORT} -u | \ 961.8Sapb $rundir/culldeps 971.1Sdyoung 981.1Sdyoungif [ $? -ne 0 ]; then 991.1Sdyoung echo "error in parent-directory lookup, aborting" 1>&2 1001.1Sdyoung exit 1 1011.1Sdyoungfi 102