unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
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’.




      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).