1 #!/bin/sh 2 # 3 # syspkgdeps [-a arch] [-m machine] [-s setsdir] [-p prefix] sets 4 # 5 # Compute naive package dependencies based on file & directory 6 # nesting. E.g., if pkg P contains /foo/bar and Q contains /foo, 7 # then Q is considered a dependency of P. 8 # 9 10 #set -u 11 12 # 13 # set defaults and import setlist subroutines 14 # 15 rundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/" 16 . "${rundir}/sets.subr" 17 18 19 usage() 20 { 21 cat 1>&2 <<USAGE 22 Usage: ${0##*/} [-a arch] [-m machine] [-s setsdir] [-p prefix] setname [...] 23 -a arch set arch (e.g, m68k, mips, powerpc) [${MACHINE_ARCH}] 24 -m machine set machine (e.g, amiga, i386, macppc) [${MACHINE}] 25 -s setsdir directory to find sets [${setsdir}] 26 -p prefix prefix for created plist [${prefix}] 27 setname [...] sets to find dependencies for 28 USAGE 29 exit 1 30 } 31 32 # parse arguments 33 while getopts a:m:ps: ch; do 34 case ${ch} in 35 a) 36 MACHINE_ARCH="${OPTARG}" 37 MACHINE_CPU="$(arch_to_cpu "${OPTARG}")" 38 ;; 39 m) 40 MACHINE="${OPTARG}" 41 ;; 42 p) 43 prefix="${OPTARG}" 44 ;; 45 s) 46 setsdir="${OPTARG}" 47 ;; 48 *) 49 usage 50 ;; 51 esac 52 done 53 shift $((${OPTIND} - 1)) 54 if [ $# -lt 1 ]; then 55 usage 56 fi 57 58 sets="$*" 59 60 # TBD clean up 61 SCRATCH="$(${MKTEMP} -d "/var/tmp/${0##*/}.XXXXXX")" 62 63 [ $? -ne 0 ] && { echo "Could not create scratch directory." 1>&2 ; exit 1 ; } 64 65 PATH_MEMBERSHIP="${SCRATCH}/path-membership" 66 PATH_TO_PKGNAME="${SCRATCH}/pathpkg.db" 67 PARENT_PKGNAMES="${SCRATCH}/parent-pkgnames" 68 PARENT_PATHNAMES="${SCRATCH}/parent-pathnames" 69 70 echo "indexing packages by pathnames" 1>&2 71 72 list_set_files ${sets} | ${SED} 's/^\.\///' | \ 73 ${ENV_CMD} PREFIX="${prefix}" ${AWK} '{ 74 if ($1 == ".") { 75 print ENVIRON["PREFIX"] " " $2; 76 } else { 77 print ENVIRON["PREFIX"] $1 " " $2; 78 } 79 }' | ${SORT} -k 1 -u > "${PATH_MEMBERSHIP}" 80 81 ${DB} -q -w -f - btree "${PATH_TO_PKGNAME}" < "${PATH_MEMBERSHIP}" || \ 82 echo "shit" 1>&2 83 84 echo "computing parent pathnames" 1>&2 85 86 while read pathname pkgname; do 87 # print parent pathname 88 echo "${pathname%/*}" 89 done < "${PATH_MEMBERSHIP}" > "${PARENT_PATHNAMES}" 90 91 echo "selecting parent packages using parent pathnames" 1>&2 92 93 ${DB} -q -f - btree "${PATH_TO_PKGNAME}" < "${PARENT_PATHNAMES}" | \ 94 ${PASTE} "${PATH_MEMBERSHIP}" - | \ 95 ${AWK} '{ if ($2 != $4) print $2 " " $4; }' | \ 96 ${SORT} -u | \ 97 "${rundir}/culldeps" 98 99 if [ $? -ne 0 ]; then 100 echo "error in parent-directory lookup, aborting" 1>&2 101 exit 1 102 fi 103