diff options
author | Peter Wu <lekensteyn@gmail.com> | 2013-04-23 18:59:15 +0200 |
---|---|---|
committer | Peter Wu <lekensteyn@gmail.com> | 2013-04-23 18:59:15 +0200 |
commit | af38cb02a9ca95b20056bc92e73fe72a45d1f523 (patch) | |
tree | 41628cac3a02d2c4dcf4ff6ecbb1fb8c5378db20 /find-libs | |
download | scripts-af38cb02a9ca95b20056bc92e73fe72a45d1f523.tar.gz |
Initial checkin.
Diffstat (limited to 'find-libs')
-rwxr-xr-x | find-libs | 44 |
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" |