diff options
author | Mike Frysinger <vapier@gentoo.org> | 2009-12-01 10:17:05 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2009-12-01 10:17:05 +0000 |
commit | cc9a6a78f64dcee2a9bfe0bfdf28739fb9e0b5bb (patch) | |
tree | 75dd452cfcd20fc6c0b51a59494be42b14fc699e /lddtree.sh | |
parent | allow lddtree to be sourced by other scripts to share common funcs (diff) | |
download | pax-utils-cc9a6a78f64dcee2a9bfe0bfdf28739fb9e0b5bb.tar.gz pax-utils-cc9a6a78f64dcee2a9bfe0bfdf28739fb9e0b5bb.tar.bz2 pax-utils-cc9a6a78f64dcee2a9bfe0bfdf28739fb9e0b5bb.zip |
cache rpath/ldso lookups when possible to speed things up
Diffstat (limited to 'lddtree.sh')
-rwxr-xr-x | lddtree.sh | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -39,8 +39,20 @@ find_elf() { done return 1 } - check_paths "${elf}" $(scanelf -qF '#F%r' "${needed_by}") && return 0 - check_paths "${elf}" $(sed -e 's:^[[:space:]]*#.*::' /etc/ld.so.conf) && return 0 + if [[ ${__last_needed_by} != ${needed_by} ]] ; then + __last_needed_by=${needed_by} + __last_needed_by_rpaths=$(scanelf -qF '#F%r' "${needed_by}" | sed 's|:| |g') + fi + check_paths "${elf}" ${__last_needed_by_rpaths} && return 0 + if [[ -z ${__ldso_paths} ]] ; then + if [[ -r /etc/ld.so.conf ]] ; then + __ldso_paths=$(sed -e 's:^[[:space:]]*#.*::' /etc/ld.so.conf) + fi + : ${__ldso_paths:= } + fi + if [[ ${__ldso_paths} != " " ]] ; then + check_paths "${elf}" ${__ldso_paths} && return 0 + fi check_paths "${elf}" /lib* /usr/lib* /usr/local/lib* && return 0 fi return 1 |