[Buildroot] [PATCH v3 1/1] pkg-autotools: generic configure fix for powerpc64

Arnout Vandecappelle arnout at mind.be
Tue Nov 29 23:50:50 UTC 2016



On 28-11-16 06:11, Sam Bobroff wrote:
> Many (100+) packages supported by buildroot contain old configure
> scripts (or build them from old versions of autotools) that are unable
> to determine how to link shared libraries on powerpc64 and
> powerpc64le. This causes that test to erroneously fail on toolchains
> that are not "bi-endian" (which is the case for toolchains built by
> buildroot), which causes configure to build static libraries instead
> of dynamic ones. Although these builds succeed, they tend to cause
> linker failures in binaries later linked against them.
> 
> Because affected configure files can be discovered automatically, this
> patch introduces a hook (enabled only when building for powerpc64 and
> powerpc64le) that uses a script to scan and fix each package.
> 
> Signed-off-by: Sam Bobroff <sam.bobroff at au1.ibm.com>

Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout at mind.be>

 However, this may be a little risky to still include in the release. I guess
all these packages already have been broken for a long time, no? So not really a
regression.


 Regards,
 Arnout

> ---
> 
> v3:
> 
> Followed suggestions from Arnout Vandecappelle:
> * simplify test.
> * double-$ variables.
> 
> v2:
> 
> * Patch host packages as well as target ones. (Feedback on the GNU Make code to
>   detect this is welcome.)
> * Folded long line in script.
> * Removed patch backup files.
> * Updated diff to unified format.
> * Changed $pkg variable to $srcdir.
> 
>  package/pkg-autotools.mk                   | 16 ++++++++++
>  support/scripts/fix-configure-powerpc64.sh | 47 ++++++++++++++++++++++++++++++
>  2 files changed, 63 insertions(+)
>  create mode 100755 support/scripts/fix-configure-powerpc64.sh
> 
> diff --git a/package/pkg-autotools.mk b/package/pkg-autotools.mk
> index d1cdb89..00822e2 100644
> --- a/package/pkg-autotools.mk
> +++ b/package/pkg-autotools.mk
> @@ -79,6 +79,15 @@ define LIBTOOL_PATCH_HOOK
>  endef
>  
>  #
> +# Hook to patch common issue with configure on powerpc64{,le} failing
> +# to detect shared library support:
> +#
> +define CONFIGURE_FIX_POWERPC64_HOOK
> +	@$(call MESSAGE,"Checking configure (powerpc64/powerpc64le)")
> +	support/scripts/fix-configure-powerpc64.sh $($(PKG)_DIR)
> +endef
> +
> +#
>  # Hook to gettextize the package if needed
>  #
>  define GETTEXTIZE_HOOK
> @@ -255,6 +264,13 @@ endif
>  
>  endif
>  
> +# Append a configure hook if building for a powerpc64 (or powerpc64le) arch.
> +# Must be added after other pre-configure hooks that might regenerate the
> +# configure script and overwrite the changes made here.
> +ifneq ($$(filter powerpc64%,$$(if $$(filter target,$(4)),$$(ARCH),$$(HOSTARCH))),)
> +$(2)_PRE_CONFIGURE_HOOKS += CONFIGURE_FIX_POWERPC64_HOOK
> +endif
> +
>  #
>  # Build step. Only define it if not already defined by the package .mk
>  # file.
> diff --git a/support/scripts/fix-configure-powerpc64.sh b/support/scripts/fix-configure-powerpc64.sh
> new file mode 100755
> index 0000000..ad71042
> --- /dev/null
> +++ b/support/scripts/fix-configure-powerpc64.sh
> @@ -0,0 +1,47 @@
> +#!/bin/bash
> +
> +# This is a script to find, and correct, a problem with old versions of
> +# configure that affect powerpc64 and powerpc64le.
> +
> +# The issue causes configure to incorrectly determine that shared library
> +# support is not present in the linker. This causes the package to build a
> +# static library rather than a dynamic one and although the build will succeed,
> +# it may cause packages that link with the static library it to fail due to
> +# undefined symbols.
> +
> +# This script searches for files named 'configure' that appear to have this
> +# issue (by searching for a known bad pattern) and patching them.
> +
> +set -e
> +
> +if [ $# -ne 1 ]; then
> +	echo "Usage: $0 <package build directory>"
> +	exit 2
> +fi
> +
> +srcdir="$1"
> +files=$(cd "$srcdir" && find . -name configure \
> +-exec grep -qF 'Generated by GNU Autoconf' {} \; \
> +-exec grep -qF 'ppc*-*linux*|powerpc*-*linux*)' {} \; -print)
> +
> +# --ignore-whitespace is needed because some packages have included
> +# copies of configure scripts where tabs have been replaced with spaces.
> +for c in $files; do
> +	patch --ignore-whitespace "$srcdir"/"$c" <<'EOF'
> +--- a/configure	2016-11-16 15:31:46.097447271 +1100
> ++++ b/configure	2008-07-21 12:17:23.000000000 +1000
> +@@ -4433,7 +4433,10 @@
> +         x86_64-*linux*)
> +           LD="${LD-ld} -m elf_x86_64"
> +           ;;
> +-        ppc*-*linux*|powerpc*-*linux*)
> ++	  powerpcle-*linux*)
> ++	    LD="${LD-ld} -m elf64lppc"
> ++	    ;;
> ++	  powerpc-*linux*)
> +           LD="${LD-ld} -m elf64ppc"
> +           ;;
> +         s390*-*linux*)
> +EOF
> +done
> +
> 

-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF



More information about the buildroot mailing list