syspkgdeps revision 1.5
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.3Slukem: ${TOOL_DB=db} 131.3SlukemDB="${TOOL_DB} -q" 141.1Sdyoung 151.1Sdyoung# 161.1Sdyoung# set defaults and import setlist subroutines 171.1Sdyoung# 181.5Serhrundir=${0%/*} 191.5Serh. ${rundir}/sets.subr 201.1Sdyoungprefix=/ 211.1Sdyoung 221.3Slukemusage() 231.3Slukem{ 241.3Slukem cat 1>&2 <<USAGE 251.3SlukemUsage: ${0##*/} [-a arch] [-m machine] [-s setsdir] [-p prefix] setname [...] 261.4Slukem -a arch set arch (e.g, m68k, mips, powerpc) [$MACHINE_ARCH] 271.4Slukem -m machine set machine (e.g, amiga, i386, macppc) [$MACHINE] 281.3Slukem -s setsdir directory to find sets [$setsdir] 291.3Slukem -p prefix prefix for created plist [$prefix] 301.3Slukem setname [...] sets to find dependencies for 311.3SlukemUSAGE 321.3Slukem exit 1 331.1Sdyoung} 341.1Sdyoung 351.1Sdyoung# parse arguments 361.3Slukemwhile getopts a:m:ps: ch; do 371.3Slukem case ${ch} in 381.3Slukem a) 391.4Slukem MACHINE_ARCH=${OPTARG} 401.4Slukem MACHINE_CPU=$(arch_to_cpu ${OPTARG}) 411.1Sdyoung ;; 421.3Slukem m) 431.4Slukem MACHINE=${OPTARG} 441.1Sdyoung ;; 451.3Slukem p) 461.3Slukem prefix=${OPTARG} 471.1Sdyoung ;; 481.3Slukem s) 491.3Slukem setsdir=${OPTARG} 501.1Sdyoung ;; 511.3Slukem *) 521.1Sdyoung usage 531.1Sdyoung ;; 541.1Sdyoung esac 551.1Sdyoungdone 561.3Slukemshift $((${OPTIND} - 1)) 571.1Sdyoungif [ $# -lt 1 ]; then 581.1Sdyoung usage 591.1Sdyoungfi 601.1Sdyoung 611.1Sdyoungsets=$@ 621.1Sdyoung 631.1Sdyoung# TBD clean up 641.1SdyoungSCRATCH=$(mktemp -d /var/tmp/$(basename $0).XXXXXX) 651.1Sdyoung 661.1Sdyoung[ $? -ne 0 ] && { echo "Could not create scratch directory." 1>&2 ; exit 1 ; } 671.1Sdyoung 681.1SdyoungPATH_MEMBERSHIP=$SCRATCH/path-membership 691.1SdyoungPATH_TO_PKGNAME=$SCRATCH/pathpkg.db 701.1SdyoungPARENT_PKGNAMES=$SCRATCH/parent-pkgnames 711.1SdyoungPARENT_PATHNAMES=$SCRATCH/parent-pathnames 721.1Sdyoung 731.1Sdyoungecho "indexing packages by pathnames" 1>&2 741.1Sdyoung 751.1Sdyounglist_set_files $sets | sed 's/^\.\///' | \ 761.1Sdyoungenv PREFIX=$prefix awk '{ 771.1Sdyoung if ($1 == ".") { 781.1Sdyoung print ENVIRON["PREFIX"] " " $2; 791.1Sdyoung } else { 801.1Sdyoung print ENVIRON["PREFIX"] $1 " " $2; 811.1Sdyoung } 821.1Sdyoung}' | sort -k 1 -u > $PATH_MEMBERSHIP 831.1Sdyoung 841.1Sdyoung$DB -w -f - btree $PATH_TO_PKGNAME < $PATH_MEMBERSHIP || echo "shit" 1>&2 851.1Sdyoung 861.1Sdyoungecho "computing parent pathnames" 1>&2 871.1Sdyoung 881.1Sdyoungwhile read pathname pkgname; do 891.1Sdyoung # print parent pathname 901.5Serh echo ${pathname%/*} 911.1Sdyoungdone < $PATH_MEMBERSHIP > $PARENT_PATHNAMES 921.1Sdyoung 931.1Sdyoungecho "selecting parent packages using parent pathnames" 1>&2 941.1Sdyoung 951.1Sdyoung$DB -f - btree $PATH_TO_PKGNAME < $PARENT_PATHNAMES | \ 961.1Sdyoung paste $PATH_MEMBERSHIP - | \ 971.5Serh awk '{ if ($2 != $4) print $2 " " $4; }' | sort -u | $rundir/culldeps 981.1Sdyoung 991.1Sdyoungif [ $? -ne 0 ]; then 1001.1Sdyoung echo "error in parent-directory lookup, aborting" 1>&2 1011.1Sdyoung exit 1 1021.1Sdyoungfi 103