syspkgdeps revision 1.9
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.9Sapb -a arch set arch (e.g, m68k, mips, powerpc) [${MACHINE_ARCH}] 241.9Sapb -m machine set machine (e.g, amiga, i386, macppc) [${MACHINE}] 251.9Sapb -s setsdir directory to find sets [${setsdir}] 261.9Sapb -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.9Sapb MACHINE_ARCH="${OPTARG}" 371.9Sapb MACHINE_CPU="$(arch_to_cpu "${OPTARG}")" 381.1Sdyoung ;; 391.3Slukem m) 401.9Sapb MACHINE="${OPTARG}" 411.1Sdyoung ;; 421.3Slukem p) 431.9Sapb prefix="${OPTARG}" 441.1Sdyoung ;; 451.3Slukem s) 461.9Sapb 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.9Sapbsets="$*" 591.1Sdyoung 601.1Sdyoung# TBD clean up 611.9SapbSCRATCH="$(${MKTEMP} -d "/var/tmp/${0##*/}.XXXXXX")" 621.1Sdyoung 631.1Sdyoung[ $? -ne 0 ] && { echo "Could not create scratch directory." 1>&2 ; exit 1 ; } 641.1Sdyoung 651.9SapbPATH_MEMBERSHIP="${SCRATCH}/path-membership" 661.9SapbPATH_TO_PKGNAME="${SCRATCH}/pathpkg.db" 671.9SapbPARENT_PKGNAMES="${SCRATCH}/parent-pkgnames" 681.9SapbPARENT_PATHNAMES="${SCRATCH}/parent-pathnames" 691.1Sdyoung 701.1Sdyoungecho "indexing packages by pathnames" 1>&2 711.1Sdyoung 721.9Sapblist_set_files ${sets} | ${SED} 's/^\.\///' | \ 731.9Sapb${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.9Sapb}' | ${SORT} -k 1 -u > "${PATH_MEMBERSHIP}" 801.1Sdyoung 811.9Sapb${DB} -q -w -f - btree "${PATH_TO_PKGNAME}" < "${PATH_MEMBERSHIP}" || \ 821.9Sapb echo "shit" 1>&2 831.1Sdyoung 841.1Sdyoungecho "computing parent pathnames" 1>&2 851.1Sdyoung 861.1Sdyoungwhile read pathname pkgname; do 871.1Sdyoung # print parent pathname 881.9Sapb echo "${pathname%/*}" 891.9Sapbdone < "${PATH_MEMBERSHIP}" > "${PARENT_PATHNAMES}" 901.1Sdyoung 911.1Sdyoungecho "selecting parent packages using parent pathnames" 1>&2 921.1Sdyoung 931.9Sapb${DB} -q -f - btree "${PATH_TO_PKGNAME}" < "${PARENT_PATHNAMES}" | \ 941.9Sapb ${PASTE} "${PATH_MEMBERSHIP}" - | \ 951.8Sapb ${AWK} '{ if ($2 != $4) print $2 " " $4; }' | \ 961.8Sapb ${SORT} -u | \ 971.9Sapb "${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