summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--guix/monads.scm3
-rw-r--r--tests/monads.scm14
2 files changed, 15 insertions, 2 deletions
diff --git a/guix/monads.scm b/guix/monads.scm
index 8909312a87..c714941a0c 100644
--- a/guix/monads.scm
+++ b/guix/monads.scm
@@ -379,8 +379,7 @@ permission bits are kept."
 (define* (package-file package
                        #:optional file
                        #:key
-                       (system (%current-system))
-                       (output "out") target)
+                       system (output "out") target)
   "Return as a monadic value the absolute file name of FILE within the
 OUTPUT directory of PACKAGE.  When FILE is omitted, return the name of the
 OUTPUT directory of PACKAGE.  When TARGET is true, use it as a
diff --git a/tests/monads.scm b/tests/monads.scm
index 78a014ea6a..b814b0f7c5 100644
--- a/tests/monads.scm
+++ b/tests/monads.scm
@@ -109,6 +109,20 @@
                       guile)))
     #:guile-for-build (package-derivation %store %bootstrap-guile)))
 
+(test-assert "package-file, default system"
+  ;; The default system should be the one at '>>=' time, not the one at
+  ;; invocation time.  See <http://bugs.gnu.org/18002>.
+  (run-with-store %store
+    (mlet* %store-monad
+        ((system -> (%current-system))
+         (file   (parameterize ((%current-system "foobar64-linux"))
+                   (package-file coreutils "bin/ls")))
+         (cu     (package->derivation coreutils)))
+      (return (string=? file
+                        (string-append (derivation->output-path cu)
+                                       "/bin/ls"))))
+    #:guile-for-build (package-derivation %store %bootstrap-guile)))
+
 (test-assert "package-file + package->cross-derivation"
   (run-with-store %store
     (mlet* %store-monad ((file (package-file coreutils "bin/ls"