summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2011-06-03 09:02:38 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2011-06-03 09:02:38 +0000
commit21366c854a411880fe83b68aceaf20596d2b374e (patch)
tree9e4b81531e1b9f562c4efd4e0e403f725654d6c5
parentb9ad256b04db3965bf21ed7ee25ddfd7c166d102 (diff)
downloadmkinitfs-21366c854a411880fe83b68aceaf20596d2b374e.tar.bz2
mkinitfs-21366c854a411880fe83b68aceaf20596d2b374e.tar.xz
mkinitfs-rundep: new tool for tracing runtime deps
-rw-r--r--Makefile2
-rwxr-xr-xmkinitfs-rundep.in36
2 files changed, 37 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index c5b84e0..2552e65 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@ sysconfdir ?= /etc/mkinitfs
datarootdir ?= /usr/share
datadir ?= $(datarootdir)/mkinitfs
-SBIN_FILES := mkinitfs bootchartd
+SBIN_FILES := mkinitfs bootchartd mkinitfs-rundep
SHARE_FILES := initramfs-init fstab passwd group
CONF_FILES := mkinitfs.conf \
modules.d/ata \
diff --git a/mkinitfs-rundep.in b/mkinitfs-rundep.in
new file mode 100755
index 0000000..ee9bcdb
--- /dev/null
+++ b/mkinitfs-rundep.in
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# resolve .so dependencies using ldd
+
+find_path() {
+ for i in /lib /usr/lib; do
+ [ -e "$i/$1" ] && echo "$i/$1" && return 0
+ done
+ return 1
+}
+
+resolve_links() {
+ local f
+ while [ $# -gt 0 ]; do
+ if [ -L "$1" ]; then
+ local f=$(readlink $1)
+ local p="$(find_path $f)"
+# echo "following $p"
+ resolve_links $p
+ fi
+ echo "$1"
+ shift
+ done
+}
+
+find_deps() {
+ bin=$1
+ resolve_links $(ldd $bin 2>/dev/null | awk -F'=>' '{print $2}' | sed 's/(.*//')
+}
+
+while [ $# -gt 0 ]; do
+ find_deps $1 || exit 1
+ shift
+done
+
+