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