summaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-04-05 15:31:55 +0200
committerLudovic Courtès <ludo@gnu.org>2015-04-05 15:40:48 +0200
commitdacd5d2ca7411251570cf486febcb2cde3ed021f (patch)
treee3d867965a5fc6e950c13e80f673abee22816638 /guix
parent1d386b2d711fee2dc618358ac51b1865e3f85433 (diff)
downloadgnu-guix-dacd5d2ca7411251570cf486febcb2cde3ed021f.tar
gnu-guix-dacd5d2ca7411251570cf486febcb2cde3ed021f.tar.gz
gremlin: Ignore non-store file names in RUNPATH and warn about them.
* guix/build/gremlin.scm (validate-needed-in-runpath)[runpath]: Add (filter absolute-file-name? ...). Emit a warning when RUNPATH file names that do not match 'store-file-name?'. Change format of error message to begin with file name. * guix/build/utils.scm (store-file-name?): New procedure.
Diffstat (limited to 'guix')
-rw-r--r--guix/build/gremlin.scm14
-rw-r--r--guix/build/utils.scm5
2 files changed, 17 insertions, 2 deletions
diff --git a/guix/build/gremlin.scm b/guix/build/gremlin.scm
index 24a7b558af..30b06034dd 100644
--- a/guix/build/gremlin.scm
+++ b/guix/build/gremlin.scm
@@ -18,6 +18,7 @@
(define-module (guix build gremlin)
#:use-module (guix elf)
+ #:use-module ((guix build utils) #:select (store-file-name?))
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-9)
@@ -255,14 +256,23 @@ exceeds total size~%"
(compose parse-elf get-bytevector-all)))
(dyninfo (elf-dynamic-info elf)))
(when dyninfo
- (let* ((runpath (elf-dynamic-info-runpath dyninfo))
+ (let* ((runpath (filter store-file-name?
+ (elf-dynamic-info-runpath dyninfo)))
+ (bogus (remove store-file-name?
+ (elf-dynamic-info-runpath dyninfo)))
(needed (remove always-found?
(elf-dynamic-info-needed dyninfo)))
(not-found (remove (cut search-path runpath <>)
needed)))
+ ;; XXX: $ORIGIN is not supported.
+ (unless (null? bogus)
+ (format (current-error-port)
+ "~a: warning: RUNPATH contains bogus entries: ~s~%"
+ file bogus))
+
(for-each (lambda (lib)
(format (current-error-port)
- "error: '~a' depends on '~a', which cannot \
+ "~a: error: depends on '~a', which cannot \
be found in RUNPATH ~s~%"
file lib runpath))
not-found)
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index 5d229b5f83..fbd5d54da5 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -32,6 +32,7 @@
#:re-export (alist-cons
alist-delete)
#:export (%store-directory
+ store-file-name?
parallel-job-count
directory-exists?
@@ -81,6 +82,10 @@
(or (getenv "NIX_STORE")
"/gnu/store"))
+(define (store-file-name? file)
+ "Return true if FILE is in the store."
+ (string-prefix? (%store-directory) file))
+
(define parallel-job-count
;; Number of processes to be passed next to GNU Make's `-j' argument.
(make-parameter