[elbe-devel] [PATCH v2 16/24] toolchain-extract.sh: convert to work with mako
Torben Hohn
torben.hohn at linutronix.de
Thu Feb 8 16:00:30 CET 2018
On Thu, Feb 08, 2018 at 02:17:02PM +0100, Manuel Traut wrote:
> Replace ${ by ${"${"} because ${ is a marker of the mako interpreter and $
> followed by { is also often used in this shell script.
>
> Also use patchelf that's available at Debian instead of the relocate.py
> script from yocto to patch the SDK based location of the libs and
> ld-loader into the rpath of host binaries. Because relocate.py requires
> the host binaries to be build with a modified gcc/binutils to have some
> extra space for longer paths in the ELF header.
>
> utf-8 needs special treatment in mako
> (see http://docs.makotemplates.org/en/latest/usage.html#using-unicode-and-encoding)
> The utf-8 in an authors name causes an exception:
>
> mako.exceptions.CompileException:
> Unicode decode operation of encoding 'ascii' failed in file
> 'lbepack/makofiles/toolchain-shar-extract.sh.mako' at line: 0 char: 0
>
> The utf-8 header doesnt solve this issue. Instead of finding the real
> cause, this removes the utf-8 character from the file.
>
> Signed-off-by: Manuel Traut <manut at linutronix.de>
Reviewed-by: Torben Hohn <torben.hohn at linutronix.de>
followup patches fixing remaining issues coming up.
> ---
> elbepack/makofiles/toolchain-shar-extract.sh.mako | 67 +++++++++++------------
> 1 file changed, 33 insertions(+), 34 deletions(-)
>
> diff --git a/elbepack/makofiles/toolchain-shar-extract.sh.mako b/elbepack/makofiles/toolchain-shar-extract.sh.mako
> index 126ea587..6059416f 100644
> --- a/elbepack/makofiles/toolchain-shar-extract.sh.mako
> +++ b/elbepack/makofiles/toolchain-shar-extract.sh.mako
> @@ -1,5 +1,8 @@
> #!/bin/sh
> #
> +# -*- coding: utf-8 -*-
> +## -*- coding: utf-8 -*-
> +#
> # This file was copied from http://git.yoctoproject.org/git/poky
> # 16e22f3e37788afb83044f5089d24187d70094bd
> #
> @@ -7,7 +10,7 @@
> #
> # known authors of the origin file are:
> #
> -# Aníbal Limón <anibal.limon at linux.intel.com>
> +# Anibal Limon <anibal.limon at linux.intel.com>
> # Brendan Le Foll <brendan.le.foll at intel.com>
> # Ed Bartosh <ed.bartosh at linux.intel.com>
> # George Nita <george.nita at enea.com>
> @@ -32,7 +35,7 @@
> export PATH=`echo "$PATH" | sed -e 's/:\.//' -e 's/::/:/'`
>
> tweakpath () {
> - case ":${PATH}:" in
> + case ":${"${"}PATH}:" in
> *:"$1":*)
> ;;
> *)
> @@ -46,10 +49,10 @@ tweakpath /usr/sbin
> tweakpath /sbin
>
> INST_ARCH=$(uname -m | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
> -SDK_ARCH=$(echo @SDK_ARCH@ | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
> +SDK_ARCH=$(echo ${sdk_arch} | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
>
> INST_GCC_VER=$(gcc --version | sed -ne 's/.* \([0-9]\+\.[0-9]\+\)\.[0-9]\+.*/\1/p')
> -SDK_GCC_VER='@SDK_GCC_VER@'
> +SDK_GCC_VER='${sdk_gcc_ver}'
>
> verlte () {
> [ "$1" = "`printf "$1\n$2" | sort -V | head -n1`" ]
> @@ -59,12 +62,6 @@ verlt() {
> [ "$1" = "$2" ] && return 1 || verlte $1 $2
> }
>
> -verlt `uname -r` @OLDEST_KERNEL@
> -if [ $? = 0 ]; then
> - echo "Error: The SDK needs a kernel > @OLDEST_KERNEL@"
> - exit 1
> -fi
> -
> if [ "$INST_ARCH" != "$SDK_ARCH" ]; then
> # Allow for installation of ix86 SDK on x86_64 host
> if [ "$INST_ARCH" != x86_64 -o "$SDK_ARCH" != ix86 ]; then
> @@ -78,7 +75,7 @@ if ! xz -V > /dev/null 2>&1; then
> exit 1
> fi
>
> -DEFAULT_INSTALL_DIR="@SDKPATH@"
> +DEFAULT_INSTALL_DIR="${sdk_path}"
> SUDO_EXEC=""
> EXTRA_TAR_OPTIONS=""
> target_sdk_dir=""
> @@ -139,19 +136,18 @@ if [ "$listcontents" = "1" ] ; then
> exit
> fi
>
> -titlestr="@SDK_TITLE@ installer version @SDK_VERSION@"
> +titlestr="${sdk_title} ${sdk_version} SDK installer"
> printf "%s\n" "$titlestr"
> -printf "%${#titlestr}s\n" | tr " " "="
> +printf "%${"${"}#titlestr}s\n" | tr " " "="
>
> if [ $verbose = 1 ] ; then
> set -x
> fi
>
> - at SDK_PRE_INSTALL_COMMAND@
>
> # SDK_EXTENSIBLE is exposed from the SDK_PRE_INSTALL_COMMAND above
> if [ "$SDK_EXTENSIBLE" = "1" ]; then
> - DEFAULT_INSTALL_DIR="@SDKEXTPATH@"
> + DEFAULT_INSTALL_DIR="${sdk_ext_path}"
> if [ "$INST_GCC_VER" = '4.8' -a "$SDK_GCC_VER" = '4.9' ] || [ "$INST_GCC_VER" = '4.8' -a "$SDK_GCC_VER" = '' ] || \
> [ "$INST_GCC_VER" = '4.9' -a "$SDK_GCC_VER" = '' ]; then
> echo "Error: Incompatible SDK installer! Your host gcc version is $INST_GCC_VER and this SDK was built by gcc higher version."
> @@ -176,7 +172,7 @@ else
> fi
>
> # limit the length for target_sdk_dir, ensure the relocation behaviour in relocate_sdk.py has right result.
> -if [ ${#target_sdk_dir} -gt 2048 ]; then
> +if [ ${"${"}#target_sdk_dir} -gt 2048 ]; then
> echo "Error: The target directory path is too long!!!"
> exit 1
> fi
> @@ -205,7 +201,7 @@ else
> fi
> fi
>
> -if [ -e "$target_sdk_dir/environment-setup- at REAL_MULTIMACH_TARGET_SYS@" ]; then
> +if [ -e "$target_sdk_dir/environment-setup-${real_multimach_target_sys}" ]; then
> echo "The directory \"$target_sdk_dir\" already contains a SDK for this architecture."
> printf "If you continue, existing files will be overwritten! Proceed[y/N]? "
>
> @@ -268,7 +264,7 @@ for env_setup_script in `ls $target_sdk_dir/environment-setup-*`; do
> # rather than the one that simply sorts last
> real_env_setup_script="$env_setup_script"
> fi
> - $SUDO_EXEC sed -e "s:@SDKPATH@:$target_sdk_dir:g" -i $env_setup_script
> + $SUDO_EXEC sed -e "s:${sdk_path}:$target_sdk_dir:g" -i $env_setup_script
> done
> if [ -n "$real_env_setup_script" ] ; then
> env_setup_script="$real_env_setup_script"
> @@ -280,7 +276,7 @@ if ! xargs --version > /dev/null 2>&1; then
> fi
>
> # fix dynamic loader paths in all ELF SDK binaries
> -native_sysroot=$($SUDO_EXEC cat $env_setup_script |grep 'OECORE_NATIVE_SYSROOT='|cut -d'=' -f2|tr -d '"')
> +native_sysroot=${"$"}target_sdk_dir/sysroots/host
> dl_path=$($SUDO_EXEC find $native_sysroot/lib -name "ld-linux*")
> if [ "$dl_path" = "" ] ; then
> echo "SDK could not be set up. Relocate script unable to find ld-linux.so. Abort!"
> @@ -299,27 +295,30 @@ if [ x$tdir = x ] ; then
> exit 1
> fi
> cat <<EOF >> $tdir/relocate_sdk.sh
> -#!/bin/sh
> -for py in python python2 python3
> -do
> - PYTHON=\`which \${py} 2>/dev/null\`
> - if [ \$? -eq 0 ]; then
> - break;
> - fi
> -done
> +#!/bin/bash
> +PATCHELF=\`which patchelf 2>/dev/null\`
>
> -if [ x\${PYTHON} = "x" ]; then
> - echo "SDK could not be relocated. No python found."
> +if [ x\${"$"}{PATCHELF} = "x" ]; then
> + echo "SDK could not be relocated. No patchelf found."
> + echo "use 'sudo apt install patchelf' on Debian"
> exit 1
> fi
> -\${PYTHON} ${env_setup_script%/*}/relocate_sdk.py $target_sdk_dir $dl_path $executable_files
> +
> +for exe in ${"$"}executable_files; do
> + if [ \`readlink -f \${"$"}exe\` == \`readlink -f ${"$"}dl_path\` ]; then
> + echo SKIP \${"$"}exe
> + else
> + \${"$"}{PATCHELF} --set-interpreter ${"$"}dl_path \${"$"}exe
> + \${"$"}{PATCHELF} --set-rpath ${"$"}native_sysroot/usr/lib/x86_64-linux-gnu:${"$"}native_sysroot/lib/x86_64-linux-gnu/:${"$"}native_sysroot/usr/lib:${"$"}native_sysroot/lib \${"$"}exe
> + fi
> +done
> EOF
>
> -$SUDO_EXEC mv $tdir/relocate_sdk.sh ${env_setup_script%/*}/relocate_sdk.sh
> -$SUDO_EXEC chmod 755 ${env_setup_script%/*}/relocate_sdk.sh
> +$SUDO_EXEC mv $tdir/relocate_sdk.sh ${"${"}env_setup_script%/*}/relocate_sdk.sh
> +$SUDO_EXEC chmod 755 ${"${"}env_setup_script%/*}/relocate_sdk.sh
> rm -rf $tdir
> if [ $relocate = 1 ] ; then
> - $SUDO_EXEC ${env_setup_script%/*}/relocate_sdk.sh
> + $SUDO_EXEC ${"${"}env_setup_script%/*}/relocate_sdk.sh
> if [ $? -ne 0 ]; then
> echo "SDK could not be set up. Relocate script failed. Abort!"
> exit 1
> @@ -329,7 +328,7 @@ fi
> # delete the relocating script, so that user is forced to re-run the installer
> # if he/she wants another location for the sdk
> if [ $savescripts = 0 ] ; then
> - $SUDO_EXEC rm -f ${env_setup_script%/*}/relocate_sdk.py ${env_setup_script%/*}/relocate_sdk.sh
> + $SUDO_EXEC rm -f ${"${"}env_setup_script%/*}/relocate_sdk.py ${"${"}env_setup_script%/*}/relocate_sdk.sh
> fi
>
> echo "SDK has been successfully set up and is ready to be used."
> --
> 2.15.1
>
--
Mit freundlichen Grüßen
Torben Hohn
Linutronix GmbH
Standort: Bremen
Phone: +49 7556 25 999 18; Fax.: +49 7556 25 999 99
Firmensitz / Registered Office: D-88690 Uhldingen, Bahnhofstr. 3
Registergericht / Local District Court: Amtsgericht Freiburg i. Br.; HRB
Nr. / Trade register no.: 700 806
Geschäftsführer / Managing Directors: Heinz Egger, Thomas Gleixner
Eine Bitte von uns: Sollten Sie diese E-Mail irrtümlich erhalten haben,
benachrichtigen Sie uns in diesem Falle bitte sobald wie es Ihnen
möglich ist, durch Antwort-Mail. Vielen Dank!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.linutronix.de/pipermail/elbe-devel/attachments/20180208/170f1a80/attachment.sig>
More information about the elbe-devel
mailing list