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.
This commit is contained in:
Ludovic Courtès 2020-11-30 23:16:57 +01:00
parent 56fc14577e
commit 07a33b1d21
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 7 additions and 1 deletions

View File

@ -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?)))))))))