summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2019-01-07 23:45:15 +0100
committerLudovic Courtès <ludo@gnu.org>2019-01-07 23:50:56 +0100
commitefff32452a050e2cd715c38717dd03cad5511bc0 (patch)
treeb88b27368c2d8d6847857d820063f18ae3daba93
parent49c35bbb71f80bdd7c01b4d74e08335c3ec5331c (diff)
downloadguix-efff32452a050e2cd715c38717dd03cad5511bc0.tar.gz
gexp: 'gexp->script' does not emit load-path expression when unnecessary.
This removes two elements from %LOAD-PATH and %LOAD-COMPILED-PATH of the
'guix' command and thus further reduces the number of 'stat' calls it
makes.

* guix/gexp.scm (load-path-expression): Return #f when MODULES and
EXTENSIONS are both empty.
(gexp->script): Don't emit anything when SET-LOAD-PATH is #f.
-rw-r--r--guix/gexp.scm57
1 files changed, 32 insertions, 25 deletions
diff --git a/guix/gexp.scm b/guix/gexp.scm
index febd72a904..f7c064297b 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -1315,30 +1315,33 @@ they can refer to each other."
                                #:key (extensions '()))
   "Return as a monadic value a gexp that sets '%load-path' and
 '%load-compiled-path' to point to MODULES, a list of module names.  MODULES
-are searched for in PATH."
-  (mlet %store-monad ((modules  (imported-modules modules
-                                                  #:module-path path))
-                      (compiled (compiled-modules modules
-                                                  #:extensions extensions
-                                                  #:module-path path)))
-    (return (gexp (eval-when (expand load eval)
-                    (set! %load-path
-                      (cons (ungexp modules)
-                            (append (map (lambda (extension)
-                                           (string-append extension
-                                                          "/share/guile/site/"
-                                                          (effective-version)))
-                                         '((ungexp-native-splicing extensions)))
-                                    %load-path)))
-                    (set! %load-compiled-path
-                      (cons (ungexp compiled)
-                            (append (map (lambda (extension)
-                                           (string-append extension
-                                                          "/lib/guile/"
-                                                          (effective-version)
-                                                          "/site-ccache"))
-                                         '((ungexp-native-splicing extensions)))
-                                    %load-compiled-path))))))))
+are searched for in PATH.  Return #f when MODULES and EXTENSIONS are empty."
+  (if (and (null? modules) (null? extensions))
+      (with-monad %store-monad
+        (return #f))
+      (mlet %store-monad ((modules  (imported-modules modules
+                                                      #:module-path path))
+                          (compiled (compiled-modules modules
+                                                      #:extensions extensions
+                                                      #:module-path path)))
+        (return (gexp (eval-when (expand load eval)
+                        (set! %load-path
+                          (cons (ungexp modules)
+                                (append (map (lambda (extension)
+                                               (string-append extension
+                                                              "/share/guile/site/"
+                                                              (effective-version)))
+                                             '((ungexp-native-splicing extensions)))
+                                        %load-path)))
+                        (set! %load-compiled-path
+                          (cons (ungexp compiled)
+                                (append (map (lambda (extension)
+                                               (string-append extension
+                                                              "/lib/guile/"
+                                                              (effective-version)
+                                                              "/site-ccache"))
+                                             '((ungexp-native-splicing extensions)))
+                                        %load-compiled-path)))))))))
 
 (define* (gexp->script name exp
                        #:key (guile (default-guile))
@@ -1362,7 +1365,11 @@ imported modules in its search path.  Look up EXP's modules in MODULE-PATH."
                                    "#!~a/bin/guile --no-auto-compile~%!#~%"
                                    (ungexp guile))
 
-                           (write '(ungexp set-load-path) port)
+                           (ungexp-splicing
+                            (if set-load-path
+                                (gexp ((write '(ungexp set-load-path) port)))
+                                (gexp ())))
+
                            (write '(ungexp exp) port)
                            (chmod port #o555))))
                       #:module-path module-path)))