From: "Ludovic Courtès" <ludo@gnu.org>
To: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Cc: 73979@debbugs.gnu.org
Subject: bug#73979: validate-runpath phases fails when binaries linked to package's own libraries
Date: Sun, 10 Nov 2024 12:47:19 +0100 [thread overview]
Message-ID: <87jzdbwbso.fsf@gnu.org> (raw)
In-Reply-To: <87y12excns.fsf@gmail.com> (Maxim Cournoyer's message of "Thu, 24 Oct 2024 15:01:11 +0900")
Hi,
Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:
> There's a common pattern in packages where the validate-runpath phases
> fail, which is when a binary is linked to libraries provided by the same
> package. In this case, our ld-wrapper script appears to not bake the
> required runpath, which then fails the validate-runpath phase.
>
> When this happens, the common workaround is adding link directives such
> as (string-append "-Wl,-rpath=" #$output "/lib/subdir") to LDFLAGS (see
> for example the 'dmraid' package definition).
I believe this is the exception, not the rule, and I see that as a bug
in the build system of those packages. (As a counterexample, any
package built with Automake/Libtool is fine.)
> g++ mainaccc.o ../../linux/linuxspec.o ac3dload.o ac3dgroup.o -L/tmp/guix-build-torcs-1.3.7.drv-0/torcs-1.3.7/export/lib -lopenal -lalut -lvorbisfile -L/usr/lib -ltgf -lplibssg -lplibsg -lplibul -ltxml -lplibjs -lplibssgaux -lplibssg -lplibsm -lplibsl -lplibsg -lplibul -lglut -lGLU -lGL -lpng -lz -ldl -lXrandr -lXrender -lXxf86vm -lXmu -lXi -lXt -lSM -lICE -lXext -lX11 -lm -o accc-bin
Here it’s missing “-LOUTPUT/lib” or similar, which is why ‘ld-wrapper’
does not add ‘-Wl,-rpath’. (Libtool, and I believe some other build
systems as well, relink binaries upon installation.)
Note that probably “-L/usr/lib” is meant as “-LOUTPUT/lib”.
> So we see that ld-wrapper saw the accc-bin binary being linked against
> the package's own
> /tmp/guix-build-torcs-1.3.7.drv-0/torcs-1.3.7/export/lib/libtgf.so, but
> this is later dismissed for "not being in the store", by this code in
> gnu/packages/ld-wrapper.in:
Well, yeah.
> One idea could be to allow creating rpaths to %BUILD-DIRECTORY prefixed
> libraries, and have these entries refined in a phase that would run
> after the package is installed, before the validate-runpath phase runs.
> It could be called e.g. 'sanitize-runpath' and proceed along those
> lines:
>
> Scan for RUNPATH entries being prefixed by %BUILD-DIRECTORY; attempt to
> have them rewritten to libraries (.so) found under the package's own
> libdir library prefix (at any depth), including a potential "lib"
> output. In case it couldn't, it would error.
>
> Does that sound feasible?
It might be feasible, but I think it’s the wrong approach. The problem
here is in the build system itself; Guix is “not at fault”, so to speak.
Nevertheless, from a practical viewpoint, whether or not Guix is at
fault is largely irrelevant. So the question becomes: how widespread is
this issue? If it’s widespread, can it be solved at a (guix
build-system …) level? (For instance, I think ‘cmake-build-system’ and
‘meson-build-system’ do the right things in that regard.)
If it’s a per-package issue, which seems to be the case given what you
describe, then I would fix it locally in this package, for instance by
passing ‘-Wl,-rpath=$ORIGIN/../lib’ or whatever is convenient.
HTH!
Ludo’.
prev parent reply other threads:[~2024-11-10 13:06 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-24 6:01 bug#73979: validate-runpath phases fails when binaries linked to package's own libraries Maxim Cournoyer
2024-11-10 11:47 ` Ludovic Courtès [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87jzdbwbso.fsf@gnu.org \
--to=ludo@gnu.org \
--cc=73979@debbugs.gnu.org \
--cc=maxim.cournoyer@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).