[PATCH 0/2] Getting rid of Guile's locale warning

DoneSubmitted by Ludovic Courtès.
Details
2 participants
  • Lars-Dominik Braun
  • Ludovic Courtès
Owner
unassigned
Severity
normal
L
L
Ludovic Courtès wrote on 1 Oct 2020 10:35
(address . guix-patches@gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20201001083507.27246-1-ludo@gnu.org
Hello Guix!
These two patches provide the ultimate hack to get rid of:
guile: warning: failed to install locale
This warning annoys all users, mostly on foreign distro, especiallywhen it gets printed each time something gets downloaded (‘guixsubstitute’ is invoked) and they have no idea how to get rid of it.
It’s also fairly pointless because (guix ui) has its own localehandling already, and because we already go to great lengths to set‘GUIX_LOCPATH’ to a sensible value by default.
Let me know what you think!
Ludo’.
Ludovic Courtès (2): self: Use a 'guile' that doesn't complain about locales. build: Use a 'guile' executable that doesn't warn about locales.
Makefile.am | 12 +++++++ configure.ac | 3 ++ gnu/packages/aux-files/guile-launcher.c | 46 ++++++++++++++++++++++++ guix/self.scm | 48 ++++++++++++++++++++++++- 4 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/aux-files/guile-launcher.c
-- 2.28.0
L
L
Ludovic Courtès wrote on 1 Oct 2020 10:38
[PATCH 1/2] self: Use a 'guile' that doesn't complain about locales.
(address . 43737@debbugs.gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20201001083848.27390-1-ludo@gnu.org
Since commit ba48895899a117d6ace2209c3f54411a4a989133, selected UTF-8locales are bundled. However, because 'guix-command' is itself a Guilescript, users would still see Guile's warning, particularly on foreigndistros:
$ LC_ALL=sdf guix foo guile: warning: failed to install locale hint: Consider installing the `glibc-utf8-locales' [...]
User commands would print that warning, but more importantly, eachinvocation of 'guix substitute' would print it, even though'guix-daemon.service' explicitly chooses "en_US.utf8", which is in'glibc-utf8-locales'. This leads to confusion since users would keepseeing this message unless/until they realize they also need to install'glibc-utf8-locales' in root's profile.
This patch gets rid of "guile: warning: ..." for a guix-pulled 'guix'command.
* guix/self.scm (specification->package): Add "gcc-toolchain".(quiet-guile): New procedure.(guix-command): Use it.* gnu/packages/aux-files/guile-launcher.c: New file.* Makefile.am (AUX_FILES): Add it.--- Makefile.am | 1 + gnu/packages/aux-files/guile-launcher.c | 46 ++++++++++++++++++++++++ guix/self.scm | 48 ++++++++++++++++++++++++- 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/aux-files/guile-launcher.c
Toggle diff (146 lines)diff --git a/Makefile.am b/Makefile.amindex 8e91e1e558..bc3efd2b6f 100644--- a/Makefile.am+++ b/Makefile.am@@ -330,6 +330,7 @@ dist_noinst_DATA = \ # Auxiliary files for packages. AUX_FILES = \+ gnu/packages/aux-files/guile-launcher.c \ gnu/packages/aux-files/chromium/master-preferences.json \ gnu/packages/aux-files/emacs/guix-emacs.el \ gnu/packages/aux-files/linux-libre/5.8-arm.conf \diff --git a/gnu/packages/aux-files/guile-launcher.c b/gnu/packages/aux-files/guile-launcher.cnew file mode 100644index 0000000000..886ede2846--- /dev/null+++ b/gnu/packages/aux-files/guile-launcher.c@@ -0,0 +1,46 @@+/* GNU Guix --- Functional package management for GNU+ Copyright 1996-1997,2000-2001,2006,2008,2011,2013,2018+ Free Software Foundation, Inc.+ Copyright (C) 2020 Ludovic Courtès <ludo@gnu.org>++ This file is part of GNU Guix.++ GNU Guix is free software; you can redistribute it and/or modify it+ under the terms of the GNU General Public License as published by+ the Free Software Foundation; either version 3 of the License, or (at+ your option) any later version.++ GNU Guix is distributed in the hope that it will be useful, but+ WITHOUT ANY WARRANTY; without even the implied warranty of+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+ GNU General Public License for more details.++ You should have received a copy of the GNU General Public License+ along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. */++/* This file implements a variant of the 'guile' executable that does not+ complain about locale issues. */++#include <locale.h>+#include <libguile.h>++static void+inner_main (void *unused, int argc, char **argv)+{+ scm_shell (argc, argv);+}++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");++ scm_install_gmp_memory_functions = 1;+ scm_boot_guile (argc, argv, inner_main, 0);+ return 0; /* never reached */+}diff --git a/guix/self.scm b/guix/self.scmindex 5eb80f42fe..bbfd2f1b95 100644--- a/guix/self.scm+++ b/guix/self.scm@@ -27,6 +27,7 @@ #:use-module (guix packages) #:use-module (guix sets) #:use-module (guix modules)+ #:use-module ((guix utils) #:select (version-major+minor)) #:use-module ((guix build utils) #:select (find-files)) #:use-module (srfi srfi-1) #:use-module (srfi srfi-9)@@ -62,6 +63,7 @@ ("xz" (ref '(gnu packages compression) 'xz)) ("po4a" (ref '(gnu packages gettext) 'po4a)) ("gettext" (ref '(gnu packages gettext) 'gettext-minimal))+ ("gcc-toolchain" (ref '(gnu packages commencement) 'gcc-toolchain)) (_ #f)))) ;no such package @@ -580,6 +582,48 @@ that provide Guile modules." (computed-file name build)) +(define (quiet-guile guile)+ "Return a wrapper that does the same as the 'guile' executable of GUILE,+except that it does not complain about locales and falls back to 'en_US.utf8'+instead of 'C'."+ (define gcc+ (specification->package "gcc-toolchain"))++ (define source+ (search-path %load-path+ "gnu/packages/aux-files/guile-launcher.c"))++ (define effective+ (version-major+minor (package-version guile)))++ (define build+ ;; XXX: Reuse <c-compiler> from (guix scripts pack) instead?+ (with-imported-modules '((guix build utils))+ #~(begin+ (use-modules (guix build utils)+ (srfi srfi-26))++ (mkdir-p (string-append #$output "/bin"))++ (setenv "PATH" #$(file-append gcc "/bin"))+ (setenv "C_INCLUDE_PATH"+ (string-join+ (map (cut string-append <> "/include")+ '#$(match (bag-transitive-build-inputs+ (package->bag guile))+ (((labels packages . _) ...)+ (filter package? packages))))+ ":"))+ (setenv "LIBRARY_PATH" #$(file-append gcc "/lib"))++ (invoke "gcc" #$(local-file source) "-Wall" "-g0" "-O2"+ "-I" #$(file-append guile "/include/guile/" effective)+ "-L" #$(file-append guile "/lib")+ #$(string-append "-lguile-" effective)+ "-o" (string-append #$output "/bin/guile")))))++ (computed-file "guile-wrapper" build))+ (define* (guix-command modules #:key source (dependencies '()) guile (guile-version (effective-version)))@@ -634,7 +678,9 @@ load path." ;; XXX: It would be more convenient to change it to: ;; (exit (apply guix-main (command-line))) (apply guix-main (command-line))))- #:guile guile))++ ;; Use a 'guile' variant that doesn't complain about locales.+ #:guile (quiet-guile guile))) (define (miscellaneous-files source) "Return data files taken from SOURCE."-- 2.28.0
L
L
Ludovic Courtès wrote on 1 Oct 2020 10:38
[PATCH 2/2] build: Use a 'guile' executable that doesn't warn about locales.
(address . 43737@debbugs.gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20201001083848.27390-2-ludo@gnu.org
This gets rid of:
guile: warning: failed to install locale
when running the 'guix' command on a foreign distro where 'GUIX_LOCPATH'isn't set.
* Makefile.am (pkglibexec_PROGRAMS, guile_SOURCES, guile_LDADD)(guile_CFLAGS): New variables.(install-exec-hook): New target.(AUX_FILES): Remove 'guile-launcher.c'.* configure.ac: Use 'GUILE_FLAGS'.--- Makefile.am | 13 ++++++++++++- configure.ac | 3 +++ 2 files changed, 15 insertions(+), 1 deletion(-)
Toggle diff (47 lines)diff --git a/Makefile.am b/Makefile.amindex bc3efd2b6f..7aaf15cf8a 100644--- a/Makefile.am+++ b/Makefile.am@@ -47,6 +47,18 @@ scripts/guix: scripts/guix.in Makefile $(AM_V_GEN)$(do_subst) < "$(srcdir)/$@.in" > "$@-t" $(AM_V_at)chmod a+x,a-w "$@-t" && mv -f "$@-t" "$@" +# This is our variant of the 'guile' executable, one that doesn't complain+# about locales.+pkglibexec_PROGRAMS = guile+guile_SOURCES = gnu/packages/aux-files/guile-launcher.c+guile_LDADD = $(GUILE_LIBS)+guile_CFLAGS = $(GUILE_CFLAGS)++# Have the 'guix' command refer to our 'guile'.+install-exec-hook:+ $(SED) -i "$(DESTDIR)$(bindir)/guix" \+ -e 's,^#![[:graph:]]\+,#!$(pkglibexecdir)/guile,g'+ nodist_noinst_SCRIPTS = \ pre-inst-env \ test-env@@ -330,7 +342,6 @@ dist_noinst_DATA = \ # Auxiliary files for packages. AUX_FILES = \- gnu/packages/aux-files/guile-launcher.c \ gnu/packages/aux-files/chromium/master-preferences.json \ gnu/packages/aux-files/emacs/guix-emacs.el \ gnu/packages/aux-files/linux-libre/5.8-arm.conf \diff --git a/configure.ac b/configure.acindex adca374619..6861112eaf 100644--- a/configure.ac+++ b/configure.ac@@ -105,6 +105,9 @@ if test "x$GUILE_EFFECTIVE_VERSION" = "x2.2"; then PKG_CHECK_MODULES([GUILE], [guile-2.2 >= 2.2.3]) fi +dnl Get CFLAGS and LDFLAGS for libguile.+GUILE_FLAGS+ dnl Installation directories for .scm and .go files. guilemoduledir="${datarootdir}/guile/site/$GUILE_EFFECTIVE_VERSION" guileobjectdir="${libdir}/guile/$GUILE_EFFECTIVE_VERSION/site-ccache"-- 2.28.0
L
L
Lars-Dominik Braun wrote on 1 Oct 2020 13:31
Re: [PATCH 0/2] Getting rid of Guile's locale warning
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . guix-patches@gnu.org)
20201001113113.GA14083@zpidnp36
Hi Ludo,
I can confirm this patchset resolves https://issues.guix.gnu.org/issue/43739
(I applied the patches to a local tree, guix pull’ed it and restarted the daemon.)
Cheers,Lars
-----BEGIN PGP SIGNATURE-----
iQGzBAABCgAdFiEEyk+M9DfXR4/aBV/UQhN3ARo3hEYFAl91vf0ACgkQQhN3ARo3hEawkQwAzd5hYRe8f/CT3WUARrWnht3pnxVZ69VJ0bTUcZFtD0n0ZlfdyVnMdNb48kmH5eHw3m9pFzb6H4jVB2g8YqUIoDLq2Aa5N29yWF6i5SsfUJORXajFmZcgO34FKmA46JPpUqY9jMeWBafvgaTh5083yCTV3MvrSpnZvIGqvVJiaQKj/sU774OVR6CEpElfNlwqJZYaWZ88ngmPQqwgCWVF/ek9P7jcxB3pHRYWUdkvZsQbT4mH9IDt0TzHGfGIGrNCBcgDlA0XHYYwnA1liwatczX3SIBunFa0lPLvN8VUxBYX76ixTtlynLKRfdQCkHrU0Lzck9idp14G8vn0X8LaJ51joObJtzrtGU8pN65m7kqwKWygrnTlkzIKvHdz3uFC57R3rV+oBZil0PcsuLAiKEFjgKI6pvr6fNHmZOkXqFKVfgAsWpn5+svjJNh0+Z/cPfVYhzs0sXOL/EvFUOfSTCOgJO357jP9XyeNWZzf1Pg6V/GNhcEup1WKHpkAkFvi=Xp5F-----END PGP SIGNATURE-----

L
L
Ludovic Courtès wrote on 6 Oct 2020 14:26
Re: [bug#43737] [PATCH 0/2] Getting rid of Guile's locale warning
(address . 43737-done@debbugs.gnu.org)
87k0w3v8va.fsf@gnu.org
Hi!
Ludovic Courtès <ludo@gnu.org> skribis:
Toggle quote (3 lines)> self: Use a 'guile' that doesn't complain about locales.> build: Use a 'guile' executable that doesn't warn about locales.
Pushed as 880fe019ae64df37815bbdb1a22305f99dae759d.
Lars-Dominik Braun <ldb@leibniz-psychology.org> skribis:
Toggle quote (2 lines)> I can confirm this patchset resolves https://issues.guix.gnu.org/issue/43739
Awesome, thanks for testing!
Ludo’.
Closed
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send email to 43737@debbugs.gnu.org