From dacd5d2ca7411251570cf486febcb2cde3ed021f Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sun, 5 Apr 2015 15:31:55 +0200 Subject: 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. --- guix/build/gremlin.scm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'guix/build/gremlin.scm') 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) -- cgit v1.2.3