~ruther/guix-local

0d56a551bf5f1cf94f59cf508b3820bcc8fd8050 — Ludovic Courtès 13 years ago 5dcfdca
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.
1 files changed, 20 insertions(+), 3 deletions(-)

M guix/derivations.scm
M guix/derivations.scm => guix/derivations.scm +20 -3
@@ 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