syspkgdeps revision 1.2
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 12DB="db -q" 13 14# 15# set defaults and import setlist subroutines 16# 17. ./sets.defaults 18 19. ./sets.subr 20setd=$(pwd) 21prefix=/ 22 23usage() { 24exec 1>&2 25 26echo "Usage: $0 [-a arch] [-m machine] [-s setsdir] [-p prefix] sets" 27echo " -a arch set arch (e.g, m68k, mips, powerpc) [$machine_arch]" 28echo " -m machine set machine (e.g, amiga, i386, macppc) [$machine]" 29echo " -s setsdir directory to find sets [$setd]" 30echo " -p prefix prefix for created plist [$prefix]" 31echo " sets sets to find dependencies for" 32 33exit 1 34} 35 36# parse arguments 37while : ; do 38 case $1 in 39 -a*) 40 machine_arch=${2} 41 machine_cpu=$(arch_to_cpu ${2}) 42 shift 43 ;; 44 -m*) 45 machine=$2; shift 46 ;; 47 -s*) 48 setd=$2; shift 49 ;; 50 -p*) 51 prefix=$2; shift 52 ;; 53 -*) 54 usage 55 ;; 56 *) 57 break 58 ;; 59 esac 60 shift 61done 62if [ $# -lt 1 ]; then 63 usage 64fi 65 66sets=$@ 67 68if [ "$object_fmt" = "ELF" ]; then 69 shlib=elf 70else 71 shlib=aout 72fi 73stlib=$shlib 74 75# Turn off shlibs for some ports. 76if [ "$machine_cpu" = "sh3" -o "$machine_arch" = "m68000" ]; then 77 shlib=no 78fi 79 80lkm=yes 81# Turn off LKMs for some ports. 82if [ "$machine" = "evbppc" ]; then 83 lkm=no 84fi 85 86# Turn off lintlibs for some ports. 87# Not needed anymore, leave the hook here for future use. 88lintlibs= 89 90# TBD clean up 91SCRATCH=$(mktemp -d /var/tmp/$(basename $0).XXXXXX) 92 93[ $? -ne 0 ] && { echo "Could not create scratch directory." 1>&2 ; exit 1 ; } 94 95PATH_MEMBERSHIP=$SCRATCH/path-membership 96PATH_TO_PKGNAME=$SCRATCH/pathpkg.db 97PARENT_PKGNAMES=$SCRATCH/parent-pkgnames 98PARENT_PATHNAMES=$SCRATCH/parent-pathnames 99 100echo "indexing packages by pathnames" 1>&2 101 102list_set_files $sets | sed 's/^\.\///' | \ 103env PREFIX=$prefix awk '{ 104 if ($1 == ".") { 105 print ENVIRON["PREFIX"] " " $2; 106 } else { 107 print ENVIRON["PREFIX"] $1 " " $2; 108 } 109}' | sort -k 1 -u > $PATH_MEMBERSHIP 110 111$DB -w -f - btree $PATH_TO_PKGNAME < $PATH_MEMBERSHIP || echo "shit" 1>&2 112 113echo "computing parent pathnames" 1>&2 114 115while read pathname pkgname; do 116 # print parent pathname 117 dirname $pathname 118done < $PATH_MEMBERSHIP > $PARENT_PATHNAMES 119 120echo "selecting parent packages using parent pathnames" 1>&2 121 122$DB -f - btree $PATH_TO_PKGNAME < $PARENT_PATHNAMES | \ 123 paste $PATH_MEMBERSHIP - | \ 124 awk '{ if ($2 != $4) print $2 " " $4; }' | sort -u | ./culldeps 125 126if [ $? -ne 0 ]; then 127 echo "error in parent-directory lookup, aborting" 1>&2 128 exit 1 129fi 130