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.
This commit is contained in:
Ludovic Courtès 2015-04-05 15:31:55 +02:00
parent 1d386b2d71
commit dacd5d2ca7
2 changed files with 17 additions and 2 deletions

View File

@ -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)

View File

@ -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