~ruther/guix-local

d7c8a5ff3c76461d469364e920ec4f09f9e3c126 — Ludovic Courtès 1 year, 4 months ago 889d1b0
guile-launcher: Avoid the “C” locale and try “C.UTF-8”.

This is a followup to ed0cd12a82b429bc5058f693a0f75f2ba0ee47c4, which
adds the C.UTF-8 locale to the glibc package, and
ee4e79f871bc2f848ce4b4a176bb725ab71e3cd6, which changed the default to
“C.UTF-8” for ‘guix’ commands.

Fixes a bug whereby starting ‘guix’ in an environment where the LC_*
variables are unset would start it in the “C” locale:

  echo '(pk (setlocale LC_ALL))' | guix shell -CW coreutils -- guix repl

This would lead to breakage for commands such as ‘guix substitute’ that
need to run in a UTF-8 locale.

* gnu/packages/aux-files/guile-launcher.c (main): Try “C.UTF-8” before
“en_US.UTF-8”.  Do that also when the current locale is “C”.
* guix/ui.scm (install-locale): Likewise.

Change-Id: I36da4db8f898f1083b33760e1ab46c3a257de811
2 files changed, 14 insertions(+), 6 deletions(-)

M gnu/packages/aux-files/guile-launcher.c
M guix/ui.scm
M gnu/packages/aux-files/guile-launcher.c => gnu/packages/aux-files/guile-launcher.c +11 -5
@@ 84,11 84,17 @@ int
main (int argc, char **argv)
{
  /* Try to install the current locale; remain silent if it fails.  */
  if (setlocale (LC_ALL, "") == NULL)
    /* The 'guix pull'-provided 'guix' includes at least en_US.utf8 so use
       that.  That gives us UTF-8 support for 'scm_to_locale_string', etc.,
       which is always preferable over the C locale.  */
    setlocale (LC_ALL, "en_US.utf8");
  char *locale = setlocale (LC_ALL, "");
  if (locale == NULL || strcmp (locale, "C") == 0)
    {
      /* The 'guix pull'-provided 'guix' includes at least C.UTF-8 (which is
	 baked into glibc, except when cross-compiling) so use that, and fall
	 back to en_US.UTF-8.  That gives us UTF-8 support for
	 'scm_to_locale_string', etc., which is always preferable over the C
	 locale.  */
      if (setlocale (LC_ALL, "C.UTF-8") == NULL)
	setlocale (LC_ALL, "en_US.utf8");
    }

  const char *str;
  str = getenv ("GUILE_LOAD_PATH");

M guix/ui.scm => guix/ui.scm +3 -1
@@ 521,7 521,9 @@ part."
  "Install the current locale settings."
  (catch 'system-error
    (lambda _
      (setlocale LC_ALL ""))
      (when (string=? (setlocale LC_ALL "") "C")
        ;; If the current locale is "C", prefer "C.UTF-8".
        (setlocale LC_ALL "C.UTF-8")))
    (lambda args
      (display-hint (G_ "Consider installing the @code{glibc-locales} package
and defining @code{GUIX_LOCPATH}, along these lines: