From: Elliott Mitchell Date: Fri, 17 Jul 2020 06:37:42 +0000 (-0700) Subject: d/shuffle-binaries: Fix binary shuffling script for cross-building X-Git-Tag: archive/raspbian/4.14.1+11-gb0b734a8b3-1+rpi1^2~52 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=c17e5a61a259140f2bf662f16f8d11b74db61a69;p=xen.git d/shuffle-binaries: Fix binary shuffling script for cross-building `ldd` doesn't work with cross-builds, so use `file` to detect scripts and `strings | grep` for identifying linked libraries. Even though debhelper depends on file, make the requirement explicit. Heavily simplify script inner loop. While the core of that inner loop was often executed only once, it is best to shrink inner loops. Signed-off-by: Elliott Mitchell Acked-by: Hans van Kranenburg --- diff --git a/debian/control b/debian/control index 942bf6711c..1f88f1a40f 100644 --- a/debian/control +++ b/debian/control @@ -8,6 +8,7 @@ Build-Depends: debhelper (>= 10), dh-exec, dpkg-dev (>= 1.16.0~), + file, rdfind, lsb-release, flex, bison, diff --git a/debian/shuffle-binaries b/debian/shuffle-binaries index 8a823da10b..3d951ed721 100755 --- a/debian/shuffle-binaries +++ b/debian/shuffle-binaries @@ -9,11 +9,9 @@ version="$1"; shift # currently-running version of Xen. The actual binaries go # in xen-utils-$version:usr/lib/xen-$version/bin # -# We use ldd to see what libraries the binary is linked against. -# We ignore errors from ldd because we are running it on scripts -# and things too and it is hard to distinguish these errors. -# -# We then match against the libraries listed for inclusion here: +# We first have to figure out what libraries the binary is linked +# against. We then match against the libraries listed for inclusion +# here: list=debian/libxenmiscV.install.vsn-in t=debian/tmp @@ -23,28 +21,28 @@ cd=/usr/lib/xen-common/bin mkdir -p "$t/$vd" for binary in `find $t/usr/{bin,sbin} -type f`; do - reason='' - { ldd "$binary" ||: ; } | { fgrep '=>' ||: ; } \ - | ( - while read lib dummy; do + # filter for executables (ignore scripts) + file "$binary" | grep -q -eELF.\\+version.\\+interpreter || continue + + reason=$( + strings "$binary" | grep -e^lib.\\+\\.so\\.\[.0-9\]\\+\$ | \ + while read lib; do lib=${lib%.so.*} - if grep -F "usr/lib/*/$lib.so.*" $list >/dev/null; then - reason+=" $lib" + if grep -q -F "usr/lib/*/$lib.so.*" $list; then + printf " %s" "$lib" fi done + ) - if [ "x$reason" = x ]; then - exit 0 - fi + # if no reason, then skip + [ -n "$reason" ] || continue - echo "shuffling $binary $reason" + echo "shuffling $binary$reason" - leaf=${binary##*} - mv -v $binary $t/$vd/$leaf - ln -vs $cd/xen-utils-wrapper $binary + mv -v "$binary" "$t/$vd/" + ln -vs "$cd/xen-utils-wrapper" "$binary" - touch debian/shuffle-binaries.stamp - ) + touch "$0.stamp" done if [ ! -e "$0.stamp" ]; then