Subject: bug#30185: closed (Re: bug#30185: [PATCH] [core-updates] Put locales where libc will find them)

From: [email-masked] (GNU bug Tracking System)
Date: Wed, 24 Jan 2018 23:34:02 +0000

Your bug report

#30185: [PATCH] [core-updates] Put locales where libc will find them

which was filed against the guix package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
30185: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=30185
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#30185: [PATCH] [core-updates] Put locales where libc will find them
From: Mark H Weaver <[email-masked]>
To: [email-masked] (Ludovic Courtès)
Cc: [email-masked]
Date: Wed, 24 Jan 2018 18:32:43 -0500
List-Id: <debbugs-submit.debbugs.gnu.org>

[email-masked] (Ludovic Courtès) writes:

> Mark H Weaver <[email-masked]> skribis:
>
>> * gnu/system/locale.scm (localedef-command, single-locale-directory): Use only
>> the major+minor part of the libc version number in the locale directory name.
>
> Good catch, go for it!

Pushed as commit 6d5a65de7fba53ca1160844550d261f540f110e1 on
core-updates.  I'm closing this bug now.

    Thanks,
      Mark

Subject: [PATCH] [core-updates] Put locales where libc will find them
From: Mark H Weaver <[email-masked]>
To: [email-masked]
Date: Sat, 20 Jan 2018 16:22:40 -0500
List-Id: <debbugs-submit.debbugs.gnu.org>

On my mips64el-linux GuixSD system, now updated to something close to
core-updates (but with binutils-2.25.1), guile prints this warning:

  guile: warning: failed to install locale

and 'locale' prints:

  mhw@yeeloong ~$ locale
  locale: Cannot set LC_CTYPE to default locale: No such file or directory
  locale: Cannot set LC_MESSAGES to default locale: No such file or directory
  locale: Cannot set LC_ALL to default locale: No such file or directory
  LANG=en_US.utf8
  LC_CTYPE="en_US.utf8"
  LC_NUMERIC="en_US.utf8"
  [...]

strace shows attempts to open files in /run/current-system/locale/2.26,
which was not included in my built system.  Instead I have:

  /run/current-system/locale/2.26.105-g0890d5379c

This matches the version field of our 'glibc' package in core-updates,
but it's not where libc is looking.

I've attached a patch that fixes the problem for me.
What do you think?

      Mark

>From cb343d623d31e0687725d37c8585b440ec5144ec Mon Sep 17 00:00:00 2001
From: Mark H Weaver <[email-masked]>
Date: Sat, 20 Jan 2018 01:57:07 -0500
Subject: [PATCH] system: Put locales where libc will find them.

* gnu/system/locale.scm (localedef-command, single-locale-directory): Use only
the major+minor part of the libc version number in the locale directory name.
---
 gnu/system/locale.scm | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/gnu/system/locale.scm b/gnu/system/locale.scm
index 75cb855b5..75417f669 100644
--- a/gnu/system/locale.scm
+++ b/gnu/system/locale.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <[email-masked]>
+;;; Copyright © 2018 Mark H Weaver <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,6 +22,7 @@
   #:use-module (guix store)
   #:use-module (guix records)
   #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
   #:use-module (srfi srfi-26)
@@ -90,9 +92,9 @@ or #f on failure."
                       "--no-archive" "--prefix" #$output
                       "-i" #$(locale-definition-source locale)
                       "-f" #$(locale-definition-charset locale)
-                      (string-append #$output "/"
-                                     #$(package-version libc) "/"
-                                     #$(locale-definition-name locale))))))
+                      (string-append #$output "/" #$(version-major+minor
+                                                     (package-version libc))
+                                     "/" #$(locale-definition-name locale))))))
 
 (define* (single-locale-directory locales
                                   #:key (libc (canonical-package glibc)))
@@ -102,7 +104,7 @@ 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 version
-    (package-version libc))
+    (version-major+minor (package-version libc)))
 
   (define build
     #~(begin
-- 
2.16.0