diff options
Diffstat (limited to 'main/pax-utils/lddtree-sh.patch')
-rw-r--r-- | main/pax-utils/lddtree-sh.patch | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/main/pax-utils/lddtree-sh.patch b/main/pax-utils/lddtree-sh.patch new file mode 100644 index 0000000000..6967df81c6 --- /dev/null +++ b/main/pax-utils/lddtree-sh.patch @@ -0,0 +1,209 @@ +--- ./lddtree.sh.orig 2014-03-18 13:38:57.284756931 +0100 ++++ ./lddtree.sh 2014-03-18 13:22:47.296407170 +0100 +@@ -1,4 +1,4 @@ +-#!/bin/bash ++#!/bin/sh + # Copyright 2007-2013 Gentoo Foundation + # Copyright 2007-2013 Mike Frysinger <vapier@gentoo.org> + # Distributed under the terms of the GNU General Public License v2 +@@ -7,8 +7,9 @@ + argv0=${0##*/} + + : ${ROOT:=/} +-[[ ${ROOT} != */ ]] && ROOT="${ROOT}/" +-[[ ${ROOT} != /* ]] && ROOT="${PWD}${ROOT}" ++ ++[ "${ROOT}" = "${ROOT%/}" ] && ROOT="${ROOT}/" ++[ "${ROOT}" = "${ROOT#/}" ] && ROOT="${PWD}/${ROOT}" + + usage() { + cat <<-EOF +@@ -54,7 +55,7 @@ + _find_elf='' + + local elf=$1 needed_by=$2 +- if [[ ${elf} == */* ]] && [[ -e ${elf} ]] ; then ++ if [ "${elf}" != "${elf##*/}" ] && [ -e "${elf}" ] ; then + _find_elf=${elf} + return 0 + else +@@ -63,8 +64,8 @@ + local path pe + for path ; do + pe="${path%/}/${elf#/}" +- if [[ -e ${pe} ]] ; then +- if [[ $(elf_specs "${pe}") == "${elf_specs}" ]] ; then ++ if [ -e "${pe}" ] ; then ++ if [ "$(elf_specs "${pe}")" = "${elf_specs}" ] ; then + _find_elf=${pe} + return 0 + fi +@@ -73,52 +74,53 @@ + return 1 + } + +- if [[ ${c_last_needed_by} != ${needed_by} ]] ; then +- c_last_needed_by=${needed_by} ++ if [ "${c_last_needed_by}" != "${needed_by}" ] ; then ++ c_last_needed_by="${needed_by}" + c_last_needed_by_rpaths=$(scanelf -qF '#F%r' "${needed_by}" | \ + sed -e 's|:| |g' -e "s:[$]ORIGIN:${needed_by%/*}:") + fi + check_paths "${elf}" ${c_last_needed_by_rpaths} && return 0 + +- if [[ -n ${LD_LIBRARY_PATH} ]] ; then ++ if [ -n "${LD_LIBRARY_PATH}" ] ; then + # Need to handle empty paths as $PWD, + # and handle spaces in between the colons + local p path=${LD_LIBRARY_PATH} + while : ; do + p=${path%%:*} + check_paths "${elf}" "${p:-${PWD}}" && return 0 +- [[ ${path} == *:* ]] || break ++ [ "${path}" = "${path#*:}" ] && break + path=${path#*:} + done + fi + + if ! ${c_ldso_paths_loaded} ; then + c_ldso_paths_loaded='true' +- c_ldso_paths=() +- if [[ -r ${ROOT}etc/ld.so.conf ]] ; then ++ c_ldso_paths= ++ if [ -r ${ROOT}etc/ld.so.conf ] ; then + read_ldso_conf() { + local line p + for p ; do + # if the glob didnt match anything #360041, + # or the files arent readable, skip it +- [[ -r ${p} ]] || continue ++ [ -r "${p}" ] || continue + while read line ; do + case ${line} in + "#"*) ;; + "include "*) read_ldso_conf ${line#* } ;; +- *) c_ldso_paths+=( "${ROOT}${line#/}" ) ;; ++ *) c_ldso_paths="$c_ldso_paths:${ROOT}${line#/}";; + esac + done <"${p}" + done + } + # the 'include' command is relative +- pushd "${ROOT}"etc >/dev/null ++ local _oldpwd="$PWD" ++ cd "$ROOT"etc >/dev/null + read_ldso_conf "${ROOT}"etc/ld.so.conf +- popd >/dev/null ++ cd "$_oldpwd" + fi + fi +- if [[ ${#c_ldso_paths[@]} -gt 0 ]] ; then +- check_paths "${elf}" "${c_ldso_paths[@]}" && return 0 ++ if [ -n "${c_ldso_paths}" ] ; then ++ check_paths "${elf}" ${c_ldso_paths//:/ } && return 0 + fi + + check_paths "${elf}" ${lib_paths_ldso:-${lib_paths_fallback}} && return 0 +@@ -135,27 +137,29 @@ + elf=${elf##*/} + + ${LIST} || printf "%${indent}s%s => " "" "${elf}" +- if [[ ,${parent_elfs}, == *,${elf},* ]] ; then ++ case ",${parent_elfs}," in ++ *,${elf},*) + ${LIST} || printf "!!! circular loop !!!\n" "" + return +- fi ++ ;; ++ esac + parent_elfs="${parent_elfs},${elf}" + if ${LIST} ; then + echo "${resolved:-$1}" + else + printf "${resolved:-not found}" + fi +- if [[ ${indent} -eq 0 ]] ; then ++ if [ ${indent} -eq 0 ] ; then + elf_specs=$(elf_specs "${resolved}") + interp=$(scanelf -qF '#F%i' "${resolved}") +- [[ -n ${interp} ]] && interp="${ROOT}${interp#/}" ++ [ -n "${interp}" ] && interp="${ROOT}${interp#/}" + + if ${LIST} ; then +- [[ -n ${interp} ]] && echo "${interp}" ++ [ -n "${interp}" ] && echo "${interp}" + else + printf " (interpreter => ${interp:-none})" + fi +- if [[ -r ${interp} ]] ; then ++ if [ -r "${interp}" ] ; then + # Extract the default lib paths out of the ldso. + lib_paths_ldso=$( + strings "${interp}" | \ +@@ -166,7 +170,7 @@ + fi + ${LIST} || printf "\n" + +- [[ -z ${resolved} ]] && return ++ [ -z "${resolved}" ] && return + + libs=$(scanelf -qF '#F%n' "${resolved}") + +@@ -178,16 +182,15 @@ + + for lib in ${libs//,/ } ; do + lib=${lib##*/} +- [[ ,${my_allhits}, == *,${lib},* ]] && continue ++ case ",${my_allhits}," in ++ *,${lib},*) continue;; ++ esac + find_elf "${lib}" "${resolved}" + rlib=${_find_elf} + show_elf "${rlib:-${lib}}" $((indent + 4)) "${parent_elfs}" + done + } + +-# XXX: internal hack +-if [[ $1 != "/../..source.lddtree" ]] ; then +- + SHOW_ALL=false + SET_X=false + LIST=false +@@ -210,8 +213,8 @@ + ?) usage 1;; + esac + done +-shift $((OPTIND - 1)) +-[[ -z $1 ]] && usage 1 ++shift $(( $OPTIND - 1)) ++[ -z "$1" ] && usage 1 + + ${SET_X} && set -x + +@@ -219,21 +222,20 @@ + for elf ; do + unset lib_paths_ldso + unset c_last_needed_by +- if ${AUTO_ROOT} && [[ ${elf} == /* ]] ; then ++ if ${AUTO_ROOT} && [ -z "${elf##/*}" ] ; then + elf="${ROOT}${elf#/}" + fi +- if [[ ! -e ${elf} ]] ; then ++ if [ ! -e "${elf}" ] ; then + error "${elf}: file does not exist" +- elif [[ ! -r ${elf} ]] ; then ++ elif [ ! -r "${elf}" ] ; then + error "${elf}: file is not readable" +- elif [[ -d ${elf} ]] ; then ++ elif [ -d "${elf}" ] ; then + error "${elf}: is a directory" + else + allhits="" +- [[ ${elf} != */* ]] && elf="./${elf}" ++ [ "${elf##*/*}" = "${elf}" ] && elf="./${elf}" + show_elf "${elf}" 0 "" + fi + done + exit ${ret} + +-fi |