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