aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2019-01-28 15:41:12 +0100
committerLudovic Courtès <ludo@gnu.org>2019-01-28 15:45:48 +0100
commit7d2be1277b44de9d0528d9d3015443b40cb3b104 (patch)
tree6c4f28a210edcd6b6d6d4528d5c143ad29805d5f
parent796a4491fdaa4a0a3d669457b89356f9fbfc966e (diff)
downloadguix-7d2be1277b44de9d0528d9d3015443b40cb3b104.tar
guix-7d2be1277b44de9d0528d9d3015443b40cb3b104.tar.gz
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'.
-rw-r--r--gnu/packages/guile.scm2
-rw-r--r--guix/packages.scm16
2 files changed, 13 insertions, 5 deletions
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 869fec97bd..5f5d59da47 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -391,7 +391,7 @@ GNU@tie{}Guile. Use the @code{(ice-9 readline)} module and call its
(define package-for-guile-2.0
;; A procedure that rewrites the dependency tree of the given package to use
;; 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")))
(define-public guile-for-guile-emacs
diff --git a/guix/packages.scm b/guix/packages.scm
index f191327718..8515bb7c6f 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -855,19 +855,27 @@ when CUT? returns true for a given package."
#:optional (rewrite-name identity))
"Return a procedure that, when passed a package, replaces its direct and
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
-package to replace, and the second one is the replacement.
+REPLACEMENTS is a list of package pairs or a promise thereof; the first
+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
package and returns its new name after rewrite."
(define (rewrite p)
- (match (assq-ref replacements p)
+ (match (assq-ref (if (promise? replacements)
+ (force replacements)
+ replacements)
+ p)
(#f (package
(inherit p)
(name (rewrite-name (package-name p)))))
(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 ...)
"Like (package (inherit P) OVERRIDES ...), except that the same