[Buildroot] [RFC v2] localedef: update to glibc-2.28 and various fixes

Samuel Mendoza-Jonas sam at mendozajonas.com
Mon Feb 18 23:31:23 UTC 2019


On Tue, 2018-12-11 at 14:49 +1100, Samuel Mendoza-Jonas wrote:
> On Thu, 2018-12-06 at 20:10 +0100, Peter Seiderer wrote:
> > Follow up on original patch [1], various fixes and update according
> > to the given comments:
> > 
> > - update to glibc-2.28
> > 
> > - add ptxdist patch 0001-HACK-only-build-and-install-localedef.patch,
> >   needed for make target locale/others
> > 
> > - use make target locale/others (like ptxdist does)
> > 
> > - add 0002-HACK-accept-old-toolchains.patch, fix configure for old
> >   host toolchains
> > 
> > - remove various target related options
> > 
> > - remove stubs.h header creation
> > 
> > - do not change '--prefix=/usr' to '--prefix=$(HOST_DIR)', otherwise
> >   leads to the following failure:
> > 
> >   Generating locale en_US.UTF-8
> >   cannot create temporary file: .../target/home/seiderer/Buildroot-2018-11/build_2018_11_002/host/lib/locale/locale-archive.wXbLbC: No such file or directory
> >   Makefile:715: recipe for target 'target-finalize' failed
> >   make[1]: *** [target-finalize] Error 1
> >   Makefile:23: recipe for target '_all' failed
> >   make: *** [_all] Error 2
> > 
> > - remove uselsess '$(eval $(autotools-package))'
> > 
> > [1] https://patchwork.ozlabs.org/patch/950717/
> > 
> > Signed-off-by: Peter Seiderer <ps.report at gmx.net>
> 
> Tested-by: Samuel Mendoza-Jonas <sam at mendozajonas.com>
> 
> Thanks for picking this up Peter. I asked briefly on the glibc mailing
> list as well if there is a nicer path to this but so far it doesn't sound
> promising; this may be the way we have to go.
> https://sourceware.org/ml/libc-help/2018-12/msg00000.html

I stumbled across Einar's email[0] this morning just as I was about to pick up
this issue again. What are we thinking about Peter's fix? I can hack around
this in my own tree but it would be good to have an upstream
solution/workaround.

Cheers,
Sam

[0]
http://lists.busybox.net/pipermail/buildroot/2019-February/242724.html

