Elliott Mitchell
2020-Dec-02 19:49 UTC
[Pkg-xen-devel] [PATCH 06/19] 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 <ehem+debian at m5p.com> --- debian/control | 1 + debian/shuffle-binaries | 31 ++++++++++++++++--------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/debian/control b/debian/control index 942bf6711c..90007f6a02 100644 --- a/debian/control +++ b/debian/control @@ -6,6 +6,7 @@ Section: admin Standards-Version: 4.5.0 Build-Depends: debhelper (>= 10), + file, dh-exec, dpkg-dev (>= 1.16.0~), rdfind, diff --git a/debian/shuffle-binaries b/debian/shuffle-binaries index 37176d26e7..03b4bc4794 100755 --- a/debian/shuffle-binaries +++ b/debian/shuffle-binaries @@ -24,28 +24,29 @@ mkdir -p "$t/$vd" find "$t"/usr/*bin -type f | while read binary; do - reason='' - { ldd "$binary" ||: ; } | { fgrep '=>' ||: ; } \ - | ( - while read lib dummy; do + # filter for executables (ignore scripts) + file "$binary" | grep -q -eELF.\\+version.\\+interpreter || continue + + # ldd doesn't work for cross-building + 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 -- -- (\___(\___(\______ --=> 8-) EHM <=-- ______/)___/)___/) \BS ( | ehem+sigmsg at m5p.com PGP 87145445 | ) / \_CS\ | _____ -O #include <stddisclaimer.h> O- _____ | / _/ 8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445
Hans van Kranenburg
2020-Dec-04 21:04 UTC
[Pkg-xen-devel] [PATCH 06/19] d/shuffle-binaries: Fix binary shuffling script for cross-building
On 7/17/20 8:37 AM, Elliott Mitchell wrote:> `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 <ehem+debian at m5p.com> > --- > debian/control | 1 + > debian/shuffle-binaries | 31 ++++++++++++++++--------------- > 2 files changed, 17 insertions(+), 15 deletions(-) > > diff --git a/debian/control b/debian/control > index 942bf6711c..90007f6a02 100644 > --- a/debian/control > +++ b/debian/control > @@ -6,6 +6,7 @@ Section: admin > Standards-Version: 4.5.0 > Build-Depends: > debhelper (>= 10), > + file, > dh-exec, > dpkg-dev (>= 1.16.0~), > rdfind, > diff --git a/debian/shuffle-binaries b/debian/shuffle-binaries > index 37176d26e7..03b4bc4794 100755 > --- a/debian/shuffle-binaries > +++ b/debian/shuffle-binaries > @@ -24,28 +24,29 @@ mkdir -p "$t/$vd" > > find "$t"/usr/*bin -type f | while read binary; do > > - reason='' > - { ldd "$binary" ||: ; } | { fgrep '=>' ||: ; } \ > - | ( > - while read lib dummy; do > + # filter for executables (ignore scripts) > + file "$binary" | grep -q -eELF.\\+version.\\+interpreter || continue > + > + # ldd doesn't work for cross-building > + 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 >Ok, this one does not apply: ~/build/xen/debian-xen k (knorrie/sid) 0-$ git am -3 20201204-2028-ehem/06\ d_shuffle-binaries\:\ Fix\ binary\ shuffling\ script\ for\ cross-building\ -\ Elliott\ Mitchell\ \<ehem+debian at m5p.com\>\ -\ 2020-07-17\ 0837.eml Applying: d/shuffle-binaries: Fix binary shuffling script for cross-building error: sha1 information is lacking or useless (debian/shuffle-binaries). error: could not build fake ancestor Patch failed at 0001 d/shuffle-binaries: Fix binary shuffling script for cross-building hint: Use 'git am --show-current-patch' to see the failed patch When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". When I use git am --show-current-patch I get a big pile of crap because you're not using git send-email. I don't know what to do with this now. Hans