aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-07-02 22:15:35 +0200
committerLudovic Courtès <ludo@gnu.org>2018-07-03 00:39:10 +0200
commit24420f5ffabfbdbe913a5765e5c00e17de18fb4c (patch)
tree24dd51825a54c9cee2d111683b65d87fefa84d27
parentc729901583981381ef04f3be57b28e92bd81090b (diff)
downloadguix-24420f5ffabfbdbe913a5765e5c00e17de18fb4c.tar.gz
guix-24420f5ffabfbdbe913a5765e5c00e17de18fb4c.zip
packages: Optimize 'package-transitive-supported-systems'.
This version is 13% faster than the one above when timing: (fold-packages (lambda (p x) (package-transitive-supported-systems p)) '()) * guix/packages.scm (package-transitive-supported-systems): Make 'systems' a set instead of calling 'lset-intersection' repeatedly.
-rw-r--r--guix/packages.scm19
1 files changed, 10 insertions, 9 deletions
diff --git a/guix/packages.scm b/guix/packages.scm
index c762fa7c39..cd7d3b895c 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -766,15 +766,16 @@ in INPUTS and their transitive propagated inputs."
(mlambdaq (package)
"Return the intersection of the systems supported by PACKAGE and those
supported by its dependencies."
- (fold (lambda (input systems)
- (match input
- ((label (? package? p) . _)
- (lset-intersection
- string=? systems (package-transitive-supported-systems p)))
- (_
- systems)))
- (package-supported-systems package)
- (bag-direct-inputs (package->bag package)))))
+ (set->list
+ (fold (lambda (input systems)
+ (match input
+ ((label (? package? p) . _)
+ (fold set-insert systems
+ (package-transitive-supported-systems p)))
+ (_
+ systems)))
+ (list->set (package-supported-systems package))
+ (bag-direct-inputs (package->bag package))))))
(define* (supported-package? package #:optional (system (%current-system)))
"Return true if PACKAGE is supported on SYSTEM--i.e., if PACKAGE and all its