~ruther/guix-local

a8afb9aed320d3d3ce026936cd5fc2bdd65b331b — Ludovic Courtès 10 years ago d7facc6
store: 'run-with-store' initializes %CURRENT-TARGET-SYSTEM to #f.

* guix/store.scm (run-with-store): Set %CURRENT-TARGET-SYSTEM to #f.
* tests/gexp.scm ("gexp->derivation vs. %current-target-system"): New test.
2 files changed, 16 insertions(+), 1 deletions(-)

M guix/store.scm
M tests/gexp.scm
M guix/store.scm => guix/store.scm +5 -1
@@ 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)

M tests/gexp.scm => tests/gexp.scm +11 -0
@@ 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 "^#<gexp \\(string-append .*#<package coreutils.*\
 \"/bin/uname\"\\) [[:xdigit:]]+>$"