ld-wrapper: Add '-rpath' for arguments such as 'libfoo.so.5.3'.

Suggested by Andreas Enge <andreas@enge.fr>
at <http://lists.gnu.org/archive/html/guix-devel/2015-02/msg00810.html>.
CMake command lines appear to refer to such file names.

* gnu/packages/ld-wrapper.scm (shared-library?): New procedure.
  (library-files-linked): Use it.
This commit is contained in:
Ludovic Courtès 2015-02-27 00:08:04 +01:00
parent 9cca706c2e
commit f307947ecc
1 changed files with 10 additions and 1 deletions

View File

@ -104,6 +104,15 @@ exec @GUILE@ -c "(load-compiled \"$0.go\") (apply $main (cdr (command-line)))" "
(< depth %max-symlink-depth) (< depth %max-symlink-depth)
(loop (readlink file) (+ 1 depth)))))))) (loop (readlink file) (+ 1 depth))))))))
(define (shared-library? file)
;; Return #t when FILE denotes a shared library.
(or (string-suffix? ".so" file)
(let ((index (string-contains file ".so.")))
;; Since we cannot use regexps during bootstrap, roll our own.
(and index
(string-every (char-set-union (char-set #\.) char-set:digit)
(string-drop file (+ index 3)))))))
(define (library-files-linked args) (define (library-files-linked args)
;; Return the file names of shared libraries explicitly linked against via ;; Return the file names of shared libraries explicitly linked against via
;; `-l' or with an absolute file name in ARGS. ;; `-l' or with an absolute file name in ARGS.
@ -125,7 +134,7 @@ exec @GUILE@ -c "(load-compiled \"$0.go\") (apply $main (cdr (command-line)))" "
(cons full library-files)) (cons full library-files))
result))) result)))
((and (string-prefix? %store-directory argument) ((and (string-prefix? %store-directory argument)
(string-suffix? ".so" argument)) ;add library (shared-library? argument)) ;add library
(cons library-path (cons library-path
(cons argument library-files))) (cons argument library-files)))
(else (else