GNU bug report logs - #48685
[PATCH 0/2] Require Guile 3.0

Previous Next

Package: guix-patches;

Reported by: Ludovic Courtès <ludo <at> gnu.org>

Date: Wed, 26 May 2021 21:13:01 UTC

Severity: normal

Tags: patch

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 48685 in the body.
You can then email your comments to 48685 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#48685; Package guix-patches. (Wed, 26 May 2021 21:13:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Ludovic Courtès <ludo <at> gnu.org>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Wed, 26 May 2021 21:13:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: guix-patches <at> gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH 0/2] Require Guile 3.0
Date: Wed, 26 May 2021 23:12:10 +0200
Hi!

These patches drop support for Guile 2.2 so we can concentrate
on moving forward.

For the record, Guile 3.0 was released 1.5 year ago.  In Debian,
Guile 3.0 is available but the ‘guix’ package is currently
built against 2.2 due to the GnuTLS/Guile bug at
<https://issues.guix.gnu.org/46330>; this is likely to be addressed
by the time we publish the next Guix release.

Thoughts?

Ludo’.

Ludovic Courtès (2):
  maint: Require Guile 3.0.
  ui, lint: Simplify exception handling in Guile 3 style.

 configure.ac                        |  6 +--
 doc/guix.texi                       |  3 +-
 gnu/packages/package-management.scm | 34 ------------
 guix/lint.scm                       | 81 +++++++++++++----------------
 guix/scripts/deploy.scm             |  7 +--
 guix/store.scm                      | 16 ++----
 guix/swh.scm                        | 20 +++----
 guix/ui.scm                         | 60 ++++++++-------------
 8 files changed, 72 insertions(+), 155 deletions(-)

-- 
2.31.1





Information forwarded to guix-patches <at> gnu.org:
bug#48685; Package guix-patches. (Wed, 26 May 2021 21:19:02 GMT) Full text and rfc822 format available.

Message #8 received at 48685 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 48685 <at> debbugs.gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH 1/2] maint: Require Guile 3.0.
Date: Wed, 26 May 2021 23:18:13 +0200
* configure.ac: Require Guile 3.0.
* doc/guix.texi (Requirements): Adjust accordingly.
* gnu/packages/package-management.scm (guile2.2-guix): Remove.
* guix/lint.scm (exception-with-kind-and-args?): Remove 'cond-expand'.
* guix/scripts/deploy.scm (deploy-machine*): Likewise.
* guix/store.scm (call-with-store): Likewise.
* guix/swh.scm (http-get*, http-post*): Likewise.
* guix/ui.scm (without-compiler-optimizations, guard*)
(call-with-error-handling): Likewise.
---
 configure.ac                        |  6 +---
 doc/guix.texi                       |  3 +-
 gnu/packages/package-management.scm | 34 ---------------------
 guix/lint.scm                       | 11 ++-----
 guix/scripts/deploy.scm             |  7 ++---
 guix/store.scm                      | 16 +++-------
 guix/swh.scm                        | 20 ++++---------
 guix/ui.scm                         | 46 ++++++++++-------------------
 8 files changed, 33 insertions(+), 110 deletions(-)

diff --git a/configure.ac b/configure.ac
index 583b902361..84592f6041 100644
--- a/configure.ac
+++ b/configure.ac
@@ -96,16 +96,12 @@ m4_pattern_forbid([^GUIX_])
 
 dnl Search for 'guile' and 'guild'.  This macro defines
 dnl 'GUILE_EFFECTIVE_VERSION'.
-GUILE_PKG([3.0 2.2])
+GUILE_PKG([3.0])
 GUILE_PROGS
 if test "x$GUILD" = "x"; then
    AC_MSG_ERROR(['guild' binary not found; please check your Guile installation.])
 fi
 
-if test "x$GUILE_EFFECTIVE_VERSION" = "x2.2"; then
-  PKG_CHECK_MODULES([GUILE], [guile-2.2 >= 2.2.6])
-fi
-
 dnl Get CFLAGS and LDFLAGS for libguile.
 GUILE_FLAGS
 
