aboutsummaryrefslogtreecommitdiff
path: root/tests/gremlin.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-04-17 13:38:12 +0200
committerLudovic Courtès <ludo@gnu.org>2018-05-07 11:21:36 +0200
commitb178fc236908ad2da86734ea8e01abd3ff8981da (patch)
tree0cb5cb7f5e243fbd49f57cc87268e38cd6fdbf8e /tests/gremlin.scm
parentad4835fe018a4a0c1955385c819fed7ec4a841d5 (diff)
downloadguix-b178fc236908ad2da86734ea8e01abd3ff8981da.tar
guix-b178fc236908ad2da86734ea8e01abd3ff8981da.tar.gz
gremlin: Add 'strip-runpath'.
* guix/build/gremlin.scm (strip-runpath): New procedure. * tests/gremlin.scm (c-compiler): New variable. ("strip-runpath"): New test.
Diffstat (limited to 'tests/gremlin.scm')
-rw-r--r--tests/gremlin.scm35
1 files changed, 34 insertions, 1 deletions
diff --git a/tests/gremlin.scm b/tests/gremlin.scm
index 2885554967..1b47d5c384 100644
--- a/tests/gremlin.scm
+++ b/tests/gremlin.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2018 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -18,12 +18,14 @@
(define-module (test-gremlin)
#:use-module (guix elf)
+ #:use-module ((guix utils) #:select (call-with-temporary-directory))
#:use-module (guix build utils)
#:use-module (guix build gremlin)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-64)
#:use-module (rnrs io ports)
+ #:use-module (ice-9 popen)
#:use-module (ice-9 match))
(define %guile-executable
@@ -37,6 +39,9 @@
(define read-elf
(compose parse-elf get-bytevector-all))
+(define c-compiler
+ (or (which "gcc") (which "cc") (which "g++")))
+
(test-begin "gremlin")
@@ -63,4 +68,32 @@
"../${ORIGIN}/bar/$ORIGIN/baz"
"ORIGIN/foo")))
+(unless c-compiler
+ (test-skip 1))
+(test-equal "strip-runpath"
+ "hello\n"
+ (call-with-temporary-directory
+ (lambda (directory)
+ (with-directory-excursion directory
+ (call-with-output-file "t.c"
+ (lambda (port)
+ (display "int main () { puts(\"hello\"); }" port)))
+ (invoke c-compiler "t.c"
+ "-Wl,-rpath=/foo" "-Wl,-rpath=/bar")
+ (let* ((dyninfo (elf-dynamic-info
+ (parse-elf (call-with-input-file "a.out"
+ get-bytevector-all))))
+ (old (elf-dynamic-info-runpath dyninfo))
+ (new (strip-runpath "a.out"))
+ (new* (strip-runpath "a.out")))
+ (validate-needed-in-runpath "a.out")
+ (and (member "/foo" old) (member "/bar" old)
+ (not (member "/foo" new))
+ (not (member "/bar" new))
+ (equal? new* new)
+ (let* ((pipe (open-input-pipe "./a.out"))
+ (str (get-string-all pipe)))
+ (close-pipe pipe)
+ str)))))))
+
(test-end "gremlin")