From c9dcf6dd98c18838dbcc4772e0d391ec542845c8 Mon Sep 17 00:00:00 2001 From: Samuel Mendoza-Jonas Date: Wed, 18 Jul 2018 16:48:35 +1000 Subject: [PATCH] host-localedef: Compile against glibc-2.28 In glibc 2.27 the following change occurred: "Statically compiled applications attempting to load locales compiled for the GNU C Library version 2.27 will fail and fall back to the builtin C/POSIX locale." This impacts us since upstream buildroot uses a localdef built against an older eglibc release [0]. This is a combination of my patch to move to glibc and Peter Seiderer's patch to avoid building all of glibc just for localedef. [0] https://bugs.busybox.net/show_bug.cgi?id=11096 Signed-off-by: Samuel Mendoza-Jonas [localedef build & fixups:] Signed-off-by: Peter Seiderer [not yet upstream: https://github.com/open-power/op-build/issues/2225] Signed-off-by: Joel Stanley --- .../0001-Don-t-include-xlocale.h.patch | 50 --------------- ...ACK-only-build-and-install-localedef.patch | 63 +++++++++++++++++++ .../0002-HACK-accept-old-toolchains.patch | 44 +++++++++++++ package/localedef/localedef.hash | 2 +- package/localedef/localedef.mk | 43 ++++++++++--- 5 files changed, 142 insertions(+), 60 deletions(-) delete mode 100644 package/localedef/0001-Don-t-include-xlocale.h.patch 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-Don-t-include-xlocale.h.patch b/package/localedef/0001-Don-t-include-xlocale.h.patch deleted file mode 100644 index 9a6c2f8e907..00000000000 --- a/package/localedef/0001-Don-t-include-xlocale.h.patch +++ /dev/null @@ -1,50 +0,0 @@ -From: Bernhard Walle -Date: Mon, 2 Oct 2017 16:55:23 +0200 -Subject: [PATCH] Don't include - -This header has been removed in glibc 2.26: - -https://abi-laboratory.pro/tracker/changelog/glibc/2.26/log.html - ------------------------- >8 ------------------------ -* The nonstandard header has been removed. Most programs should - use instead. If you have a specific need for the definition of - locale_t with no other declarations, please contact - libc-alpha@sourceware.org and explain. ------------------------- 8< ------------------------ - -Signed-off-by: Bernhard Walle - -Upstream: https://git.pengutronix.de/cgit/ptxdist/tree/patches/localedef-eglibc-2.14.1-r17443-ptx1/0003-Don-t-include-xlocale.h.patch -Signed-off-by: Peter Seiderer ---- - eglibc/locale/langinfo.h | 2 +- - eglibc/locale/locale.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/eglibc/locale/langinfo.h b/eglibc/locale/langinfo.h -index 0a5336507196..76707a4584c1 100644 ---- a/eglibc/locale/langinfo.h -+++ b/eglibc/locale/langinfo.h -@@ -589,7 +589,7 @@ extern char *nl_langinfo (nl_item __item) __THROW; - more information. */ - - /* Get locale datatype definition. */ --# include -+# include - - /* Just like nl_langinfo but get the information from the locale object L. */ - extern char *nl_langinfo_l (nl_item __item, __locale_t __l); -diff --git a/eglibc/locale/locale.h b/eglibc/locale/locale.h -index 2aa19e76acb2..18be711a2d40 100644 ---- a/eglibc/locale/locale.h -+++ b/eglibc/locale/locale.h -@@ -143,7 +143,7 @@ __END_NAMESPACE_STD - This is a proof-of-concept implementation. */ - - /* Get locale datatype definition. */ --# include -+# include_next - - /* Return a reference to a data structure representing a set of locale - datasets. Unlike for the CATEGORY parameter for `setlocale' the 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 00000000000..8d5fefbb820 --- /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 +Date: Mon, 21 May 2018 16:45:02 +0200 +Subject: [PATCH] HACK: only build and install localedef + +Signed-off-by: Michael Olbrich + +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 +--- + 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 00000000000..93305093adb --- /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 +Date: Thu, 6 Dec 2018 19:10:24 +0100 +Subject: [PATCH] HACK: accept old toolchains + +Signed-off-by: Peter Seiderer +--- + 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 ee14fb16b8c..cfc8e984fa2 100644 --- a/package/localedef/localedef.hash +++ b/package/localedef/localedef.hash @@ -1,2 +1,2 @@ # Locally calculated -sha256 9a60f7cdab6fb39adf23a12102f2d950d5f07f0cd7e51e85ec327e07440a79c6 localedef-eglibc-2.14.1-r17443-ptx1.tar.bz2 +sha256 877c7b4741501d1762af8ef1a2518bdf2d722947d2e8d48b203e2d83cc600bca glibc-glibc-2.28.tar.gz diff --git a/package/localedef/localedef.mk b/package/localedef/localedef.mk index 11d9ba3848d..28e2775a59b 100644 --- a/package/localedef/localedef.mk +++ b/package/localedef/localedef.mk @@ -4,19 +4,44 @@ # ################################################################################ -LOCALEDEF_VERSION = 2.14.1-r17443-ptx1 -LOCALEDEF_SOURCE = localedef-eglibc-$(LOCALEDEF_VERSION).tar.bz2 -LOCALEDEF_SITE = http://www.pengutronix.de/software/ptxdist/temporary-src +# Use the same VERSION and SITE as target glibc +LOCALEDEF_VERSION = glibc-2.28 +LOCALEDEF_SOURCE = glibc-$(LOCALEDEF_VERSION).tar.gz +LOCALEDEF_SITE = $(call github,bminor,glibc,$(LOCALEDEF_VERSION)) -HOST_LOCALEDEF_CONF_OPTS += \ - --prefix=/usr \ - --with-glibc=./eglibc +HOST_LOCALEDEF_LICENSE = GPL-2.0+ (programs), LGPL-2.1+, BSD-3-Clause, MIT (library) +HOST_LOCALEDEF_LICENSE_FILES = COPYING COPYING.LIB LICENSES -HOST_LOCALEDEF_CONF_ENV = CFLAGS="$(HOST_CFLAGS) -fgnu89-inline" +# Even though we use the autotools-package infrastructure, we have to override +# the default configure commands for since we have to build out-of-tree, but we +# can't use the same 'symbolic link to configure' used with the gcc packages. +define HOST_LOCALEDEF_CONFIGURE_CMDS + mkdir -p $(@D)/build + # Do the configuration + (cd $(@D)/build; \ + $(HOST_CONFIGURE_OPTS) \ + $(SHELL) $(@D)/configure \ + libc_cv_forced_unwind=yes \ + libc_cv_ssp=no \ + --target=$(GNU_HOST_NAME) \ + --host=$(GNU_HOST_NAME) \ + --build=$(GNU_HOST_NAME) \ + --prefix=/usr \ + --with-pkgversion="Buildroot" \ + --without-cvs \ + --disable-profile \ + --without-gd \ + --enable-obsolete-rpc) +endef + +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 +# The makefile does not implement an install target for localedef define HOST_LOCALEDEF_INSTALL_CMDS - $(INSTALL) -D -m 0755 $(@D)/localedef $(HOST_DIR)/bin/localedef + $(INSTALL) -D -m 0755 $(@D)/build/locale/localedef $(HOST_DIR)/bin/localedef endef $(eval $(host-autotools-package))