diff options
Diffstat (limited to 'dist/net-snmp-solaris-build/elfdepend.sh')
-rwxr-xr-x | dist/net-snmp-solaris-build/elfdepend.sh | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/dist/net-snmp-solaris-build/elfdepend.sh b/dist/net-snmp-solaris-build/elfdepend.sh new file mode 100755 index 0000000..547c4cc --- /dev/null +++ b/dist/net-snmp-solaris-build/elfdepend.sh @@ -0,0 +1,87 @@ +#!/bin/ksh +# +# elfdepend.sh +# +# given a path, this scripts searches for ELF binaries and libraries +# and generates package dependency file entries according to ther dependencies +# +# Usage: elfdepend <ELF-binary>|<directory> +# +# 2002/11 Stefan.Radman@CTBTO.ORG +# +# /var/sadm/install/contents format: +# +# /dev d none 0775 root sys SUNWcsr SUNWcsd +# path type class mode owner group packages +# /etc/.login f renamenew 0644 root sys 516 37956 904647695 SUNWcsr +# /etc/acct/holidays e preserve 0664 bin bin 289 22090 904647603 SUNWaccr +# path type class mode owner group x x x packages +# /bin=./usr/bin s none SUNWcsr +# path=link type class packages +# /devices/pseudo/clone@0:hme c none 11 7 0600 root sys SUNWcsd +# path type class x x owner mode packages +# +# types e (sed), v (volatile) have same format like type f (file) +# type l (hardlink) has same format like type s (symlink) +# +prog=`basename $0` +LAST_CHANCE=/opt/OSS/lib + +if [ -d "$1" ] ; then + find $1 -type f -exec file {} \; +elif [ -x "$1" ] ; then + file $1 +else + echo 1>&2 "usage: $0 <directory>|<ELF executable>" + exit 1 +fi | awk '$2 == "ELF" { print }' | cut -d: -f1 |\ +while read elf +do + ldd "$elf" | while read lib x path + do + [ -z "$path" ] && continue + if [ "$path" = '(file not found)' ] + then + if [ -x $LAST_CHANCE/$lib ] + then + path="$LAST_CHANCE/$lib" + else + echo "# $prog: $lib $x $path" + continue # not found + fi + fi + echo "$path" + # need symlink handling here - see /usr/platform/SUNW,*/lib/* + done +done | sort -u | while read libpath other +do + [ "$libpath" = "#" ] && echo "$libpath $other" && continue # error message + set -- `grep "^$libpath[ =]" /var/sadm/install/contents | head -1` + path=$1; type=$2 + case $type in + f) # file + shift 9 # first package + ;; + s|l) # link + shift 3 # first package + ;; + '') # not found + echo "# $prog: $libpath is not associated with any package" + continue + ;; + *) # dubious file type + echo "# $prog: path $1 has dubious file type $2" + continue + ;; + esac + set -- `echo $1 | tr : ' '` + echo $1 # strip off classes +done | sort -u | while read pkg other +do + if [ "$pkg" = "#" ] ; then # error message + echo 1>&2 "$other" # goes to stderr + continue + fi + eval `pkgparam -v $pkg PKG NAME` + printf "P %-15s%s\n" "$PKG" "$NAME" +done |