~ruther/guix-local

89715460c31b58b68a6903f2a1e11de049d7d935 — Ludovic Courtès 2 years ago ed0cd12
gnu: glibc: Ensure C.UTF-8 locale is always found.

This change ensures that $prefix/lib/locale, which now contains C.UTF-8
data, is always searched.  Thus, “setlocale (LC_ALL, "C.UTF-8")” is
guaranteed to always succeed.

* gnu/packages/patches/glibc-2.37-versioned-locpath.patch: Adjust.

Change-Id: I6aaf2757da98e811aa55e0959126065537cd8970
1 files changed, 21 insertions(+), 1 deletions(-)

M gnu/packages/patches/glibc-2.37-versioned-locpath.patch
M gnu/packages/patches/glibc-2.37-versioned-locpath.patch => gnu/packages/patches/glibc-2.37-versioned-locpath.patch +21 -1
@@ 12,6 12,20 @@ that variable.  So, if GUIX_LOCPATH=/foo:/bar, locale data is searched for in
That way, a single 'GUIX_LOCPATH' setting can work even if different libc
versions coexist on the system.

diff --git a/locale/Makefile b/locale/Makefile
index d7036b08..b5125166 100644
--- a/locale/Makefile
+++ b/locale/Makefile
@@ -94,7 +94,9 @@ localepath = "$(complocaledir):$(i18ndir)"
 # -Iprograms doesn't really belong here, but this gets it at the head
 # of the list instead of the tail, where CPPFLAGS-$(lib) gets added.
 # We need it before the standard -I's to see programs/config.h first.
+# Define 'LOCALEDIR' for use in 'compute_locale_search_path'.
 locale-CPPFLAGS = -DCOMPLOCALEDIR='"$(complocaledir)"' \
+		  -DLOCALEDIR='"$(libdir)/locale"'     \
 		  -DLOCALE_ALIAS_PATH='"$(localedir)"' \
 		  -Iprograms
 
diff --git a/locale/newlocale.c b/locale/newlocale.c
index 108d2428..6218e0fa 100644
--- a/locale/newlocale.c


@@ 56,7 70,7 @@ diff --git a/locale/setlocale.c b/locale/setlocale.c
index 6a902faa..2d07a644 100644
--- a/locale/setlocale.c
+++ b/locale/setlocale.c
@@ -213,12 +213,65 @@ setdata (int category, struct __locale_data *data)
@@ -213,12 +213,71 @@ setdata (int category, struct __locale_data *data)
     }
 }
 


@@ 104,6 118,12 @@ index 6a902faa..2d07a644 100644
+	goto bail_out;
+    }
+
+  /* Last, unconditionally append our own locale directory, which should
+     contain data for C.UTF-8.  */
+  if (__argz_add_sep (locale_path, locale_path_len,
+		      LOCALEDIR "/" VERSION, ':') != 0)
+    goto bail_out;
+
+  return 0;
+
+ bail_out: