diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm index b4a498bee76ccffac668982fe65c415dc63e5a1d..1a1ec1da12a12b97547424f16c2ac61e5c2b8293 100644 --- a/guix/build-system/gnu.scm +++ b/guix/build-system/gnu.scm @@ -38,13 +38,18 @@ (define-module (guix build-system gnu) (define* (package-with-explicit-inputs p boot-inputs #:optional - (loc (current-source-location))) - "Rewrite P, which is assumed to use GNU-BUILD-SYSTEM, to take BOOT-INPUTS -as explicit inputs instead of the implicit default, and return it." + (loc (current-source-location)) + #:key guile) + "Rewrite P, which is assumed to use GNU-BUILD-SYSTEM, to take +BOOT-INPUTS as explicit inputs instead of the implicit default, and +return it. Use GUILE to run the builder, or the distro's final Guile +when GUILE is #f." (define rewritten-input (match-lambda ((name (? package? p) sub-drv ...) - (cons* name (package-with-explicit-inputs p boot-inputs) sub-drv)) + (cons* name + (package-with-explicit-inputs p boot-inputs #:guile guile) + sub-drv)) (x x))) (define boot-input-names @@ -59,8 +64,10 @@ (define (filtered-inputs inputs) (let ((args (package-arguments p))) (if (procedure? args) (lambda (system) - `(#:implicit-inputs? #f ,@(args system))) - `(#:implicit-inputs? #f ,@args)))) + `(#:guile ,guile + #:implicit-inputs? #f ,@(args system))) + `(#:guile ,guile + #:implicit-inputs? #f ,@args)))) (native-inputs (map rewritten-input (filtered-inputs (package-native-inputs p)))) (propagated-inputs (map rewritten-input @@ -97,7 +104,8 @@ (define standard-inputs inputs))))))) (define* (gnu-build store name source inputs - #:key (outputs '("out")) (configure-flags ''()) + #:key (guile #f) + (outputs '("out")) (configure-flags ''()) (make-flags ''()) (patches ''()) (patch-flags ''("--batch" "-p1")) (out-of-source? #f) @@ -115,7 +123,9 @@ (define* (gnu-build store name source inputs (modules '((guix build gnu-build-system) (guix build utils)))) "Return a derivation called NAME that builds from tarball SOURCE, with -input derivation INPUTS, using the usual procedure of the GNU Build System." +input derivation INPUTS, using the usual procedure of the GNU Build +System. The builder is run with GUILE, or with the distro's final Guile +package if GUILE is #f or omitted." (define builder `(begin (use-modules ,@modules) @@ -139,6 +149,17 @@ (define builder #:strip-flags ,strip-flags #:strip-directories ,strip-directories))) + (define guile-for-build + (match guile + (#f ; the default + (let* ((distro (resolve-interface '(distro packages base))) + (guile (module-ref distro 'guile-final))) + (package-derivation store guile system))) + ((? package?) + (package-derivation store guile system)) + ((? derivation-path?) + guile))) + (build-expression->derivation store name system builder `(("source" ,source) @@ -148,7 +169,8 @@ (define builder (standard-inputs system)) '())) #:outputs outputs - #:modules modules)) + #:modules modules + #:guile-for-build guile-for-build)) (define gnu-build-system (build-system (name 'gnu) diff --git a/guix/build-system/trivial.scm b/guix/build-system/trivial.scm index 1134ae988c1f3e501364892c73d9d7750623e973..8759cb3f92297f8e0345e3cab42a5cb62714f7ed 100644 --- a/guix/build-system/trivial.scm +++ b/guix/build-system/trivial.scm @@ -20,16 +20,30 @@ (define-module (guix build-system trivial) #:use-module (guix store) #:use-module (guix utils) #:use-module (guix derivations) + #:use-module (guix packages) #:use-module (guix build-system) + #:use-module (ice-9 match) #:export (trivial-build-system)) (define* (trivial-build store name source inputs - #:key outputs system builder (modules '())) + #:key outputs guile system builder (modules '())) "Run build expression BUILDER, an expression, for SYSTEM. SOURCE is ignored." + (define guile-for-build + (match guile + (#f ; the default + (let* ((distro (resolve-interface '(distro packages base))) + (guile (module-ref distro 'guile-final))) + (package-derivation store guile system))) + ((? package?) + (package-derivation store guile system)) + ((? derivation-path?) + guile))) + (build-expression->derivation store name system builder inputs #:outputs outputs - #:modules modules)) + #:modules modules + #:guile-for-build guile-for-build)) (define trivial-build-system (build-system (name 'trivial)