#!/bin/sh # # syspkgdeps [-a arch] [-m machine] [-s setsdir] [-p prefix] sets # # Compute naive package dependencies based on file & directory # nesting. E.g., if pkg P contains /foo/bar and Q contains /foo, # then Q is considered a dependency of P. # #set -u : ${TOOL_DB=db} DB="${TOOL_DB} -q" # # set defaults and import setlist subroutines # rundir=${0%/*} . ${rundir}/sets.subr prefix=/ usage() { cat 1>&2 <&2 ; exit 1 ; } PATH_MEMBERSHIP=$SCRATCH/path-membership PATH_TO_PKGNAME=$SCRATCH/pathpkg.db PARENT_PKGNAMES=$SCRATCH/parent-pkgnames PARENT_PATHNAMES=$SCRATCH/parent-pathnames echo "indexing packages by pathnames" 1>&2 list_set_files $sets | sed 's/^\.\///' | \ env PREFIX=$prefix awk '{ if ($1 == ".") { print ENVIRON["PREFIX"] " " $2; } else { print ENVIRON["PREFIX"] $1 " " $2; } }' | sort -k 1 -u > $PATH_MEMBERSHIP $DB -w -f - btree $PATH_TO_PKGNAME < $PATH_MEMBERSHIP || echo "shit" 1>&2 echo "computing parent pathnames" 1>&2 while read pathname pkgname; do # print parent pathname echo ${pathname%/*} done < $PATH_MEMBERSHIP > $PARENT_PATHNAMES echo "selecting parent packages using parent pathnames" 1>&2 $DB -f - btree $PATH_TO_PKGNAME < $PARENT_PATHNAMES | \ paste $PATH_MEMBERSHIP - | \ awk '{ if ($2 != $4) print $2 " " $4; }' | sort -u | $rundir/culldeps if [ $? -ne 0 ]; then echo "error in parent-directory lookup, aborting" 1>&2 exit 1 fi