summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi7
-rw-r--r--gnu/packages/base.scm10
-rw-r--r--gnu/system/locale.scm9
3 files changed, 19 insertions, 7 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 6a3765f56a..68ee451efc 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -5591,9 +5591,10 @@ list only the locales that are actually used, as in:
@vindex LOCPATH
The compiled locale definitions are available at
-@file{/run/current-system/locale}, which is the default location where
-the GNU@tie{}libc looks for locale data. This can be overridden using
-the @code{LOCPATH} environment variable (@pxref{locales-and-locpath,
+@file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
+version, which is the default location where the GNU@tie{}libc provided
+by Guix looks for locale data. This can be overridden using the
+@code{LOCPATH} environment variable (@pxref{locales-and-locpath,
@code{LOCPATH} and locale packages}).
The @code{locale-definition} form is provided by the @code{(gnu system
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index a3e3e36608..a7d9459913 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -509,12 +509,16 @@ store.")
;; Set the default locale path. In practice, $LOCPATH may be
;; defined to point whatever locales users want. However, setuid
;; binaries don't honor $LOCPATH, so they'll instead look into
- ;; $libc_cv_localedir; we choose /run/current-system/locale, with
- ;; the idea that it is going to be populated by the sysadmin.
+ ;; $libc_cv_localedir; we choose /run/current-system/locale/X.Y,
+ ;; with the idea that it is going to be populated by the sysadmin.
+ ;; The "X.Y" sub-directory is because locale data formats are
+ ;; incompatible across libc versions; see
+ ;; <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
;;
;; `--localedir' is not honored, so work around it.
;; See <http://sourceware.org/ml/libc-alpha/2013-03/msg00093.html>.
- (string-append "libc_cv_localedir=/run/current-system/locale")
+ (string-append "libc_cv_localedir=/run/current-system/locale/"
+ ,version)
(string-append "--with-headers="
(assoc-ref %build-inputs "linux-headers")
diff --git a/gnu/system/locale.scm b/gnu/system/locale.scm
index 393dd42354..010fb45272 100644
--- a/gnu/system/locale.scm
+++ b/gnu/system/locale.scm
@@ -19,6 +19,7 @@
(define-module (gnu system locale)
#:use-module (guix gexp)
#:use-module (guix records)
+ #:use-module (guix packages)
#:use-module (gnu packages base)
#:use-module (gnu packages compression)
#:use-module (srfi srfi-26)
@@ -57,14 +58,20 @@
"-i" #$(locale-definition-source locale)
"-f" #$(locale-definition-charset locale)
(string-append #$output "/"
+ #$(package-version libc) "/"
#$(locale-definition-name locale))))))
(define* (locale-directory locales
#:key (libc (canonical-package glibc)))
- "Return a directory containing all of LOCALES compiled."
+ "Return a directory containing all of LOCALES for LIBC compiled.
+
+Because locale data formats are incompatible when switching from one libc to
+another, locale data is put in a sub-directory named after the 'version' field
+of LIBC."
(define build
#~(begin
(mkdir #$output)
+ (mkdir (string-append #$output "/" #$(package-version libc)))
;; 'localedef' executes 'gzip' to access compressed locale sources.
(setenv "PATH" (string-append #$gzip "/bin"))