summary refs log tree commit diff
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)
downloadguix-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)))