From 47e74d6e9d7d3a5f72a2b67f1916a719c61c86f8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Mon, 27 May 2013 22:23:21 +0200
Subject: [PATCH] gnu: cross-binutils: Build with `--with-sysroot'.

This fixes resolution of DT_NEEDED entries in cross-built libraries.
For instance, if ltdl.so needs libdl.so and has it in its RUNPATH, then
libdl.so is searched for in the right place.

* gnu/packages/cross-base.scm (cross-binutils): Pass
  `--with-sysroot=/no-such-path'.
---
 gnu/packages/cross-base.scm | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 22878a20b07..5c46d00b201 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -44,8 +44,21 @@ (define (cross p target)
         `(cons ,(string-append "--target=" target)
                ,flags))))))
 
-(define cross-binutils
-  (cut cross binutils <>))
+(define (cross-binutils target)
+  "Return a cross-Binutils for TARGET."
+  (let ((binutils (package (inherit binutils)
+                    (arguments
+                     (substitute-keyword-arguments (package-arguments
+                                                    binutils)
+                       ((#:configure-flags flags)
+                        ;; Build with `--with-sysroot' so that ld honors
+                        ;; DT_RUNPATH entries when searching for a needed
+                        ;; library.  This works because as a side effect
+                        ;; `genscripts.sh' sets `USE_LIBPATH=yes', which tells
+                        ;; elf32.em to use DT_RUNPATH in its search list.
+                        `(cons "--with-sysroot=/no-such-path"
+                               ,flags)))))))
+    (cross binutils target)))
 
 (define* (cross-gcc target
                     #:optional (xbinutils (cross-binutils target)) libc)
-- 
GitLab