gexp: Resolve the default system at '>>=' time.

Partly fixes <http://bugs.gnu.org/18002>.
Reported by David Thompson <dthompson2@worcester.edu>.

* guix/gexp.scm (gexp->derivation): Change #:system to default #f.
  Use (%current-system) from within the 'mlet*'.
* tests/gexp.scm ("gexp->derivation, default system"): New test.
This commit is contained in:
Ludovic Courtès 2014-07-12 22:11:12 +02:00
parent f62435e286
commit 5d0984595c
2 changed files with 13 additions and 1 deletions

View file

@ -94,7 +94,7 @@ (define (lower-inputs inputs)
(define* (gexp->derivation name exp
#:key
(system (%current-system))
system
hash hash-algo recursive?
(env-vars '())
(modules '())
@ -114,6 +114,7 @@ (define %modules modules)
(define outputs (gexp-outputs exp))
(mlet* %store-monad ((inputs (lower-inputs (gexp-inputs exp)))
(system -> (or system (%current-system)))
(sexp (gexp->sexp exp))
(builder (text-file (string-append name "-builder")
(object->string sexp)))

View file

@ -211,6 +211,17 @@ (define (match-input thing)
(return (string=? (readlink (string-append out "/foo"))
guile))))
(test-assertm "gexp->derivation, default system"
;; The default system should be the one at '>>=' time, not the one at
;; invocation time. See <http://bugs.gnu.org/18002>.
(let ((system (%current-system))
(mdrv (parameterize ((%current-system "foobar64-linux"))
(gexp->derivation "foo"
(gexp
(mkdir (ungexp output)))))))
(mlet %store-monad ((drv mdrv))
(return (string=? system (derivation-system drv))))))
(define shebang
(string-append (derivation->output-path guile-for-build)
"/bin/guile --no-auto-compile"))