diff --git a/doc/guix.texi b/doc/guix.texi
index e8b0485f78..05a4f9a6e2 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -833,8 +833,7 @@ GNU Guix is available for download from its website at
 GNU Guix depends on the following packages:
 
 @itemize
-@item @url{https://gnu.org/software/guile/, GNU Guile}, version 3.0.x or
-2.2.x;
+@item @url{https://gnu.org/software/guile/, GNU Guile}, version 3.0.x;
 @item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
 0.1.0 or later;
 @item
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 1cea8ed83d..6378d7c2d9 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -518,40 +518,6 @@ the Nix package manager.")
                (invoke "make" "install-binPROGRAMS")))
            (delete 'wrap-program)))))))
 
-
-(define-public guile2.2-guix
-  (package
-    (inherit guix)
-    (name "guile2.2-guix")
-    (native-inputs
-     `(("guile" ,guile-2.2)
-       ("gnutls" ,guile2.2-gnutls)
-       ("guile-gcrypt" ,guile2.2-gcrypt)
-       ("guile-json" ,guile2.2-json)
-       ("guile-lib" ,guile2.2-lib)
-       ("guile-sqlite3" ,guile2.2-sqlite3)
-       ("guile-ssh" ,guile2.2-ssh)
-       ("guile-git" ,guile2.2-git)
-       ("guile-zlib" ,guile2.2-zlib)
-       ("guile-lzlib" ,guile2.2-lzlib)
-       ,@(fold alist-delete (package-native-inputs guix)
-               '("guile" "gnutls" "guile-gcrypt" "guile-json"
-                 "guile-lib" "guile-sqlite3" "guile-ssh" "guile-git"
-                 "guile-zlib" "guile-lzlib"))))
-    (inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-inputs guix))))
-    (propagated-inputs
-     `(("gnutls" ,gnutls)
-       ("guile-gcrypt" ,guile2.2-gcrypt)
-       ("guile-json" ,guile2.2-json)
-       ("guile-lib" ,guile2.2-lib)
-       ("guile-sqlite3" ,guile2.2-sqlite3)
-       ("guile-ssh" ,guile2.2-ssh)
-       ("guile-git" ,guile2.2-git)
-       ("guile-zlib" ,guile2.2-zlib)
-       ("guile-lzlib" ,guile2.2-lzlib)))))
-
 (define-public guile3.0-guix
   (deprecated-package "guile3.0-guix" guix))
 
diff --git a/guix/lint.scm b/guix/lint.scm
index a2d6418b85..023a179ea6 100644
--- a/guix/lint.scm
+++ b/guix/lint.scm
@@ -1003,14 +1003,9 @@ descriptions maintained upstream."
          (origin-uris origin))
         '())))
 
