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