summaryrefslogtreecommitdiff
path: root/guix/gexp.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-07-04 23:54:18 +0200
committerLudovic Courtès <ludo@gnu.org>2016-07-12 22:47:08 +0200
commit2b4185792d3ec9b43a5c1bb204b6846e5ac0f14a (patch)
treea9bea1a6445923b78b4d1b917f377409a9b0449e /guix/gexp.scm
parentdd8d1a30468dae1412762e54801592f6b475f88e (diff)
downloadgnu-guix-2b4185792d3ec9b43a5c1bb204b6846e5ac0f14a.tar
gnu-guix-2b4185792d3ec9b43a5c1bb204b6846e5ac0f14a.tar.gz
gexp: 'gexp->file' emits code to set '%load-path'.
* guix/gexp.scm (gexp->file): Add #:set-load-path? parameter and honor it. * gnu/system.scm (operating-system-parameters-file): Pass #:set-load-path? #f. * doc/guix.texi (G-Expressions): Adjust accordingly.
Diffstat (limited to 'guix/gexp.scm')
-rw-r--r--guix/gexp.scm32
1 files changed, 23 insertions, 9 deletions
diff --git a/guix/gexp.scm b/guix/gexp.scm
index e76a281bba..60f8905ea4 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -1026,15 +1026,29 @@ its search path."
(write '(ungexp exp) port)
(chmod port #o555)))))))
-(define (gexp->file name exp)
- "Return a derivation that builds a file NAME containing EXP."
- (gexp->derivation name
- (gexp
- (call-with-output-file (ungexp output)
- (lambda (port)
- (write '(ungexp exp) port))))
- #:local-build? #t
- #:substitutable? #f))
+(define* (gexp->file name exp #:key (set-load-path? #t))
+ "Return a derivation that builds a file NAME containing EXP. When
+SET-LOAD-PATH? is true, emit code in the resulting file to set '%load-path'
+and '%load-compiled-path' to honor EXP's imported modules."
+ (match (if set-load-path? (gexp-modules exp) '())
+ (() ;zero modules
+ (gexp->derivation name
+ (gexp
+ (call-with-output-file (ungexp output)
+ (lambda (port)
+ (write '(ungexp exp) port))))
+ #:local-build? #t
+ #:substitutable? #f))
+ ((modules ...)
+ (mlet %store-monad ((set-load-path (load-path-expression modules)))
+ (gexp->derivation name
+ (gexp
+ (call-with-output-file (ungexp output)
+ (lambda (port)
+ (write '(ungexp set-load-path) port)
+ (write '(ungexp exp) port))))
+ #:local-build? #t
+ #:substitutable? #f)))))
(define* (text-file* name #:rest text)
"Return as a monadic value a derivation that builds a text file containing