help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Package Definitions and Maintenance


From: Ludovic Courtès
Subject: Re: Package Definitions and Maintenance
Date: Mon, 03 Apr 2017 15:42:44 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux)

Thomas Sigurdsen <address@hidden> skribis:

> WARNING: (wkhtmltopdf): `freetype' imported from both (guix licenses) and
> (gnu packages fontutils) Backtrace:
> In ice-9/boot-9.scm:
> 4056: 19 [#<procedure 1148900 at ice-9/boot-9.scm:4051:3 ()>]
> 1727: 18 [%start-stack load-stack ...]
> 1732: 17 [#<procedure 115cb10 ()>]
> In unknown file:
>    ?: 16 [primitive-load
> "/gnu/store/0icg6mr0cw74srvp39hms8fvh3s821yf-guix-0.12.0-7.aabe/bin/.guix-real"]
> In guix/ui.scm: 1228: 15 [run-guix-command package "-i" "wkhtmltopdf"]
> In ice-9/boot-9.scm:
>  160: 14 [catch srfi-34 #<procedure 1b71c00 at guix/ui.scm:432:2 ()> ...]
>  160: 13 [catch system-error ...]
> In guix/scripts/package.scm:
>  896: 12 [#<procedure 1b71c20 at guix/scripts/package.scm:884:4 ()>]
>  863: 11 [process-actions #<build-daemon 256.97 1b722c0> (# # # # ...)]
> In guix/ui.scm:
>  729: 10 [show-manifest-transaction # # # ...]
> In srfi/srfi-1.scm:
>  598: 9 [map #<procedure 4bd45c0 at guix/ui.scm:653:9 (name version output
> item)> ...] In guix/ui.scm:
>  658: 8 [#<procedure 4bd45c0 at guix/ui.scm:653:9 (name version output item)>
> "wkhtmltopdf" ...] In guix/packages.scm:
> 1134: 7 [package-output # # "out" ...]
>  786: 6 [cache! #<weak-key-hash-table 1a3da00 339/443> # # ...]
> 1092: 5 [thunk]
> 1024: 4 [bag->derivation # # #]
> In srfi/srfi-1.scm:
>  573: 3 [map #<procedure 356a150 at guix/packages.scm:1026:30 (t-1331428)> #]
> In guix/packages.scm:
>  846: 2 [expand-input # # # ...]
> In guix/store.scm:
> 1176: 1 [#<procedure 1a404a0 at guix/store.scm:1175:26 (store . args)> #
> # ...] In unknown file:
>    ?: 0 [#f # "x86_64-linux" #f]

The attached patch slightly improves the situation:

--8<---------------cut here---------------start------------->8---
$ ./pre-inst-env guix build -L /tmp/guixsd-configuration/modules/tms/ 
wkhtmltopdf
WARNING: (wkhtmltopdf): `freetype' imported from both (guix licenses) and (gnu 
packages fontutils)
guix build: error: #<<license> name: "Zlib" uri: 
"http://www.gzip.org/zlib/zlib_license.html"; comment: 
"https://www.gnu.org/licenses/license-list#ZLib";>: invalid G-expression input
--8<---------------cut here---------------end--------------->8---

The downside is that there’s no source location info here, and it’s
talking about g-expressions when all the user cares about is packages in
this case.

Ludo’.

diff --git a/guix/gexp.scm b/guix/gexp.scm
index 1b8e43e99..80d8f735b 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -26,6 +26,8 @@
   #:use-module (srfi srfi-9)
   #:use-module (srfi srfi-9 gnu)
   #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-34)
+  #:use-module (srfi srfi-35)
   #:use-module (ice-9 match)
   #:export (gexp
             gexp?
@@ -84,7 +86,13 @@
             gexp-compiler?
             lower-object
 
-            lower-inputs))
+            lower-inputs
+
+            &gexp-error
+            gexp-error?
+            &gexp-input-error
+            gexp-input-error?
+            gexp-error-invalid-input))
 
 ;;; Commentary:
 ;;;
@@ -140,6 +148,14 @@
   (lower      gexp-compiler-lower)
   (expand     gexp-compiler-expand))              ;#f | DRV -> sexp
 
+(define-condition-type &gexp-error &error
+  gexp-error?)
+
+(define-condition-type &gexp-input-error &gexp-error
+  gexp-input-error?
+  (input gexp-error-invalid-input))
+
+
 (define %gexp-compilers
   ;; 'eq?' mapping of record type descriptor to <gexp-compiler>.
   (make-hash-table 20))
@@ -177,8 +193,11 @@ procedure to expand it; otherwise return #f."
 corresponding to OBJ for SYSTEM, cross-compiling for TARGET if TARGET is true.
 OBJ must be an object that has an associated gexp compiler, such as a
 <package>."
-  (let ((lower (lookup-compiler obj)))
-    (lower obj system target)))
+  (match (lookup-compiler obj)
+    (#f
+     (raise (condition (&gexp-input-error (input obj)))))
+    (lower
+     (lower obj system target))))
 
 (define-syntax define-gexp-compiler
   (syntax-rules (=> compiler expander)
diff --git a/guix/packages.scm b/guix/packages.scm
index 61171b834..d865dd5ad 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -31,7 +31,6 @@
   #:use-module (guix memoization)
   #:use-module (guix build-system)
   #:use-module (guix search-paths)
-  #:use-module (guix gexp)
   #:use-module (guix sets)
   #:use-module (ice-9 match)
   #:use-module (ice-9 vlist)
@@ -1226,4 +1225,7 @@ outside of the store) or SOURCE itself (if SOURCE is 
already a store item.)"
         ((? string? file)
          (add-to-store store (basename file) #t "sha256" file))
         (_
+         ;; XXX: 'lower' can throw '&gexp-input-error'.  From a UI viewpoint,
+         ;; this is better than a wrong-type-arg error, but it's not ideal
+         ;; because gexps don't have source location information yet.
          (lower store source system))))))
diff --git a/guix/ui.scm b/guix/ui.scm
index 345bf490b..b3c94795f 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -26,6 +26,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (guix ui)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix store)
   #:use-module (guix config)
@@ -448,6 +449,10 @@ interpreted."
                       (location->string loc)
                       (package-full-name package)
                       (build-system-name system))))
+            ((gexp-input-error? c)
+             (let ((input (package-error-invalid-input c)))
+               (leave (_ "~s: invalid G-expression input~%")
+                      (gexp-error-invalid-input c))))
             ((profile-not-found-error? c)
              (leave (_ "profile '~a' does not exist~%")
                     (profile-error-profile c)))

reply via email to

[Prev in Thread] Current Thread [Next in Thread]