[Buildroot] [PATCH v2 1/1] pkg-autotools: generic configure fix for powerpc64
Sam Bobroff
sam.bobroff at au1.ibm.com
Mon Nov 28 03:42:09 UTC 2016
On Sat, Nov 26, 2016 at 02:04:08PM +0100, Arnout Vandecappelle wrote:
>
>
> On 21-11-16 04:19, 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>
> > ---
> >
> > 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 | 19 ++++++++++++
> > support/scripts/fix-configure-powerpc64.sh | 47 ++++++++++++++++++++++++++++++
> > 2 files changed, 66 insertions(+)
> > create mode 100755 support/scripts/fix-configure-powerpc64.sh
> >
> > diff --git a/package/pkg-autotools.mk b/package/pkg-autotools.mk
> > index d1cdb89..ada72c8 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,16 @@ endif
> >
> > endif
> >
> > +# Append a configure hook if:
> > +# * this is a target package and the target architecture is powerpc64 or powerpc64le,
> > +# * or this is a host package and the host architecture is powerpc64 or powerpc64le.
> > +# Must be added after other pre-configure hooks that might regenerate the
> > +# configure script and overwrite the changes made here.
> > +ifneq ($(or $(and $(filter target,$(4)), $(filter powerpc64 powerpc64le,$(ARCH))),
> > + $(and $(filter host,$(4)), $(filter powerpc64 powerpc64le,$(HOSTARCH)))),)
>
> We try to consistently double-dollar everything except $(1), $(2) etc. in the
> inner- macros.
OK.
> This condition would IMHO be easier to read as (untested):
> ifneq ($$(filter powerpc64%,$$(if $$(filter target,$(4)),$$(ARCH),$$(HOSTARCH))),)
Nice, looks good to me. I'll test it and send a new version with these changes.
> But I'm OK with the version you had as well.
>
> So
> Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout at mind.be>
>
> Regards,
> Arnout
And thanks for the review :-)
>
> > +$(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