diff options
author | Ludovic Courtès <ludo@gnu.org> | 2019-01-07 23:45:15 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2019-01-07 23:50:56 +0100 |
commit | efff32452a050e2cd715c38717dd03cad5511bc0 (patch) | |
tree | b88b27368c2d8d6847857d820063f18ae3daba93 | |
parent | 49c35bbb71f80bdd7c01b4d74e08335c3ec5331c (diff) | |
download | gnu-guix-efff32452a050e2cd715c38717dd03cad5511bc0.tar gnu-guix-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.scm | 57 |
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))) |