[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: buildds: Using LD_PRELOAD & LD_LIBRARY_PATH



On Mon, 06 Dec 2021 at 08:50:36 +0100, Mathieu Malaterre wrote:
> Could someone please confirm if the following command line invocation
> is acceptable in d/rules within buildds environment:
> 
> [...]
> debian/vdb_print.1: debian/vdb_print.1.in
>         LD_PRELOAD= LD_LIBRARY_PATH=./debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH) \
>           help2man --version-string=$(VER_FULL) --include=$<
> --output=$@ --no-info \
>           --no-discard-stderr ./debian/tmp/usr/bin/vdb_print

I would expect this to be OK, but I have no idea what openvdb is or what it
does, so there might be subtleties.

Using LD_PRELOAD= is something that generally works: some packages that
I maintain do this to run their build-time test suites, which can fail if
the fakeroot module was LD_PRELOADed[1].

Setting LD_LIBRARY_PATH is also something that generally works: basically
all Autotools packages with test suites do this to run their test suites.
It might be more conventional to use
$(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH) so that it's an
absolute path.

It would probably be useful to try running:

    LD_PRELOAD= LD_LIBRARY_PATH=./debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH) ./debian/tmp/usr/bin/vdb_print --version

just before this help2man invocation, so that if there is a linker error
or something, you will see it?

I also notice that the build-time tests are failing in experimental,
but their failure is ignored (except on sh4, which builds with
DEB_BUILD_OPTIONS="nobench nocheck parallel=1" so it never even tries
to run the tests). The log says:

2: log4cplus:ERROR No appenders could be found for logger (openvdb).
2: log4cplus:ERROR Please initialize the log4cplus system properly.

Could this be failing early enough that it also breaks the ability to
run `vdb_print --help` and `vdb_print --version`?

    smcv

[1] D-Bus-related packages want to know their real uid, and bubblewrap
    doesn't work with fakeroot because fakeroot assumes a fully-functional
    filesystem at all times, but bubblewrap needs to pass through a
    state where the filesystem is non-functional while it sets up its
    container.


Reply to: