summaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-09-07 22:37:14 +0200
committerLudovic Courtès <ludo@gnu.org>2015-10-10 22:46:14 +0200
commit919370291f4f9cc93878eea7db11013949ee8473 (patch)
treecd86c3cf59adc2d07e398ad6779a62de0c09d7f9 /guix
parenta72ccbc25125d0d14cabdc1b0f824f27bb64478b (diff)
gexp: Add 'computed-file'.
* guix/gexp.scm (<computed-file>): New record type. (computed-file, computed-file-compiler): New procedures. * tests/gexp.scm ("lower-object, computed-file"): New test. * doc/guix.texi (G-Expressions): Document 'computed-file'.
Diffstat (limited to 'guix')
-rw-r--r--guix/gexp.scm33
1 files changed, 33 insertions, 0 deletions
diff --git a/guix/gexp.scm b/guix/gexp.scm
index de49fef088..ebb147d7db 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -43,6 +43,13 @@
plain-file-name
plain-file-content
+ computed-file
+ computed-file?
+ computed-file-name
+ computed-file-gexp
+ computed-file-modules
+ computed-file-options
+
gexp->derivation
gexp->file
gexp->script
@@ -214,6 +221,32 @@ This is the declarative counterpart of 'text-file'."
(($ <plain-file> name content references)
(text-file name content references))))
+(define-record-type <computed-file>
+ (%computed-file name gexp modules options)
+ computed-file?
+ (name computed-file-name) ;string
+ (gexp computed-file-gexp) ;gexp
+ (modules computed-file-modules) ;list of module names
+ (options computed-file-options)) ;list of arguments
+
+(define* (computed-file name gexp
+ #:key (modules '()) (options '(#:local-build? #t)))
+ "Return an object representing the store item NAME, a file or directory
+computed by GEXP. MODULES specifies the set of modules visible in the
+execution context of GEXP. OPTIONS is a list of additional arguments to pass
+to 'gexp->derivation'.
+
+This is the declarative counterpart of 'gexp->derivation'."
+ (%computed-file name gexp modules options))
+
+(define-gexp-compiler (computed-file-compiler (file computed-file?)
+ system target)
+ ;; Compile FILE by returning a derivation whose build expression is its
+ ;; gexp.
+ (match file
+ (($ <computed-file> name gexp modules options)
+ (apply gexp->derivation name gexp #:modules modules options))))
+
;;;
;;; Inputs & outputs.