[Pkg-xen-devel] [PATCH 06/19] d/shuffle-binaries: Fix binary shuffling script for cross-building

Hans van Kranenburg hans at knorrie.org
Fri Dec 4 21:04:35 GMT 2020


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



More information about the Pkg-xen-devel mailing list