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

Message ID 20181206191009.3830-1-ps.report@gmx.net
State New
Headers show
Series
  • [RFC,v2] localedef: update to glibc-2.28 and various fixes
Related show

Commit Message

Peter Seiderer Dec. 6, 2018, 7:10 p.m.
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@gmx.net>
---
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

Comments

Samuel Mendoza-Jonas Dec. 11, 2018, 3:49 a.m. | #1
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@gmx.net>

Tested-by: Samuel Mendoza-Jonas <sam@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

> ---
> 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@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@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@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@gmx.net>
> +Date: Thu, 6 Dec 2018 19:10:24 +0100
> +Subject: [PATCH] HACK: accept old toolchains
> +
> +Signed-off-by: Peter Seiderer <ps.report@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
Samuel Mendoza-Jonas Feb. 18, 2019, 11:31 p.m. | #2
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@gmx.net>
> 
> Tested-by: Samuel Mendoza-Jonas <sam@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@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@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@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@gmx.net>
> > +Date: Thu, 6 Dec 2018 19:10:24 +0100
> > +Subject: [PATCH] HACK: accept old toolchains
> > +
> > +Signed-off-by: Peter Seiderer <ps.report@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@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Einar Jón Feb. 21, 2019, 9:03 a.m. | #3
Hi

Just my 2 cents. Feel free to do whatever you want with that.
I've been using this patch for about a month with great success.

I like that patch, but it uses $(@)/build 4 times instead of just setting
HOST_LOCALEDEF_BUILDDIR and using that.

I also doubt that we need to build with -O2 and bash. That was a requirement
for eglibc 6 years ago, but we aren't supporting that anymore.
The glibc configure mentions multiple shells, and the patch is eglibc only.
It has been like that in package/glibc/glibc.mk since that file was created
(but I only tried -OS on my machine, so I may be bullshitting here).

Cheers,
Einar Jón

Offtopic: Another (unrelated) refactoring would be to add
pkg-autotools support for
*_SUPPORTS_IN_SOURCE_BUILD like in pkg-cmake, so we don't have
to redefine *_CONFIGURE_CMDS

Something like
diff --git a/package/pkg-autotools.mk b/package/pkg-autotools.mk
index 45de993..70c251d 100644
--- a/package/pkg-autotools.mk
+++ b/package/pkg-autotools.mk
@@ -152,6 +152,14 @@ ifndef $(2)_GETTEXTIZE
  endif
 endif

+$(3)_SUPPORTS_IN_SOURCE_BUILD ?= YES
+
+ifeq ($$($(3)_SUPPORTS_IN_SOURCE_BUILD),YES)
+$(2)_BUILDDIR                  = $$($(2)_SRCDIR)
+else
+$(2)_BUILDDIR                  = $$($(2)_SRCDIR)/buildroot-build
+endif
+
 ifeq ($(4),host)
  $(2)_GETTEXTIZE_OPTS ?= $$($(3)_GETTEXTIZE_OPTS)
 endif
@@ -178,12 +186,13 @@ ifeq ($(4),target)

 # Configure package for target
 define $(2)_CONFIGURE_CMDS
-       (cd $$($$(PKG)_SRCDIR) && rm -rf config.cache && \
+       (mkdir -p $$($$(PKG)_BUILDDIR) && \
+       cd $$($$(PKG)_BUILDDIR) && rm -rf config.cache && \
        $$(TARGET_CONFIGURE_OPTS) \
        $$(TARGET_CONFIGURE_ARGS) \
        $$($$(PKG)_CONF_ENV) \
        CONFIG_SITE=/dev/null \
-       ./configure \
+      $$($$(PKG)_SRCDIR)/configure \
                --target=$$(GNU_TARGET_NAME) \
                --host=$$(GNU_TARGET_NAME) \
                --build=$$(GNU_HOST_NAME) \

# repeat for host

On Tue, 19 Feb 2019 at 00:31, Samuel Mendoza-Jonas <sam@mendozajonas.com> wrote:
>
> 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@gmx.net>
> >
> > Tested-by: Samuel Mendoza-Jonas <sam@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@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@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@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

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@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@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@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@gmx.net>
+Date: Thu, 6 Dec 2018 19:10:24 +0100
+Subject: [PATCH] HACK: accept old toolchains
+
+Signed-off-by: Peter Seiderer <ps.report@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