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

Hans van Kranenburg hans at knorrie.org
Sat Jan 16 20:25:03 GMT 2021


On 1/15/21 10:05 PM, Hans van Kranenburg wrote:
> 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.
> 
> Ok, fix for cross-build, and it IMO certainly makes the script more
> readable.
> 
> Acked-by: Hans van Kranenburg <hans at knorrie.org>

I also updated the comments in the file, which are invalid after this
change.

> 
>> 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..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..d7a832bbe0 100755
>> --- a/debian/shuffle-binaries
>> +++ b/debian/shuffle-binaries
>> @@ -23,28 +23,29 @@ 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
>> +
>> +	# 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
>>
> 




More information about the Pkg-xen-devel mailing list