summaryrefslogtreecommitdiff
path: root/guix/gexp.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix/gexp.scm')
-rw-r--r--guix/gexp.scm8
1 files changed, 6 insertions, 2 deletions
diff --git a/guix/gexp.scm b/guix/gexp.scm
index 10056e5a1f..0b5c43e2b8 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -157,7 +157,7 @@ cross-compiling.)"
(recursive? local-file-recursive?)) ;Boolean
(define* (local-file file #:optional (name (basename file))
- #:key (recursive? #t))
+ #:key recursive?)
"Return an object representing local file FILE to add to the store; this
object can be used in a gexp. FILE will be added to the store under NAME--by
default the base name of FILE.
@@ -167,7 +167,11 @@ designates a flat file and RECURSIVE? is true, its contents are added, and its
permission bits are kept.
This is the declarative counterpart of the 'interned-file' monadic procedure."
- (%local-file file name recursive?))
+ ;; Canonicalize FILE so that if it's a symlink, it is resolved. Failing to
+ ;; do that, when RECURSIVE? is #t, we could end up creating a dangling
+ ;; symlink in the store, and when RECURSIVE? is #f 'add-to-store' would just
+ ;; throw an error, both of which are inconvenient.
+ (%local-file (canonicalize-path file) name recursive?))
(define-gexp-compiler (local-file-compiler (file local-file?) system target)
;; "Compile" FILE by adding it to the store.