summaryrefslogtreecommitdiff
path: root/dist/net-snmp-solaris-build/elfdepend.sh
diff options
context:
space:
mode:
Diffstat (limited to 'dist/net-snmp-solaris-build/elfdepend.sh')
-rwxr-xr-xdist/net-snmp-solaris-build/elfdepend.sh87
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