> 
> > ---
> > Changes v1 -> v2:
> >   - remove patch duplicate 0001-accept-old-as.patch-001
> >   - fix LOCALEDEF_SITE (GLIBC_VERSION vs. LOCALEDEF_VERSION)
> >   - update 0001-HACK-only-build-and-install-localedef.patch (add upstream
> >     url and signed-of-by)
> >   - update 0002-HACK-accept-old-toolchains.patch (convert to git patch,
> >     add signed-of-by)
> > 
> > Notes:
> > 
> >     The following programs shows the failure with Buildroot-2018.11/glibc-2.28:
> > 
> >       #include <stdio.h>
> >       #include <string.h>
> >       #include <locale.h>
> > 
> >       int main(int argc, char *argv[])
> >       {
> >           const char* set_locale = setlocale(LC_ALL, "");
> >           printf("set_locale: %s\n", set_locale);
> > 
> >           int delta = strcoll("a", "A");
> >           printf("strcoll(a, A): %d\n", delta);
> > 
> >           delta = strcoll("A", "a");
> >           printf("strcoll(A, a): %d\n", delta);
> > 
> >           return 0;
> >       }
> > 
> >             $ ./test
> >     set_locale: C
> >     strcoll(a, A): 32
> >     strcoll(A, a): -32
> > 
> >     This one should give the same output as the one with LC_COLLATE=en_US.UTF-8, but failes to do so:
> >             $ LC_ALL=en_US.UTF-8 ./test
> >     set_locale: (null)
> >     strcoll(a, A): 32
> >     strcoll(A, a): -32
> > 
> >             $ LC_COLLATE=en_US.UTF-8 ./test
> >     set_locale: LC_CTYPE=C;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=en_US.UTF-8;LC_MONETARY=C;LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C
> >     strcoll(a, A): -5
> >     strcoll(A, a): 5
> > ---
> >  ...ACK-only-build-and-install-localedef.patch | 63 +++++++++++++++++++
> >  .../0002-HACK-accept-old-toolchains.patch     | 44 +++++++++++++
> >  package/localedef/localedef.hash              |  2 +-
> >  package/localedef/localedef.mk                | 47 +++-----------
> >  4 files changed, 116 insertions(+), 40 deletions(-)
> >  create mode 100644 package/localedef/0001-HACK-only-build-and-install-localedef.patch
> >  create mode 100644 package/localedef/0002-HACK-accept-old-toolchains.patch
> > 
> > diff --git a/package/localedef/0001-HACK-only-build-and-install-localedef.patch b/package/localedef/0001-HACK-only-build-and-install-localedef.patch
> > new file mode 100644
> > index 0000000000..8d5fefbb82
> > --- /dev/null
> > +++ b/package/localedef/0001-HACK-only-build-and-install-localedef.patch
> > @@ -0,0 +1,63 @@
> > +From 3a32e5840048ef7db7858ce324731be7a82ddf90 Mon Sep 17 00:00:00 2001
> > +From: Michael Olbrich <m.olbrich at pengutronix.de>
> > +Date: Mon, 21 May 2018 16:45:02 +0200
> > +Subject: [PATCH] HACK: only build and install localedef
> > +
> > +Signed-off-by: Michael Olbrich <m.olbrich at pengutronix.de>
> > +
> > +Upstream: https://git.pengutronix.de/cgit/ptxdist/plain/patches/localedef-glibc-2.27/0001-HACK-only-build-and-install-localedef.patch?id=47116f66f411d4dadfce42c2fdd6d41b351ccfd4
> > +Signed-off-by: Peter Seiderer <ps.report at gmx.net>
> > +---
> > + Rules           | 14 ++++++++++----
> > + locale/Makefile |  6 +++---
> > + 2 files changed, 13 insertions(+), 7 deletions(-)
> > +
> > +diff --git a/Rules b/Rules
> > +index 706c8a74..04f3f333 100644
> > +--- a/Rules
> > ++++ b/Rules
> > +@@ -188,10 +188,16 @@ binaries-shared-notests = $(filter-out $(binaries-pie) $(binaries-static), \
> > + 				       $(binaries-all-notests))
> > + 
> > + ifneq "$(strip $(binaries-shared-notests))" ""
> > +-$(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o \
> > +-  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
> > +-  $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
> > +-	$(+link)
> > ++$(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o
> > ++	$(CC) -o $@ \
> > ++	      $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
> > ++	      $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
> > ++	      $(filter-out $(addprefix $(csu-objpfx),start.o \
> > ++						     $(start-installed-name))\
> > ++			   $(+preinit) \
> > ++			   $(link-extra-libs) \
> > ++			   $(common-objpfx)libc% $(+postinit),$^) \
> > ++	      $(link-extra-libs)
> > + endif
> > + 
> > + ifneq "$(strip $(binaries-shared-tests))" ""
> > +diff --git a/locale/Makefile b/locale/Makefile
> > +index fd997227..a8541593 100644
> > +--- a/locale/Makefile
> > ++++ b/locale/Makefile
> > +@@ -32,13 +32,13 @@ categories	= ctype messages monetary numeric time paper name \
> > + 		  address telephone measurement identification collate
> > + aux		= $(categories:%=lc-%) $(categories:%=C-%) SYS_libc C_name \
> > + 		  xlocale localename global-locale coll-lookup
> > +-others		= localedef locale
> > ++others		= localedef
> > + #others-static	= localedef locale
> > +-install-bin	= localedef locale
> > ++install-bin	= localedef
> > + extra-objs	= $(localedef-modules:=.o) $(localedef-aux:=.o) \
> > + 		  $(locale-modules:=.o) $(lib-modules:=.o)
> > + 
> > +-extra-libs	= libBrokenLocale
> > ++#extra-libs	= libBrokenLocale
> > + extra-libs-others = $(extra-libs)
> > + 
> > + libBrokenLocale-routines = broken_cur_max
> > +-- 
> > +2.19.2
> > +
> > diff --git a/package/localedef/0002-HACK-accept-old-toolchains.patch b/package/localedef/0002-HACK-accept-old-toolchains.patch
> > new file mode 100644
> > index 0000000000..93305093ad
> > --- /dev/null
> > +++ b/package/localedef/0002-HACK-accept-old-toolchains.patch
> > @@ -0,0 +1,44 @@
> > +From 3781bea6277974169cb64d676aad19d3ff358212 Mon Sep 17 00:00:00 2001
> > +From: Peter Seiderer <ps.report at gmx.net>
> > +Date: Thu, 6 Dec 2018 19:10:24 +0100
> > +Subject: [PATCH] HACK: accept old toolchains
> > +
> > +Signed-off-by: Peter Seiderer <ps.report at gmx.net>
> > +---
> > + configure | 6 +++---
> > + 1 file changed, 3 insertions(+), 3 deletions(-)
> > +
> > +diff --git a/configure b/configure
> > +index fde57d63..44082866 100755
> > +--- a/configure
> > ++++ b/configure
> > +@@ -4519,7 +4519,7 @@ $as_echo_n "checking version of $AS... " >&6; }
> > +   ac_prog_version=`$AS --version 2>&1 | sed -n 's/^.*GNU assembler.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
> > +   case $ac_prog_version in
> > +     '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
> > +-    2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*)
> > ++    2.1[0-9][0-9]*|2.2[4-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*)
> > +        ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
> > +     *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
> > + 
> > +@@ -4649,7 +4649,7 @@ $as_echo_n "checking version of $LD... " >&6; }
> > +   ac_prog_version=`$LD --version 2>&1 | sed -n 's/^.*GNU ld.* \([0-9][0-9]*\.[0-9.]*\).*$/\1/p'`
> > +   case $ac_prog_version in
> > +     '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
> > +-    2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*)
> > ++    2.1[0-9][0-9]*|2.2[4-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*)
> > +        ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
> > +     *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
> > + 
> > +@@ -5058,7 +5058,7 @@ int
> > + main ()
> > + {
> > + 
> > +-#if !defined __GNUC__ || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 9)
> > ++#if !defined __GNUC__ || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
> > + #error insufficient compiler
> > + #endif
> > +   ;
> > +-- 
> > +2.19.2
> > +
> > diff --git a/package/localedef/localedef.hash b/package/localedef/localedef.hash
> > index 6f2d6313b6..cfc8e984fa 100644
> > --- a/package/localedef/localedef.hash
> > +++ b/package/localedef/localedef.hash
> > @@ -1,2 +1,2 @@
> >  # Locally calculated
> > -sha256 33189b3f10c88730a1f686fac794bc01f31765f12ffd75bc5e8a0f2a690d217a  localedef-glibc-2.27-57-g6c99e37f6fb640a50a3113b2dbee5d5389843c1e.tar.gz
> > +sha256 877c7b4741501d1762af8ef1a2518bdf2d722947d2e8d48b203e2d83cc600bca glibc-glibc-2.28.tar.gz
> > diff --git a/package/localedef/localedef.mk b/package/localedef/localedef.mk
> > index c93132cc3f..9928590b9e 100644
> > --- a/package/localedef/localedef.mk
> > +++ b/package/localedef/localedef.mk
> > @@ -5,47 +5,15 @@
> >  ################################################################################
> >  
> >  # Use the same VERSION and SITE as target glibc
> > -LOCALEDEF_VERSION = glibc-2.27-57-g6c99e37f6fb640a50a3113b2dbee5d5389843c1e
> > -LOCALEDEF_SITE = $(call github,bminor,glibc,$(GLIBC_VERSION))
> > +LOCALEDEF_VERSION = glibc-2.28
> > +LOCALEDEF_SOURCE = glibc-$(LOCALEDEF_VERSION).tar.gz
> > +LOCALEDEF_SITE = $(call github,bminor,glibc,$(LOCALEDEF_VERSION))
> >  
> >  HOST_LOCALEDEF_LICENSE = GPL-2.0+ (programs), LGPL-2.1+, BSD-3-Clause, MIT (library)
> >  HOST_LOCALEDEF_LICENSE_FILES = COPYING COPYING.LIB LICENSES
> >  
> > -# glibc is part of the toolchain so disable the toolchain dependency
> > -HOST_LOCALEDEF_ADD_TOOLCHAIN_DEPENDENCY = NO
> > -
> >  HOST_LOCALEDEF_SUBDIR = build
> >  
> > -# Thumb build is broken, build in ARM mode
> > -ifeq ($(BR2_ARM_INSTRUCTIONS_THUMB),y)
> > -HOST_LOCALEDEF_EXTRA_CFLAGS += -marm
> > -endif
> > -
> > -# MIPS64 defaults to n32 so pass the correct -mabi if
> > -# we are using a different ABI. OABI32 is also used
> > -# in MIPS so we pass -mabi=32 in this case as well
> > -# even though it's not strictly necessary.
> > -ifeq ($(BR2_MIPS_NABI64),y)
> > -HOST_LOCALEDEF_EXTRA_CFLAGS += -mabi=64
> > -else ifeq ($(BR2_MIPS_OABI32),y)
> > -HOST_LOCALEDEF_EXTRA_CFLAGS += -mabi=32
> > -endif
> > -
> > -ifeq ($(BR2_ENABLE_DEBUG),y)
> > -HOST_LOCALEDEF_EXTRA_CFLAGS += -g
> > -endif
> > -
> > -# The stubs.h header is not installed by install-headers, but is
> > -# needed for the gcc build. An empty stubs.h will work, as explained
> > -# in http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html. The same trick
> > -# is used by Crosstool-NG.
> > -ifeq ($(BR2_TOOLCHAIN_BUILDROOT_HOST_LOCALEDEF),y)
> > -define HOST_LOCALEDEF_ADD_MISSING_STUB_H
> > -	mkdir -p $(STAGING_DIR)/usr/include/gnu
> > -	touch $(STAGING_DIR)/usr/include/gnu/stubs.h
> > -endef
> > -endif
> > -
> >  # Even though we use the autotools-package infrastructure, we have to
> >  # override the default configure commands for several reasons:
> >  #
> > @@ -72,17 +40,18 @@ define HOST_LOCALEDEF_CONFIGURE_CMDS
> >  		--host=$(GNU_HOST_NAME) \
> >  		--build=$(GNU_HOST_NAME) \
> >  		--prefix=/usr \
> > -		$(if $(BR2_SOFT_FLOAT),--without-fp,--with-fp) \
> > -		$(if $(BR2_x86_64),--enable-lock-elision) \
> >  		--with-pkgversion="Buildroot" \
> >  		--without-cvs \
> >  		--disable-profile \
> >  		--without-gd \
> >  		--enable-obsolete-rpc)
> > -	$(HOST_LOCALEDEF_ADD_MISSING_STUB_H)
> >  endef
> >  
> > -$(eval $(autotools-package))
> > +define HOST_LOCALEDEF_BUILD_CMDS
> > +	$(HOST_MAKE_ENV) $(MAKE) $(HOST_LOCALEDEF_MAKE_OPTS) \
> > +		-C $(@D)/build locale/others
> > +endef
> > +
> >  # The makefile does not implement an install target for localedef
> >  define HOST_LOCALEDEF_INSTALL_CMDS
> >  	$(INSTALL) -D -m 0755 $(@D)/build/locale/localedef $(HOST_DIR)/bin/localedef
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot




More information about the buildroot mailing list