packages: 'package-input-rewriting' can take a promise.

* guix/packages.scm (package-input-rewriting): Allow REPLACEMENTS to be
a promise.
* gnu/packages/guile.scm (package-for-guile-2.0): Delay the first
argument to 'package-input-rewriting'.
This commit is contained in:
Ludovic Courtès 2019-01-28 15:41:12 +01:00
parent 796a4491fd
commit 7d2be1277b
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 13 additions and 5 deletions

View File

@ -391,7 +391,7 @@ GNU@tie{}Guile. Use the @code{(ice-9 readline)} module and call its
(define package-for-guile-2.0 (define package-for-guile-2.0
;; A procedure that rewrites the dependency tree of the given package to use ;; A procedure that rewrites the dependency tree of the given package to use
;; GUILE-2.0 instead of GUILE-2.2. ;; GUILE-2.0 instead of GUILE-2.2.
(package-input-rewriting `((,guile-2.2 . ,guile-2.0)) (package-input-rewriting (delay `((,guile-2.2 . ,guile-2.0)))
(guile-variant-package-name "guile2.0"))) (guile-variant-package-name "guile2.0")))
(define-public guile-for-guile-emacs (define-public guile-for-guile-emacs

View File

@ -855,19 +855,27 @@ when CUT? returns true for a given package."
#:optional (rewrite-name identity)) #:optional (rewrite-name identity))
"Return a procedure that, when passed a package, replaces its direct and "Return a procedure that, when passed a package, replaces its direct and
indirect dependencies (but not its implicit inputs) according to REPLACEMENTS. indirect dependencies (but not its implicit inputs) according to REPLACEMENTS.
REPLACEMENTS is a list of package pairs; the first element of each pair is the REPLACEMENTS is a list of package pairs or a promise thereof; the first
package to replace, and the second one is the replacement. element of each pair is the package to replace, and the second one is the
replacement.
Optionally, REWRITE-NAME is a one-argument procedure that takes the name of a Optionally, REWRITE-NAME is a one-argument procedure that takes the name of a
package and returns its new name after rewrite." package and returns its new name after rewrite."
(define (rewrite p) (define (rewrite p)
(match (assq-ref replacements p) (match (assq-ref (if (promise? replacements)
(force replacements)
replacements)
p)
(#f (package (#f (package
(inherit p) (inherit p)
(name (rewrite-name (package-name p))))) (name (rewrite-name (package-name p)))))
(new new))) (new new)))
(package-mapping rewrite (cut assq <> replacements))) (package-mapping rewrite
(lambda (package)
(assq package (if (promise? replacements)
(force replacements)
replacements)))))
(define-syntax-rule (package/inherit p overrides ...) (define-syntax-rule (package/inherit p overrides ...)
"Like (package (inherit P) OVERRIDES ...), except that the same "Like (package (inherit P) OVERRIDES ...), except that the same