summaryrefslogtreecommitdiff
path: root/guix/gexp.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-09-09 09:44:43 +0200
committerLudovic Courtès <ludo@gnu.org>2015-10-10 22:46:14 +0200
commitb751cde36b508690d5f893360f964d3098549131 (patch)
tree2a0d68122bb43b245706388fb2e5e8f00063e7da /guix/gexp.scm
parent15a01c72209b2d43239fe7516a22e531b7fcb85f (diff)
gexp: Add 'mixed-text-file'.
* guix/gexp.scm (mixed-text-file): New procedure. * tests/gexp.scm ("mixed-text-file"): New test. * doc/guix.texi (G-Expressions): Document it.
Diffstat (limited to 'guix/gexp.scm')
-rw-r--r--guix/gexp.scm16
1 files changed, 16 insertions, 0 deletions
diff --git a/guix/gexp.scm b/guix/gexp.scm
index 10acf2ba1b..f44df9c6ea 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -61,6 +61,7 @@
gexp->file
gexp->script
text-file*
+ mixed-text-file
imported-files
imported-modules
compiled-modules
@@ -969,6 +970,21 @@ resulting store file holds references to all these."
(gexp->derivation name builder))
+(define* (mixed-text-file name #:rest text)
+ "Return an object representing store file NAME containing TEXT. TEXT is a
+sequence of strings and file-like objects, as in:
+
+ (mixed-text-file \"profile\"
+ \"export PATH=\" coreutils \"/bin:\" grep \"/bin\")
+
+This is the declarative counterpart of 'text-file*'."
+ (define build
+ (gexp (call-with-output-file (ungexp output "out")
+ (lambda (port)
+ (display (string-append (ungexp-splicing text)) port)))))
+
+ (computed-file name build))
+
;;;
;;; Syntactic sugar.