all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: ludo@gnu.org (Ludovic Courtès)
To: Thomas Sigurdsen <thomas.sigurdsen@gmail.com>
Cc: "help-guix@gnu.org" <help-guix@gnu.org>
Subject: Re: Package Definitions and Maintenance
Date: Mon, 03 Apr 2017 15:42:44 +0200	[thread overview]
Message-ID: <87pogtmwtn.fsf@gnu.org> (raw)
In-Reply-To: <20170402114445.33e505b3@hitpoints> (Thomas Sigurdsen's message of "Sun, 2 Apr 2017 11:44:45 +0200")

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

Thomas Sigurdsen <thomas.sigurdsen@gmail.com> 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’.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 3353 bytes --]

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

      parent reply	other threads:[~2017-04-03 13:42 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-02  9:44 Package Definitions and Maintenance Thomas Sigurdsen
2017-04-02 10:56 ` ng0
2017-04-03 13:21 ` Ludovic Courtès
2017-04-03 13:42 ` Ludovic Courtès [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87pogtmwtn.fsf@gnu.org \
    --to=ludo@gnu.org \
    --cc=help-guix@gnu.org \
    --cc=thomas.sigurdsen@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.