summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guix/derivations.scm23
1 files changed, 20 insertions, 3 deletions
diff --git a/guix/derivations.scm b/guix/derivations.scm
index 24ee06c399..b4f27bf74d 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -453,7 +453,19 @@ considered to have failed."
(string-append (derivation-path->output-path (%guile-for-build))
"/bin/guile"))
+ (define module-form?
+ (match-lambda
+ (((or 'define-module 'use-modules) _ ...) #t)
+ (_ #f)))
+
(let* ((prologue `(begin
+ ,@(match exp
+ ((_ ...)
+ ;; Module forms must appear at the top-level so
+ ;; that any macros they export can be expanded.
+ (filter module-form? exp))
+ (_ `(,exp)))
+
(define %output (getenv "out"))
(define %outputs
(map (lambda (o)
@@ -473,9 +485,14 @@ considered to have failed."
inputs))))
(builder (add-text-to-store store
(string-append name "-guile-builder")
- (string-append (object->string prologue)
- (object->string
- `(exit ,exp)))
+ (string-append
+ (object->string prologue)
+ (object->string
+ `(exit
+ ,(match exp
+ ((_ ...)
+ (remove module-form? exp))
+ (_ `(,exp))))))
(map second inputs)))
(mod-drv (if (null? modules)
#f