summaryrefslogtreecommitdiff
path: root/guix/gexp.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-02-13 23:14:05 +0100
committerLudovic Courtès <ludo@gnu.org>2015-02-13 23:19:49 +0100
commitce45eb4c385e3b473bc6746a8b58452865f69977 (patch)
tree30db560ed41ee569b4615d6d5c4bb6a868fa9706 /guix/gexp.scm
parentb8bedf6051200b0c8eb6ddf4ac1b155466caa3ec (diff)
downloadgnu-guix-ce45eb4c385e3b473bc6746a8b58452865f69977.tar
gnu-guix-ce45eb4c385e3b473bc6746a8b58452865f69977.tar.gz
gexp: Add #:graft? parameter to 'gexp->derivation'.
* guix/gexp.scm (gexp->derivation): Add #:graft? parameter and honor it. * tests/gexp.scm ("gexp->derivation vs. grafts"): New test. * doc/guix.texi (G-Expressions): Update 'gexp->derivation' documentation.
Diffstat (limited to 'guix/gexp.scm')
-rw-r--r--guix/gexp.scm62
1 files changed, 34 insertions, 28 deletions
diff --git a/guix/gexp.scm b/guix/gexp.scm
index 0620683078..a8349c7d6e 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -153,6 +153,7 @@ names and file names suitable for the #:allowed-references argument to
(modules '())
(module-path %load-path)
(guile-for-build (%guile-for-build))
+ (graft? (%graft?))
references-graphs
allowed-references
local-build?)
@@ -165,6 +166,9 @@ names of Guile modules searched in MODULE-PATH to be copied in the store,
compiled, and made available in the load path during the execution of
EXP---e.g., '((guix build utils) (guix build gnu-build-system)).
+GRAFT? determines whether packages referred to by EXP should be grafted when
+applicable.
+
When REFERENCES-GRAPHS is true, it must be a list of tuples of one of the
following forms:
@@ -198,10 +202,10 @@ The other arguments are as for 'derivation'."
(cons file-name thing)))
graphs))
- (mlet* %store-monad (;; The following binding is here to force
- ;; '%current-system' and '%current-target-system' to be
- ;; looked up at >>= time.
- (unused (return #f))
+ (mlet* %store-monad (;; The following binding forces '%current-system' and
+ ;; '%current-target-system' to be looked up at >>=
+ ;; time.
+ (graft? (set-grafting graft?))
(system -> (or system (%current-system)))
(target -> (if (eq? target 'current)
@@ -245,30 +249,32 @@ The other arguments are as for 'derivation'."
(return guile-for-build)
(package->derivation (default-guile)
system))))
- (raw-derivation name
- (string-append (derivation->output-path guile)
- "/bin/guile")
- `("--no-auto-compile"
- ,@(if (pair? %modules)
- `("-L" ,(derivation->output-path modules)
- "-C" ,(derivation->output-path compiled))
- '())
- ,builder)
- #:outputs outputs
- #:env-vars env-vars
- #:system system
- #:inputs `((,guile)
- (,builder)
- ,@(if modules
- `((,modules) (,compiled) ,@inputs)
- inputs)
- ,@(match graphs
- (((_ . inputs) ...) inputs)
- (_ '())))
- #:hash hash #:hash-algo hash-algo #:recursive? recursive?
- #:references-graphs (and=> graphs graphs-file-names)
- #:allowed-references allowed
- #:local-build? local-build?)))
+ (mbegin %store-monad
+ (set-grafting graft?) ;restore the initial setting
+ (raw-derivation name
+ (string-append (derivation->output-path guile)
+ "/bin/guile")
+ `("--no-auto-compile"
+ ,@(if (pair? %modules)
+ `("-L" ,(derivation->output-path modules)
+ "-C" ,(derivation->output-path compiled))
+ '())
+ ,builder)
+ #:outputs outputs
+ #:env-vars env-vars
+ #:system system
+ #:inputs `((,guile)
+ (,builder)
+ ,@(if modules
+ `((,modules) (,compiled) ,@inputs)
+ inputs)
+ ,@(match graphs
+ (((_ . inputs) ...) inputs)
+ (_ '())))
+ #:hash hash #:hash-algo hash-algo #:recursive? recursive?
+ #:references-graphs (and=> graphs graphs-file-names)
+ #:allowed-references allowed
+ #:local-build? local-build?))))
(define* (gexp-inputs exp #:optional (references gexp-references))
"Return the input list for EXP, using REFERENCES to get its list of