system: Define 'GUIX_LOCPATH' to work around 'glibc' package defect.

Our 'glibc' package currently ignores /run/current-system/locale,
although the intent is to look for locales in that directory.

* gnu/packages/base.scm (glibc/linux): Add comment about
/run/current-system/locale being ignored.
* gnu/system.scm (operating-system-environment-variables): Add
'GUIX_LOCPATH'.
* gnu/tests/base.scm (run-basic-test): Add "locale" test.
This commit is contained in:
Ludovic Courtès 2016-08-02 18:05:23 +02:00
parent a5c376034f
commit ab3a64507a
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
3 changed files with 19 additions and 1 deletions

View file

@ -535,6 +535,7 @@ (define-public glibc/linux
;; ;;
;; `--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>.
;; FIXME: This hack no longer works on 2.23!
(string-append "libc_cv_localedir=/run/current-system/locale/" (string-append "libc_cv_localedir=/run/current-system/locale/"
,version) ,version)

View file

@ -545,7 +545,12 @@ (define (operating-system-environment-variables os)
;; By default, applications that use D-Bus, such as Emacs, abort at startup ;; By default, applications that use D-Bus, such as Emacs, abort at startup
;; when /etc/machine-id is missing. Make sure these warnings are non-fatal. ;; when /etc/machine-id is missing. Make sure these warnings are non-fatal.
("DBUS_FATAL_WARNINGS" . "0"))) ("DBUS_FATAL_WARNINGS" . "0")
;; XXX: Normally we wouldn't need to do this, but our glibc@2.23 package
;; looks things up in 'PREFIX/lib/locale' instead of
;; '/run/current-system/locale' as was intended.
("GUIX_LOCPATH" . "/run/current-system/locale")))
(define %setuid-programs (define %setuid-programs
;; Default set of setuid-root programs. ;; Default set of setuid-root programs.

View file

@ -178,6 +178,18 @@ (define marionette
'(false-if-exception (getaddrinfo "does-not-exist")) '(false-if-exception (getaddrinfo "does-not-exist"))
marionette)) marionette))
(test-equal "locale"
"en_US.utf8"
(marionette-eval '(begin
;; XXX: This 'setenv' call wouldn't be needed
;; but our glibc@2.23 currently ignores
;; /run/current-system/locale.
(setenv "GUIX_LOCPATH"
"/run/current-system/locale")
(let ((before (setlocale LC_ALL "en_US.utf8")))
(setlocale LC_ALL before)))
marionette))
(test-assert "screendump" (test-assert "screendump"
(begin (begin
(marionette-control (string-append "screendump " #$output (marionette-control (string-append "screendump " #$output