aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-10-13 23:00:06 +0200
committerLudovic Courtès <ludo@gnu.org>2014-10-13 23:34:09 +0200
commit8601d0ddcf5f0c1123d7679924560bc1b6b0e846 (patch)
treeff0dd80e731fd0f40d915d67c8f0da54b67d9bb7
parent1391dcb054f42e9ca58496db3269bee6e05f9653 (diff)
downloadpatches-8601d0ddcf5f0c1123d7679924560bc1b6b0e846.tar
patches-8601d0ddcf5f0c1123d7679924560bc1b6b0e846.tar.gz
derivations: Micro-optimize 'imported-modules'.
This reduces run time of (package-derivation s emacs) by ~5%. * guix/derivations.scm (search-path*): New procedure. (imported-modules): Use it instead of 'search-path'.
-rw-r--r--guix/derivations.scm7
1 files changed, 6 insertions, 1 deletions
diff --git a/guix/derivations.scm b/guix/derivations.scm
index 210afd2ed1..c0b69e71d6 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -893,6 +893,11 @@ system, imported, and appears under FINAL-PATH in the resulting store path."
#:guile-for-build guile
#:local-build? #t)))
+(define search-path*
+ ;; A memoizing version of 'search-path' so 'imported-modules' does not end
+ ;; up looking for the same files over and over again.
+ (memoize search-path))
+
(define* (imported-modules store modules
#:key (name "module-import")
(system (%current-system))
@@ -907,7 +912,7 @@ search path."
(let ((f (string-append
(string-join (map symbol->string m) "/")
".scm")))
- (cons f (search-path module-path f))))
+ (cons f (search-path* module-path f))))
modules)))
(imported-files store files #:name name #:system system
#:guile guile)))