diff --git a/guix/store.scm b/guix/store.scm index 7b13334952..39e5faf6c8 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -996,8 +996,12 @@ permission bits are kept." (system (%current-system))) "Run MVAL, a monadic value in the store monad, in STORE, an open store connection, and return the result." + ;; Initialize the dynamic bindings here to avoid bad surprises. The + ;; difficulty lies in the fact that dynamic bindings are resolved at + ;; bind-time and not at call time, which can be disconcerting. (parameterize ((%guile-for-build guile-for-build) - (%current-system system)) + (%current-system system) + (%current-target-system #f)) (call-with-values (lambda () (run-with-state mval store)) (lambda (result store) diff --git a/tests/gexp.scm b/tests/gexp.scm index 32031663f5..5c9a4fc031 100644 --- a/tests/gexp.scm +++ b/tests/gexp.scm @@ -636,6 +636,17 @@ file))))) #:guile-for-build (package-derivation %store %bootstrap-guile)))) +(test-assert "gexp->derivation vs. %current-target-system" + (let ((mval (gexp->derivation "foo" + #~(begin + (mkdir #$output) + (foo #+gnu-make)) + #:target #f))) + ;; The value of %CURRENT-TARGET-SYSTEM at bind-time should have no + ;; influence. + (parameterize ((%current-target-system "fooooo")) + (derivation? (run-with-store %store mval))))) + (test-assert "printer" (string-match "^#$"