diff -r 9b9a0bb51cfb -r 226d9684bf3c scripts/xldd.in --- a/scripts/xldd.in Tue Nov 23 21:35:45 2010 +0100 +++ b/scripts/xldd.in Wed Nov 24 21:01:46 2010 +0100 @@ -224,14 +224,26 @@ # Scan a file for all NEEDED tags do_process_file() { local file="${1}" + local n m + local found do_trace "Parsing file '${file}'\n" - "${readelf}" -d "${file}" \ - |"${grep}" -E '\(NEEDED\)' \ - |"${sed}" -r -e 's/^.*Shared library:[[:space:]]+\[(.*)\]$/\1/;' \ - |while read needed; do - do_find_needed "${needed}" + for n in $( "${readelf}" -d "${file}" \ + |"${grep}" -E '\(NEEDED\)' \ + |"${sed}" -r -e 's/^.*Shared library:[[:space:]]+\[(.*)\]$/\1/;' \ + ); do + found=0 + for m in "${needed_list[@]}"; do + [ "${n}" = "${m}" ] && found=1 && break + done + if [ ${found} -ne 0 ]; then + do_trace "-> skipping already known dependency '${n}'\n" + continue + fi + do_trace "-> handling new dependency '${n}'\n" + needed_list+=( "${n}" ) + do_find_needed "${n}" done } @@ -283,4 +295,5 @@ done do_trace "Scanning file '${1}'\n" +declare -a needed_list do_process_file "${1}"