me
/
guix
Archived
1
0
Fork 0

guix build: Add a hint for unspecified value.

* guix/scripts/build.scm (options->things-to-build): Add a hint when we
cannot build something.
master
Julien Lepiller 2020-09-16 23:32:00 +02:00
parent 088347300b
commit e75443d4f2
No known key found for this signature in database
GPG Key ID: 53D457B2D636EE82
1 changed files with 24 additions and 1 deletions

View File

@ -38,6 +38,7 @@
#:use-module (guix monads)
#:use-module (guix gexp)
#:use-module (guix profiles)
#:use-module (guix diagnostics)
#:autoload (guix http-client) (http-fetch http-get-error?)
#:use-module (ice-9 format)
#:use-module (ice-9 match)
@ -46,6 +47,7 @@
#:use-module (srfi srfi-11)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-35)
#:use-module (srfi srfi-37)
#:use-module (gnu packages)
#:autoload (guix download) (download-to-store)
@ -830,7 +832,28 @@ must be one of 'package', 'all', or 'transitive'~%")
build---packages, gexps, derivations, and so on."
(define (validate-type x)
(unless (or (derivation? x) (file-like? x) (gexp? x) (procedure? x))
(leave (G_ "~s: not something we can build~%") x)))
(raise (make-compound-condition
(formatted-message (G_ "~s: not something we can build~%") x)
(condition
(&fix-hint
(hint
(if (unspecified? x)
(G_ "If you build from a file, make sure the last Scheme
expression returns a package value. @code{define-public} defines a variable,
but returns @code{#<unspecified>}. To fix this, add a Scheme expression at
the end of the file that consists only of the package's variable name you
defined, as in this example:
@example
(define-public my-package
(package
...))
my-package
@end example")
(G_ "If you build from a file, make sure the last
Scheme expression returns a package, gexp, derivation or a list of such
values.")))))))))
(define (ensure-list x)
(let ((lst (match x