aboutsummaryrefslogtreecommitdiff
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)
downloadgnu-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.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)))