summaryrefslogtreecommitdiff
path: root/find-libs
diff options
context:
space:
mode:
authorPeter Wu <lekensteyn@gmail.com>2013-04-23 18:59:15 +0200
committerPeter Wu <lekensteyn@gmail.com>2013-04-23 18:59:15 +0200
commitaf38cb02a9ca95b20056bc92e73fe72a45d1f523 (patch)
tree41628cac3a02d2c4dcf4ff6ecbb1fb8c5378db20 /find-libs
downloadscripts-af38cb02a9ca95b20056bc92e73fe72a45d1f523.tar.gz
Initial checkin.
Diffstat (limited to 'find-libs')
-rwxr-xr-xfind-libs44
1 files changed, 44 insertions, 0 deletions
diff --git a/find-libs b/find-libs
new file mode 100755
index 0000000..575490d
--- /dev/null
+++ b/find-libs
@@ -0,0 +1,44 @@
+#!/bin/bash
+libs="$(mktemp)"
+
+dbg() {
+ [ -z "$DEBUG" ] || echo "$*" >&2
+}
+
+# prints all libraries directly depending on a binary / library
+find_libs() {
+ local file="$1"
+ # regular libs
+ ldd "$file" | awk -F'> | \\(' '{if($2 ~ "^/")print $2}' | sort -u
+}
+
+# returns 1 if a library was known before, 0 otherwise
+add_lib() {
+ local lib="$1"
+ if ! grep -q -x -F "$lib" "$libs"; then
+ dbg "Adding $lib"
+ echo "$lib" >> "$libs"
+ return 0
+ fi
+ return 1
+}
+recurse_find_libs() {
+ local file="$1"
+ dbg "Checking $file"
+ while read lib; do
+ if add_lib "$lib"; then
+ recurse_find_libs "$lib"
+ fi
+ done < <(find_libs "$file")
+ dbg "Done with $file"
+}
+
+for bin; do
+ # ld-linux.so
+ while read lib; do
+ add_lib "$lib" || true
+ done < <(ldd "$bin" | awk '/^[ \t]*\//{print $1}')
+ recurse_find_libs "$bin"
+done
+
+wc -l "$libs"