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.master
parent
5dcfdcaa79
commit
0d56a551bf
|
@ -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
|
||||
|
|
Reference in New Issue