summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-11-30 23:16:57 +0100
committerLudovic Courtès <ludo@gnu.org>2020-12-01 00:10:48 +0100
commit07a33b1d21e240781072352f93206cfdc765f907 (patch)
treef338a3bf99cb8dac98dbfe23ceeb6c46e4fc3fed
parent56fc14577e6750928091b525a235fa428346d598 (diff)
services: profile: Create manifest at monadic-bind time.
Fixes <https://bugs.gnu.org/44952>. Reported by Mathieu Othacehe <othacehe@gnu.org>. * gnu/services.scm (packages->profile-entry): Change 'with-monad' to 'mlet' with one binding.
-rw-r--r--gnu/services.scm8
1 files changed, 7 insertions, 1 deletions
diff --git a/gnu/services.scm b/gnu/services.scm
index 4b30399adc..13259dfaee 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -788,7 +788,13 @@ executables, making them setuid-root.")))
(define (packages->profile-entry packages)
"Return a system entry for the profile containing PACKAGES."
- (with-monad %store-monad
+ ;; XXX: 'mlet' is needed here for one reason: to get the proper
+ ;; '%current-target' and '%current-target-system' bindings when
+ ;; 'packages->manifest' is called, and thus when the 'package-inputs'
+ ;; etc. procedures are called on PACKAGES. That way, conditionals in those
+ ;; inputs see the "correct" value of these two parameters. See
+ ;; <https://issues.guix.gnu.org/44952>.
+ (mlet %store-monad ((_ (current-target-system)))
(return `(("profile" ,(profile
(content (packages->manifest
(delete-duplicates packages eq?)))))))))