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.
This commit is contained in:
Ludovic Courtès 2012-06-17 16:43:40 +02:00
parent 5dcfdcaa79
commit 0d56a551bf
1 changed files with 20 additions and 3 deletions

View File

@ -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