@@ 104,6 104,7 @@
lowered-gexp-load-path
lowered-gexp-load-compiled-path
+ with-build-variables
gexp->derivation
gexp->file
gexp->script
@@ 1786,6 1787,30 @@ are searched for in PATH. Return #f when MODULES and EXTENSIONS are empty."
extensions))
%load-compiled-path)))))))))
+(define (with-build-variables inputs outputs body)
+ "Return a gexp that surrounds BODY with a definition of the legacy
+'%build-inputs', '%outputs', and '%output' variables based on INPUTS, a list
+of name/gexp-input tuples, and OUTPUTS, a list of strings."
+
+ ;; These two variables are defined for backward compatibility. They are
+ ;; used by package expressions. These must be top-level defines so that
+ ;; 'use-modules' form in BODY that are required for macro expansion work as
+ ;; expected.
+ (gexp (begin
+ (define %build-inputs
+ (map (lambda (tuple)
+ (apply cons tuple))
+ '(ungexp inputs)))
+ (define %outputs
+ (list (ungexp-splicing
+ (map (lambda (name)
+ (gexp (cons (ungexp name)
+ (ungexp output name))))
+ outputs))))
+ (define %output
+ (assoc-ref %outputs "out"))
+ (ungexp body))))
+
(define* (gexp->script name exp
#:key (guile (default-guile))
(module-path %load-path)