gnu: libc: Look for locale data under /run/current-system/locale/X.Y.
* gnu/packages/base.scm (glibc)[arguments]: Append VERSION to 'libc_cv_localedir'. * gnu/system/locale.scm (localedef-command): Write to the sub-directory called (package-version libc) in #$output. (locale-directory): Create said directory. * doc/guix.texi (Locales): Mention the per-version sub-directory.
This commit is contained in:
parent
c24fff615b
commit
46bd6edd5a
|
@ -5591,9 +5591,10 @@ list only the locales that are actually used, as in:
|
||||||
|
|
||||||
@vindex LOCPATH
|
@vindex LOCPATH
|
||||||
The compiled locale definitions are available at
|
The compiled locale definitions are available at
|
||||||
@file{/run/current-system/locale}, which is the default location where
|
@file{/run/current-system/locale/X.Y}, where @code{X.Y} is the libc
|
||||||
the GNU@tie{}libc looks for locale data. This can be overridden using
|
version, which is the default location where the GNU@tie{}libc provided
|
||||||
the @code{LOCPATH} environment variable (@pxref{locales-and-locpath,
|
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}).
|
@code{LOCPATH} and locale packages}).
|
||||||
|
|
||||||
The @code{locale-definition} form is provided by the @code{(gnu system
|
The @code{locale-definition} form is provided by the @code{(gnu system
|
||||||
|
|
|
@ -509,12 +509,16 @@ store.")
|
||||||
;; Set the default locale path. In practice, $LOCPATH may be
|
;; Set the default locale path. In practice, $LOCPATH may be
|
||||||
;; defined to point whatever locales users want. However, setuid
|
;; defined to point whatever locales users want. However, setuid
|
||||||
;; binaries don't honor $LOCPATH, so they'll instead look into
|
;; binaries don't honor $LOCPATH, so they'll instead look into
|
||||||
;; $libc_cv_localedir; we choose /run/current-system/locale, with
|
;; $libc_cv_localedir; we choose /run/current-system/locale/X.Y,
|
||||||
;; the idea that it is going to be populated by the sysadmin.
|
;; 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.
|
;; `--localedir' is not honored, so work around it.
|
||||||
;; See <http://sourceware.org/ml/libc-alpha/2013-03/msg00093.html>.
|
;; 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="
|
(string-append "--with-headers="
|
||||||
(assoc-ref %build-inputs "linux-headers")
|
(assoc-ref %build-inputs "linux-headers")
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
(define-module (gnu system locale)
|
(define-module (gnu system locale)
|
||||||
#:use-module (guix gexp)
|
#:use-module (guix gexp)
|
||||||
#:use-module (guix records)
|
#:use-module (guix records)
|
||||||
|
#:use-module (guix packages)
|
||||||
#:use-module (gnu packages base)
|
#:use-module (gnu packages base)
|
||||||
#:use-module (gnu packages compression)
|
#:use-module (gnu packages compression)
|
||||||
#:use-module (srfi srfi-26)
|
#:use-module (srfi srfi-26)
|
||||||
|
@ -57,14 +58,20 @@
|
||||||
"-i" #$(locale-definition-source locale)
|
"-i" #$(locale-definition-source locale)
|
||||||
"-f" #$(locale-definition-charset locale)
|
"-f" #$(locale-definition-charset locale)
|
||||||
(string-append #$output "/"
|
(string-append #$output "/"
|
||||||
|
#$(package-version libc) "/"
|
||||||
#$(locale-definition-name locale))))))
|
#$(locale-definition-name locale))))))
|
||||||
|
|
||||||
(define* (locale-directory locales
|
(define* (locale-directory locales
|
||||||
#:key (libc (canonical-package glibc)))
|
#: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
|
(define build
|
||||||
#~(begin
|
#~(begin
|
||||||
(mkdir #$output)
|
(mkdir #$output)
|
||||||
|
(mkdir (string-append #$output "/" #$(package-version libc)))
|
||||||
|
|
||||||
;; 'localedef' executes 'gzip' to access compressed locale sources.
|
;; 'localedef' executes 'gzip' to access compressed locale sources.
|
||||||
(setenv "PATH" (string-append #$gzip "/bin"))
|
(setenv "PATH" (string-append #$gzip "/bin"))
|
||||||
|
|
Loading…
Reference in New Issue