Hi Ludo', > > I explained the purpose of this file in > > https://sourceware.org/pipermail/libc-alpha/2023-September/151524.html . > > In summary, it's a configuration file whose initial contents is provided > > for glibc, but which needs to be edited by the system administrator in > > some situations. > > > > For this reason, in Debian 12, the file has been moved to > > /etc/locale.alias, and /usr/share/locale/locale.alias is merely > > a symbolic link to /etc/locale.alias. IMO, this is the correct > > way to handle this configuration file. > > Does glibc look for ‘locale.alias’ in $sysconfdir, or does it look for > it in $localstatedir?
It looks for it in $(localedir), whose default value is $(datadir)/locale. https://sourceware.org/git/?p=glibc.git;a=blob;f=intl/localealias.c;h=ea4f48b594fe13490f006d95b799213961146e23;hb=HEAD#l154 https://sourceware.org/git/?p=glibc.git;a=blob;f=intl/Makefile;h=d7223256eb699380ccdf6f6dd37b7490b342e8d3;hb=HEAD#l156 https://sourceware.org/git/?p=glibc.git;a=blob;f=Makeconfig;h=c48fcc59e8c1b150d40241c31fc63adf4d15ccb3;hb=HEAD#l202 The default value of $(datadir) is $(prefix)/share. https://sourceware.org/git/?p=glibc.git;a=blob;f=Makeconfig;h=c48fcc59e8c1b150d40241c31fc63adf4d15ccb3;hb=HEAD#l182 > To follow the “correct way” as you described it, glibc should look for > it in $sysconfdir by default. I agree; cf. https://www.gnu.org/prep/standards/html_node/Directory-Variables.html But it does not do so currently; therefore the distros fix up the upstream behaviour. > > 2) GNU gettext needs to access this file, in order to recognize the > > same aliases that glibc recognizes. But glibc does not export the > > _nl_expand_alias function. Therefore GNU gettext needs to know > > where the file is. But how could GNU gettext retrieve any of the > > file names > > > > /gnu/store/5h2w4qi9hk1qzzgi1w83220ydslinr4s-glibc-2.33/share/locale/locale.alias > > > > /gnu/store/ayc9r7162rphy4zjw8ch01pmyh214h82-glibc-2.33/share/locale/locale.alias > > ? > > If Guix had this configuration file moved to /etc, like Debian did, GNU > > gettext > > could be compiled with '-DLOCALE_ALIAS_PATH=\"/etc\"' and would then be > > able > > to access it. > > Right now gettext in Guix ends up being compiled with: > > -DLOCALE_ALIAS_PATH=\"\" > > (Example build log at > <https://ci.guix.gnu.org/log/0yy8zmgvc6hy1pfc41gm1bi7nhj4aqf7-gettext-0.21>.) In this case, localealias.c does not attempt to open a locale.alias file at all. > What you propose is doable. However, how many distros provide > /etc/locale.alias? What happens when it’s missing? > > We have to keep in mind that Guix can be used on top of any distro. When it's missing, localealias.c does not open a locale.alias file. Negative effects can be seen after the ISO 639 language code of a language changed or after the ISO 3166 country code of a territory changed. This is currently not relevant, but may become relevant in the future again. Which distros have it in /etc? - Guix 1.4.0: no - Debian 12, Ubuntu 23.10: yes, /usr/share/locale/locale.alias is a symlink. - CentOS Stream 9: no - Arch 19.11: no - openSUSE 15.5: no - Slackware 15: no So, to solve the problem, Guix would need to customize glibc 1. to install locale.alias in /etc (= $(sysconfdir)), 2. compile with a LOCALE_ALIAS_PATH=$(sysconfdir):$(localedir) Then GNU gettext could be compiled with LOCALE_ALIAS_PATH=$(sysconfdir):$(localedir) as well. This would work in standalone Guix, as well as in Guix-on-top-of-another-distro. Bruno