summaryrefslogtreecommitdiff
path: root/find-libs
blob: 575490d8daf39a29a49d6050c5e96117d76ef6e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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"