Subject: Re: bug#29537: Core updates broken

From: Marius Bakke <[email-masked]>
Date: Sun, 03 Dec 2017 15:51:08 +0100

Marius Bakke <[email-masked]> writes:

> Gábor Boskovits <[email-masked]> writes:
>
>> It seems, that we have a breakage in current core-updates. m4, gettext, and
>> at least a few other packages fail to build.
>
> Hello!
>
> The problem is that the glibc version string is used a couple of places
> to determine where locales are found.
>
> The attached patch fixes it, though I'm not sure if it's the best
> approach.  Thoughts?

Actually, the patch below is not a complete fix.  It worked for m4, but
some other packages now fail like this:

--8<---------------cut here---------------start------------->8---

@ build-started /gnu/store/q0fadqzsg969jz8v11r9j2a07x3h2sl4-perl-5.26.1.tar.xz.drv - x86_64-linux /var/log/guix/drvs/q0//fadqzsg969jz8v11r9j2a07x3h2sl4-perl-5.26.1.tar.xz.drv.bz2
Backtrace:
           2 (primitive-load "/gnu/store/xjb3g9spv30arffi1296qwdaam4?")
In ice-9/eval.scm:
    619:8  1 (_ #f)
In unknown file:
           0 (setlocale 6 "en_US.utf8")

ERROR: In procedure setlocale:
ERROR: In procedure setlocale: Invalid argument
builder for `/gnu/store/q0fadqzsg969jz8v11r9j2a07x3h2sl4-perl-5.26.1.tar.xz.drv' failed with exit code 1
--8<---------------cut here---------------end--------------->8---

Not sure where it's from yet.

>
> From 41677631be815d58c36052de7b54d297ad496ec1 Mon Sep 17 00:00:00 2001
> From: Marius Bakke <[email-masked]>
> Date: Sun, 3 Dec 2017 02:32:16 +0100
> Subject: [PATCH] gnu: glibc: Don't use full version string in locale path.
>
> This is a follow-up to commit ee3ebf1a357bd4eb36a2fa1790a7b549cffb305a.
> Fixes <https://bugs.gnu.org/29537>.
>
> * gnu/packages/base.scm (glibc/linux)[version]: Change to 2.26.91-gaaa2eb83b8.
> [source](uri): Adjust accordingly.
> [arguments]: Use VERSION-MAJOR+MINOR for locales path.
> (glibc-locales, glibc-utf8-locales): Likewise.
> * guix/profiles.scm (ca-certificate-bundle, profile-derivation): Likewise.
> ---
>  gnu/packages/base.scm | 15 ++++++++++-----
>  guix/profiles.scm     |  6 ++++--
>  2 files changed, 14 insertions(+), 7 deletions(-)
>
> diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
> index c8fd8624a..8190a38ed 100644
> --- a/gnu/packages/base.scm
> +++ b/gnu/packages/base.scm
> @@ -523,11 +523,15 @@ store.")
>     ;; archive can be generated by checking out the commit ID and running:
>     ;; git archive --prefix=$(git describe)/ HEAD | xz -9 > $(git describe).tar.xz
>     ;; See <https://bugs.gnu.org/29406> for details.
> -   (version "2.26-91-gaaa2eb83b8")
> +   ;;
> +   ;; Note: Always use a dot after the minor version since various places rely
> +   ;; on "version-major+minor" to determine where locales are found.
> +   (version "2.26.91-gaaa2eb83b8")
>     (source (origin
>              (method url-fetch)
>              (uri (string-append "https://alpha.gnu.org/gnu/guix/mirror/"
> -                                "glibc-" version ".tar.xz"))
> +                                "glibc-" (version-major+minor version) "-"
> +                                (caddr (string-split version #\.)) ".tar.xz"))
>              (sha256
>               (base32
>                "1zwz6d0x3ndd0hgqp17fx71miyjvn4dgkl1nzhaz3mbcqxzrprhk"))
> @@ -585,7 +589,7 @@ store.")
>              ;; `--localedir' is not honored, so work around it.
>              ;; See <http://sourceware.org/ml/libc-alpha/2013-03/msg00093.html>.
>              (string-append "libc_cv_complocaledir=/run/current-system/locale/"
> -                           ,version)
> +                           ,(version-major+minor version))
>  
>              (string-append "--with-headers="
>                             (assoc-ref ,(if (%current-target-system)
> @@ -955,7 +959,8 @@ the 'share/locale' sub-directory of this package.")
>                     (list (string-append "libc_cv_complocaledir="
>                                          (assoc-ref %outputs "out")
>                                          "/lib/locale/"
> -                                        ,(package-version glibc))))))))))
> +                                        ,(version-major+minor
> +                                          (package-version glibc)))))))))))
>  
>  (define-public glibc-utf8-locales
>    (package
> @@ -973,7 +978,7 @@ the 'share/locale' sub-directory of this package.")
>                            (gzip      (assoc-ref %build-inputs "gzip"))
>                            (out       (assoc-ref %outputs "out"))
>                            (localedir (string-append out "/lib/locale/"
> -                                                    ,version)))
> +                                                    ,(version-major+minor version))))
>                       ;; 'localedef' needs 'gzip'.
>                       (setenv "PATH" (string-append libc "/bin:" gzip "/bin"))
>  
> diff --git a/guix/profiles.scm b/guix/profiles.scm
> index 0eb99f40d..51c330b32 100644
> --- a/guix/profiles.scm
> +++ b/guix/profiles.scm
> @@ -812,7 +812,8 @@ MANIFEST.  Single-file bundles are required by programs such as Git and Lynx."
>            ;; install a UTF-8 locale.
>            (setenv "LOCPATH"
>                    (string-append #+glibc-utf8-locales "/lib/locale/"
> -                                 #+(package-version glibc-utf8-locales)))
> +                                 #+(version-major+minor
> +                                    (package-version glibc-utf8-locales))))
>            (setlocale LC_ALL "en_US.utf8")
>  
>            (match (append-map ca-files '#$(manifest-inputs manifest))
> @@ -1256,7 +1257,8 @@ are cross-built for TARGET."
>        #~(begin
>            (setenv "LOCPATH"
>                    #$(file-append glibc-utf8-locales "/lib/locale/"
> -                                 (package-version glibc-utf8-locales)))
> +                                 (version-major+minor
> +                                  (package-version glibc-utf8-locales))))
>            (setlocale LC_ALL "en_US.utf8")))
>  
>      (define builder
> -- 
> 2.15.1