On Wed, Aug 19, 2020 at 02:58:07PM +0200, Andrea Bolognani wrote:
On Wed, 2020-08-19 at 13:16 +0100, Daniel P. Berrangé wrote:
> On Wed, Aug 19, 2020 at 02:10:53PM +0200, Pavel Hrdina wrote:
> > So I managed to remember what was the issue. If you run install libvirt
> > into custom directory like this:
> >
> > meson build --prefix /my/custom/dir
> > ninja -C build install
> >
> > and after that running:
> >
> > /my/custom/dir/bin/virsh
> >
> > will fail with:
> >
> > /lib64/libvirt.so.0: version `LIBVIRT_PRIVATE_6.7.0' not found
(required by ./bin/bin/virsh)
> >
> > This is what autotools did by default as well and I did not know that
> > there is an option --disable-rpath as it's not in output of
> > `./configure --help`.
I checked again and it looks like that option does indeed not exist.
The Debian package was using it, but it was just ignored I guess.
> > If we don't care about the use case of installing libvirt into custom
> > prefix and breaking it it should be OK to remove this from meson but my
> > guess is that we should not do it.
>
> So it is only broken if you failed to set LD_LIBRARY_PATH.
>
> rpath is basically hardcoding the association between the virsh
> binary and the library so that it doesn't need LD_LIBRARY_PATH.
>
> I'm ambivalent on whether that's important or not, though admittedly
> it can avoid surprises for users not used to LD_LIBRARY_PATH type
> issues.
>
> IIUC, meson sets rpath automatically for the binaries so you can
> run from the non-installed build dir. When you run install, it
> then strips the rpath for the build dir, optionally replacing it
> with the "install_rpath" value.
I tested with v6.6.0 and using
$ ../autogen.sh --prefix=/some/dir
results in RPATH being added to the various binaries, but
$ ../autogen.sh --prefix=/usr
doesn't. So I guess autotools are smart enough to only add RPATH when
you're actually installing outside of the standard library search
paths, and skip it otherwise. That's why it never showed up in distro
packages.
We could reasonably implement the same logic in Meson ourselves,
however...
> > We can add an option like it was proposed in V1 but with the following
> > changes. In meson.build we would have this:
> >
> > if get_option('rpath')
> > libvirt_rpath = libdir
> > else
> > libvirt_rpath = ''
> > endif
> >
> > and all places with install_rpath would use libvirt_rpath instead of
> > libdir directly and we would not have to have the craze if-else.
>
> Yeah that would be simpler.
... I don't think this would work: using
install_rpath: ''
will result in an empty RPATH being set, not in RPATH being missing.
So it's a different behavior than the one we want.
I specifically tried this to make sure it works and also this is from
meson code:
self.install_rpath = kwargs.get('install_rpath', '')
so yes it works.
Maybe there's a better way to do it, but right now I'm sort
of
inclined to just declare that people who install libvirt under custom
prefixes will have to take care of adding the corresponding paths to
/etc/ld.so.conf or use $LD_LIBRARY_PATH.
--
Andrea Bolognani / Red Hat / Virtualization