[PATCH v2] applets: Add installation of individual binaries

Thomas Petazzoni thomas.petazzoni at free-electrons.com
Sun Jun 28 20:55:07 UTC 2015


Hello,

There has been no feedback to the below patch. We would like to support
this feature in Buildroot, but we don't like carrying significant
feature patches without knowing upstream's decision.

Would the Busybox developers be willing to merge such a feature (the
implementation details can of course be discussed/improved).

Thanks!

Thomas

On Thu, 21 May 2015 14:48:35 -0500, Clayton Shotwell wrote:
> From: Clayton Shotwell <clshotwe at rockwellcollins.com>
> 
> Adding support to install individual binaries if the option is
> enabled. This also installs the shared libbusybox.so.* library.
> 
> Signed-off-by: Clayton Shotwell <clshotwe at rockwellcollins.com>
> 
> ---
> Changes v1 -> v2:
>   - Changed "cp -a" to "cp -pPR" (Suggested by Bernhard)
> ---
>  Makefile.custom    |  4 ++++
>  applets/install.sh | 26 ++++++++++++++++++++++++--
>  2 files changed, 28 insertions(+), 2 deletions(-)
> 
> diff --git a/Makefile.custom b/Makefile.custom
> index f8a1283..891c9ce 100644
> --- a/Makefile.custom
> +++ b/Makefile.custom
> @@ -28,6 +28,10 @@ ifeq ($(CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER),y)
>  INSTALL_OPTS:= --scriptwrapper
>  endif
>  endif
> +ifeq ($(CONFIG_FEATURE_INDIVIDUAL),y)
> +INSTALL_OPTS:= --binaries
> +LIBBUSYBOX_SONAME:= 0_lib/libbusybox.so.$(BB_VER)
> +endif
>  install: $(srctree)/applets/install.sh busybox busybox.links
>  	$(Q)DO_INSTALL_LIBS="$(strip $(LIBBUSYBOX_SONAME) $(DO_INSTALL_LIBS))" \
>  		$(SHELL) $< $(CONFIG_PREFIX) $(INSTALL_OPTS)
> diff --git a/applets/install.sh b/applets/install.sh
> index 95b4719..f6c097e 100755
> --- a/applets/install.sh
> +++ b/applets/install.sh
> @@ -5,19 +5,26 @@ export LC_CTYPE=POSIX
>  
>  prefix=$1
>  if [ -z "$prefix" ]; then
> -	echo "usage: applets/install.sh DESTINATION [--symlinks/--hardlinks/--scriptwrapper]"
> +	echo "usage: applets/install.sh DESTINATION [--symlinks/--hardlinks/--binaries/--scriptwrapper]"
>  	exit 1
>  fi
>  
> +# Source the configuration
> +. ./.config
> +
>  h=`sort busybox.links | uniq`
>  
> +sharedlib_dir="0_lib"
> +
>  linkopts=""
>  scriptwrapper="n"
> +binaries="n"
>  cleanup="0"
>  noclobber="0"
>  case "$2" in
>  	--hardlinks)     linkopts="-f";;
>  	--symlinks)      linkopts="-fs";;
> +	--binaries)      binaries="y";;
>  	--scriptwrapper) scriptwrapper="y";swrapall="y";;
>  	--sw-sh-hard)    scriptwrapper="y";linkopts="-f";;
>  	--sw-sh-sym)     scriptwrapper="y";linkopts="-fs";;
> @@ -40,8 +47,9 @@ if [ -n "$DO_INSTALL_LIBS" ] && [ "$DO_INSTALL_LIBS" != "n" ]; then
>  	for i in $DO_INSTALL_LIBS; do
>  		rm -f "$prefix/$libdir/$i" || exit 1
>  		if [ -f "$i" ]; then
> +			echo "   Installing $i to the target at $prefix/$libdir/"
>  			cp -pPR "$i" "$prefix/$libdir/" || exit 1
> -			chmod 0644 "$prefix/$libdir/$i" || exit 1
> +			chmod 0644 "$prefix/$libdir/`basename $i`" || exit 1
>  		fi
>  	done
>  fi
> @@ -68,6 +76,7 @@ install -m 755 busybox "$prefix/bin/busybox" || exit 1
>  
>  for i in $h; do
>  	appdir=`dirname "$i"`
> +	app=`basename "$i"`
>  	mkdir -p "$prefix/$appdir" || exit 1
>  	if [ "$scriptwrapper" = "y" ]; then
>  		if [ "$swrapall" != "y" ] && [ "$i" = "/bin/sh" ]; then
> @@ -78,6 +87,19 @@ for i in $h; do
>  			chmod +x "$prefix/$i"
>  		fi
>  		echo "	$prefix/$i"
> +	elif [ "$binaries" = "y" ]; then
> +		# Copy the binary over rather
> +		if [ -e $sharedlib_dir/$app ]; then
> +			if [ "$noclobber" = "0" ] || [ ! -e "$prefix/$i" ]; then
> +				echo "   Copying $sharedlib_dir/$app to $prefix/$i"
> +				cp -pPR $sharedlib_dir/$app $prefix/$i || exit 1
> +			else
> +				echo "  $prefix/$i already exists"
> +			fi
> +		else
> +			echo "Error: Could not find $sharedlib_dir/$app"
> +			exit 1
> +		fi
>  	else
>  		if [ "$2" = "--hardlinks" ]; then
>  			bb_path="$prefix/bin/busybox"



-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com


More information about the busybox mailing list