unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#43737] [PATCH 0/2] Getting rid of Guile's locale warning
@ 2020-10-01  8:35 Ludovic Courtès
  2020-10-01  8:38 ` [bug#43737] [PATCH 1/2] self: Use a 'guile' that doesn't complain about locales Ludovic Courtès
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Ludovic Courtès @ 2020-10-01  8:35 UTC (permalink / raw)
  To: 43737; +Cc: Ludovic Courtès

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, especially
when it gets printed each time something gets downloaded (‘guix
substitute’ is invoked) and they have no idea how to get rid of it.

It’s also fairly pointless because (guix ui) has its own locale
handling 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





^ permalink raw reply	[flat|nested] 5+ messages in thread

* [bug#43737] [PATCH 1/2] self: Use a 'guile' that doesn't complain about locales.
  2020-10-01  8:35 [bug#43737] [PATCH 0/2] Getting rid of Guile's locale warning Ludovic Courtès
@ 2020-10-01  8:38 ` Ludovic Courtès
  2020-10-01  8:38   ` [bug#43737] [PATCH 2/2] build: Use a 'guile' executable that doesn't warn " Ludovic Courtès
  2020-10-01 11:31 ` [bug#43737] [PATCH 0/2] Getting rid of Guile's locale warning Lars-Dominik Braun
  2020-10-06 12:26 ` bug#43737: " Ludovic Courtès
  2 siblings, 1 reply; 5+ messages in thread
From: Ludovic Courtès @ 2020-10-01  8:38 UTC (permalink / raw)
  To: 43737; +Cc: Ludovic Courtès

Since commit ba48895899a117d6ace2209c3f54411a4a989133, selected UTF-8
locales are bundled.  However, because 'guix-command' is itself a Guile
script, users would still see Guile's warning, particularly on foreign
distros:

  $ 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, each
invocation 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 keep
seeing 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

diff --git a/Makefile.am b/Makefile.am
index 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.c
new file mode 100644
index 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.scm
index 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
 
 \f
@@ -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





^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [bug#43737] [PATCH 2/2] build: Use a 'guile' executable that doesn't warn about locales.
  2020-10-01  8:38 ` [bug#43737] [PATCH 1/2] self: Use a 'guile' that doesn't complain about locales Ludovic Courtès
@ 2020-10-01  8:38   ` Ludovic Courtès
  0 siblings, 0 replies; 5+ messages in thread
From: Ludovic Courtès @ 2020-10-01  8:38 UTC (permalink / raw)
  To: 43737; +Cc: Ludovic Courtès

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(-)

diff --git a/Makefile.am b/Makefile.am
index 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.ac
index 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





^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [bug#43737] [PATCH 0/2] Getting rid of Guile's locale warning
  2020-10-01  8:35 [bug#43737] [PATCH 0/2] Getting rid of Guile's locale warning Ludovic Courtès
  2020-10-01  8:38 ` [bug#43737] [PATCH 1/2] self: Use a 'guile' that doesn't complain about locales Ludovic Courtès
@ 2020-10-01 11:31 ` Lars-Dominik Braun
  2020-10-06 12:26 ` bug#43737: " Ludovic Courtès
  2 siblings, 0 replies; 5+ messages in thread
From: Lars-Dominik Braun @ 2020-10-01 11:31 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 43737

[-- Attachment #1: Type: text/plain, Size: 197 bytes --]

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


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#43737: [PATCH 0/2] Getting rid of Guile's locale warning
  2020-10-01  8:35 [bug#43737] [PATCH 0/2] Getting rid of Guile's locale warning Ludovic Courtès
  2020-10-01  8:38 ` [bug#43737] [PATCH 1/2] self: Use a 'guile' that doesn't complain about locales Ludovic Courtès
  2020-10-01 11:31 ` [bug#43737] [PATCH 0/2] Getting rid of Guile's locale warning Lars-Dominik Braun
@ 2020-10-06 12:26 ` Ludovic Courtès
  2 siblings, 0 replies; 5+ messages in thread
From: Ludovic Courtès @ 2020-10-06 12:26 UTC (permalink / raw)
  To: 43737-done

Hi!

Ludovic Courtès <ludo@gnu.org> skribis:

>   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:

> I can confirm this patchset resolves https://issues.guix.gnu.org/issue/43739

Awesome, thanks for testing!

Ludo’.




^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-10-06 12:27 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-01  8:35 [bug#43737] [PATCH 0/2] Getting rid of Guile's locale warning Ludovic Courtès
2020-10-01  8:38 ` [bug#43737] [PATCH 1/2] self: Use a 'guile' that doesn't complain about locales Ludovic Courtès
2020-10-01  8:38   ` [bug#43737] [PATCH 2/2] build: Use a 'guile' executable that doesn't warn " Ludovic Courtès
2020-10-01 11:31 ` [bug#43737] [PATCH 0/2] Getting rid of Guile's locale warning Lars-Dominik Braun
2020-10-06 12:26 ` bug#43737: " Ludovic Courtès

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).