-(cond-expand
-  (guile-3
-   ;; Guile 3.0.0 does not export this predicate.
-   (define exception-with-kind-and-args?
-     (exception-predicate &exception-with-kind-and-args)))
-  (else                                           ;Guile 2
-   (define exception-with-kind-and-args?
-     (const #f))))
+;; Guile 3.0.0 does not export this predicate.
+(define exception-with-kind-and-args?
+  (exception-predicate &exception-with-kind-and-args))
 
 (define* (check-derivation package #:key store)
   "Emit a warning if we fail to compile PACKAGE to a derivation."
diff --git a/guix/scripts/deploy.scm b/guix/scripts/deploy.scm
index 0725fba54b..b2029943e2 100644
--- a/guix/scripts/deploy.scm
+++ b/guix/scripts/deploy.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 David Thompson <davet <at> gnu.org>
 ;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays <at> sdf.org>
-;;; Copyright © 2020 Ludovic Courtès <ludo <at> gnu.org>
+;;; Copyright © 2020, 2021 Ludovic Courtès <ludo <at> gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -125,10 +125,7 @@ Perform the deployment specified by FILE.\n"))
            ;; and include a '&message'.  However, that message only contains
            ;; the format string.  Thus, special-case it here to avoid
            ;; displaying a bare format string.
-           ((cond-expand
-              (guile-3
-               ((exception-predicate &exception-with-kind-and-args) c))
-              (else #f))
+           (((exception-predicate &exception-with-kind-and-args) c)
             (raise c))
 
            ((message-condition? c)
diff --git a/guix/store.scm b/guix/store.scm
index 9d706ae590..cf5d5eeccc 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -648,18 +648,10 @@ connection.  Use with care."
             (close-connection store)
             (apply values results)))))
 
-    (cond-expand
-      (guile-3
-       (with-exception-handler (lambda (exception)
-                                 (close-connection store)
-                                 (raise-exception exception))
-         thunk))
-      (else                                       ;Guile 2.2
-       (catch #t
-         thunk
-         (lambda (key . args)
-           (close-connection store)
-           (apply throw key args)))))))
+    (with-exception-handler (lambda (exception)
+                              (close-connection store)
+                              (raise-exception exception))
+      thunk)))
 
 (define-syntax-rule (with-store store exp ...)
   "Bind STORE to an open connection to the store and evaluate EXPs;
diff --git a/guix/swh.scm b/guix/swh.scm
index 06d2957252..f6d5241e06 100644
--- a/guix/swh.scm
+++ b/guix/swh.scm
@@ -148,20 +148,12 @@
       url
       (string-append url "/")))
 
-(cond-expand
-  (guile-3
-   ;; XXX: Work around a bug in Guile 3.0.2 where #:verify-certificate? would
-   ;; be ignored (<https://bugs.gnu.org/40486>).
-   (define* (http-get* uri #:rest rest)
-     (apply http-request uri #:method 'GET rest))
-   (define* (http-post* uri #:rest rest)
-     (apply http-request uri #:method 'POST rest)))
-  (else                                           ;Guile 2.2
-   ;; Guile 2.2 did not have #:verify-certificate? so ignore it.
-   (define* (http-get* uri #:key verify-certificate? streaming?)
-     (http-request uri #:method 'GET #:streaming? streaming?))
-   (define* (http-post* uri #:key verify-certificate? streaming?)
-     (http-request uri #:method 'POST #:streaming? streaming?))))
+;; XXX: Work around a bug in Guile 3.0.2 where #:verify-certificate? would
+;; be ignored (<https://bugs.gnu.org/40486>).
+(define* (http-get* uri #:rest rest)
+  (apply http-request uri #:method 'GET rest))
+(define* (http-post* uri #:rest rest)
+  (apply http-request uri #:method 'POST rest))
 
 (define %date-regexp
   ;; Match strings like "2014-11-17T22:09:38+01:00" or
diff --git a/guix/ui.scm b/guix/ui.scm
index 05b3f5f84c..6b0155f563 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -196,17 +196,11 @@ information, or #f if it could not be found."
                            (stack-ref stack 1)    ;skip the 'throw' frame
                            last))))
 
-(cond-expand
-  (guile-3
-   (define-syntax-rule (without-compiler-optimizations exp)
-     ;; Compile with the baseline compiler (-O1), which is much less expensive
-     ;; than -O2.
-     (parameterize (((@ (system base compile) default-optimization-level) 1))
-       exp)))
-  (else
-   (define-syntax-rule (without-compiler-optimizations exp)
-     ;; No easy way to turn off optimizations on Guile 2.2.
-     exp)))
+(define-syntax-rule (without-compiler-optimizations exp)
+  ;; Compile with the baseline compiler (-O1), which is much less expensive
+  ;; than -O2.
+  (parameterize (((@ (system base compile) default-optimization-level) 1))
+    exp))
 
 (define* (load* file user-module
                 #:key (on-error 'nothing-special))
@@ -674,22 +668,17 @@ or variants of @code{~a} in the same profile.")
 or remove one of them from the profile.")
                               name1 name2)))))
 
-(cond-expand
-  (guile-3
-   ;; On Guile 3.0, in 'call-with-error-handling' we need to re-raise.  To
-   ;; preserve useful backtraces in case of unhandled errors, we want that to
-   ;; happen before the stack has been unwound, hence 'guard*'.
-   (define-syntax-rule (guard* (var clauses ...) exp ...)
-     "This variant of SRFI-34 'guard' does not unwind the stack before
+;; On Guile 3.0, in 'call-with-error-handling' we need to re-raise.  To
+;; preserve useful backtraces in case of unhandled errors, we want that to
+;; happen before the stack has been unwound, hence 'guard*'.
+(define-syntax-rule (guard* (var clauses ...) exp ...)
+  "This variant of SRFI-34 'guard' does not unwind the stack before
 evaluating the tests and bodies of CLAUSES."
-     (with-exception-handler
-         (lambda (var)
-           (cond clauses ... (else (raise var))))
-       (lambda () exp ...)
-       #:unwind? #f)))
-  (else
-   (define-syntax-rule (guard* (var clauses ...) exp ...)
-     (guard (var clauses ...) exp ...))))
+  (with-exception-handler
+      (lambda (var)
+        (cond clauses ... (else (raise var))))
+    (lambda () exp ...)
+    #:unwind? #f))
 
 (define (call-with-error-handling thunk)
   "Call THUNK within a user-friendly error handler."
@@ -822,10 +811,7 @@ directories:~{ ~a~}~%")
              ;; Furthermore, use of 'guard*' ensures that the stack has not
              ;; been unwound when we re-raise, since that would otherwise show
              ;; useless backtraces.
-             ((cond-expand
-                (guile-3
-                 ((exception-predicate &exception-with-kind-and-args) c))
-                (else #f))
+             (((exception-predicate &exception-with-kind-and-args) c)
               (raise c))
 
              ((message-condition? c)
-- 
2.31.1





Information forwarded to guix-patches <at> gnu.org:
bug#48685; Package guix-patches. (Wed, 26 May 2021 21:19:02 GMT) Full text and rfc822 format available.

Message #11 received at 48685 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 48685 <at> debbugs.gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH 2/2] ui, lint: Simplify exception handling in Guile 3 style.
Date: Wed, 26 May 2021 23:18:14 +0200
* guix/lint.scm (check-derivation)[try]: Remove "catch #t" wrapping.
* guix/ui.scm (call-with-error-handling): Remove "catch 'system-error"
and move 'system-error handling to the &exception-with-kind-and-args
clause.
---
 guix/lint.scm | 70 +++++++++++++++++++++++----------------------------
 guix/ui.scm   | 14 +++++------
 2 files changed, 39 insertions(+), 45 deletions(-)

diff --git a/guix/lint.scm b/guix/lint.scm
index 023a179ea6..41dd5d0633 100644
--- a/guix/lint.scm
+++ b/guix/lint.scm
@@ -1010,45 +1010,39 @@ descriptions maintained upstream."
 (define* (check-derivation package #:key store)
   "Emit a warning if we fail to compile PACKAGE to a derivation."
   (define (try store system)
-    (catch #t     ;TODO: Remove 'catch' when Guile 2.x is no longer supported.
-      (lambda ()
-        (guard (c ((store-protocol-error? c)
-                   (make-warning package
-                                 (G_ "failed to create ~a derivation: ~a")
-                                 (list system
-                                       (store-protocol-error-message c))))
-                  ((exception-with-kind-and-args? c)
-                   (make-warning package
-                                 (G_ "failed to create ~a derivation: ~s")
-                                 (list system
-                                       (cons (exception-kind c)
-                                             (exception-args c)))))
-                  ((message-condition? c)
-                   (make-warning package
-                                 (G_ "failed to create ~a derivation: ~a")
-                                 (list system
-                                       (condition-message c))))
-                  ((formatted-message? c)
-                   (let ((str (apply format #f
-                                     (formatted-message-string c)
-                                     (formatted-message-arguments c))))
-                     (make-warning package
-                                   (G_ "failed to create ~a derivation: ~a")
-                                   (list system str)))))
-          (parameterize ((%graft? #f))
-            (package-derivation store package system #:graft? #f)
+    (guard (c ((store-protocol-error? c)
+               (make-warning package
+                             (G_ "failed to create ~a derivation: ~a")
+                             (list system
+                                   (store-protocol-error-message c))))
+              ((exception-with-kind-and-args? c)
+               (make-warning package
+                             (G_ "failed to create ~a derivation: ~s")
+                             (list system
+                                   (cons (exception-kind c)
+                                         (exception-args c)))))
+              ((message-condition? c)
+               (make-warning package
+                             (G_ "failed to create ~a derivation: ~a")
+                             (list system
+                                   (condition-message c))))
+              ((formatted-message? c)
+               (let ((str (apply format #f
+                                 (formatted-message-string c)
+                                 (formatted-message-arguments c))))
+                 (make-warning package
+                               (G_ "failed to create ~a derivation: ~a")
+                               (list system str)))))
+      (parameterize ((%graft? #f))
+        (package-derivation store package system #:graft? #f)
 
-            ;; If there's a replacement, make sure we can compute its
-            ;; derivation.
-            (match (package-replacement package)
-              (#f #t)
-              (replacement
-               (package-derivation store replacement system
-                                   #:graft? #f))))))
-      (lambda args
-        (make-warning package
-                      (G_ "failed to create ~a derivation: ~s")
-                      (list system args)))))
+        ;; If there's a replacement, make sure we can compute its
+        ;; derivation.
+        (match (package-replacement package)
+          (#f #t)
+          (replacement
+           (package-derivation store replacement system
+                               #:graft? #f))))))
 
   (define (check-with-store store)
     (filter lint-warning?
diff --git a/guix/ui.scm b/guix/ui.scm
index 6b0155f563..d3e01f846d 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -812,7 +812,12 @@ directories:~{ ~a~}~%")
              ;; been unwound when we re-raise, since that would otherwise show
              ;; useless backtraces.
              (((exception-predicate &exception-with-kind-and-args) c)
-              (raise c))
+              (if (eq? 'system-error (exception-kind c)) ;EPIPE & co.
+                  (match (exception-args c)
+                    ((proc format-string format-args . _)
+                     (leave (G_ "~a: ~a~%") proc
+                            (apply format #f format-string format-args))))
+                  (raise c)))
 
              ((message-condition? c)
               ;; Normally '&message' error conditions have an i18n'd message.
@@ -822,12 +827,7 @@ directories:~{ ~a~}~%")
               (when (fix-hint? c)
                 (display-hint (condition-fix-hint c)))
               (exit 1)))
-      ;; Catch EPIPE and the likes.
-      (catch 'system-error
-        thunk
-        (lambda (key proc format-string format-args . rest)
-          (leave (G_ "~a: ~a~%") proc
-                 (apply format #f format-string format-args))))))
+      (thunk)))
 
 (define-syntax-rule (leave-on-EPIPE exp ...)
   "Run EXP... in a context where EPIPE errors are caught and lead to 'exit'
-- 
2.31.1





Reply sent to Ludovic Courtès <ludo <at> gnu.org>:
You have taken responsibility. (Tue, 01 Jun 2021 21:29:01 GMT) Full text and rfc822 format available.

Notification sent to Ludovic Courtès <ludo <at> gnu.org>:
bug acknowledged by developer. (Tue, 01 Jun 2021 21:29:01 GMT) Full text and rfc822 format available.

Message #16 received at 48685-done <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 48685-done <at> debbugs.gnu.org
Subject: Re: bug#48685: [PATCH 0/2] Require Guile 3.0
Date: Tue, 01 Jun 2021 23:28:27 +0200
Ludovic Courtès <ludo <at> gnu.org> skribis:

>   maint: Require Guile 3.0.
>   ui, lint: Simplify exception handling in Guile 3 style.

Pushed as 5bcb4f8a58ad316174768c167927c03be3272786!

Ludo’.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Wed, 30 Jun 2021 11:24:09 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 272 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.