Subject: [bug#67686] [PATCH core-updates 4/5] gnu: glibc: Install C.UTF-8 locale.

From: Efraim Flashner <[email-masked]>
Date: Sun, 10 Dec 2023 09:24:01 +0200

On Sat, Dec 09, 2023 at 10:41:41PM +0100, Ludovic Courtès wrote:
> Hello!
> 
> Efraim Flashner <[email-masked]> skribis:
> 
> > On Thu, Dec 07, 2023 at 10:26:36PM +0100, Ludovic Courtès wrote:
> 
> [...]
> 
> >> I was told on #glibc that (1) there’s no ‘localedef’ for the build
> >> machine produced during cross-compilation, and (2) that more generally,
> >> there’s no way to cross-build locale data, that endianness and other
> >> things may matter.
> >> 
> >> I suspect #2 was about the locale archive and not locale data, because
> >> evidence suggests that locale data is system-independent:
> >> 
> >> --8<---------------cut here---------------start------------->8---
> >> $ for s in aarch64-linux powerpc64le-linux armhf-linux i686-linux ; do diff -r $(guix build [email-masked]) $(guix build [email-masked] -s "$s") && echo "$s same as x86_64-linux" ; done
> >> aarch64-linux same as x86_64-linux
> >> powerpc64le-linux same as x86_64-linux
> >> armhf-linux same as x86_64-linux
> >> i686-linux same as x86_64-linux
> >> $ guix describe
> >>   guix 6e2dd51
> >>     repository URL: https://git.savannah.gnu.org/git/guix.git
> >>     branch: master
> >>     commit: 6e2dd51df5f3f51e9056dd4f2e1b036195ab3caa
> >> --8<---------------cut here---------------end--------------->8---
> >> 
> >> Efraim, could you check against powerpc-linux, which is the only
> >> big-endian target we +/- support?
> >
> > I found a difference in almost every file. The tarball of the locales
> > was too big to attach so I've uploaded it here¹.  Looking at it in
> > diffoscope it looked like most of the data that looked human readable
> > was the same, but there was some endian switching with the other data
> > bits.  So without actually checking other big endian systems it looks
> > like we could set target #f for the locales, but for those that share
> > their endianness.
> 
> OK, interesting, thanks for checking!
> 
> So we won’t be able to reliably provide C.UTF-8 in cross-compiled libcs.
> Maybe not a big problem, but it does mean that cross-compiled code will
> be “less capable” because of that.

We should be able to create some monstrosity of a #:target field to say
that within an endianness group target is #f but otherwise is
(%current-target-system). Should work for all the locale generators
actually.

untested:

(if (and (target-little-endian? (%current-system))
         (target-little-endian? (%current-target-system)))
    #f
    (%current-target-system))

Although if we are going to rely on target-little-endian we might want
to define that field in (guix platform) too so we don't assign an
endianness to 8-bit controllers or embedded systems.

-- 
Efraim Flashner   <[email-masked]>   רנשלפ םירפא
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted