From 0d56a551bf5f1cf94f59cf508b3820bcc8fd8050 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Sun, 17 Jun 2012 16:43:40 +0200
Subject: [PATCH] build-expression->derivation: Move module forms at the
 top-level.

* guix/derivations.scm (build-expression->derivation)[module-form?]: New
  procedure.
  [prologue]: Add any form of EXP that matches MODULE-FORM?.
  [builder]: Remove any MODULE-FORM? from EXP.
---
 guix/derivations.scm | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/guix/derivations.scm b/guix/derivations.scm
index 24ee06c3996..b4f27bf74d6 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -453,7 +453,19 @@ (define guile
     (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 @@ (define %build-inputs
                                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
-- 
GitLab