[Qbs] Qbs and debian packaging

Wookey wookey at wookware.org
Sat Dec 23 03:18:08 CET 2017

On 2017-12-22 11:01 +0000, Wookey wrote:
> On 2017-12-21 09:40 +0100, Christian Kandeler wrote:
> And finally, running tests.
> currently my test-case has a product for the library and a
> 'dewalls-test' product for the test binary. But
>         qbs run --settings-dir /tmp --no-build -p dewalls-test \
>            modules.qbs.installRoot:$(PWD)/debian/tmp \
>            project.libDir:lib/$(DEB_HOST_MULTIARCH) \
>            profile:deb qbs-build
> only works if the package is actually installed on the build system,
> otherwise the library is not found:
> qbs run --settings-dir /tmp --no-build -p dewalls-test \
>    modules.qbs.installRoot:/home/wookey/packages/cavewhere/dewalls/debian/dewalls-1.0.0/debian/tmp \
>    project.libDir:lib/x86_64-linux-gnu \
>    profile:deb qbs-build
> Restoring build graph from disk
> Installing
> Starting target '/home/wookey/packages/cavewhere/dewalls/debian/dewalls-1.0.0/qbs-build/dewalls-test.deb.384b8e5c/dewalls-test'.
> /home/wookey/packages/cavewhere/dewalls/debian/dewalls-1.0.0/qbs-build/dewalls-test.deb.384b8e5c/dewalls-test: error while loading shared libraries: libdewalls.so.1: cannot open shared object file: No such file or directory
> debian/rules:36: recipe for target 'override_dh_auto_build' failed

It turns out that an rpath is being put in, but it is the final system
rpath: /usr/lib/x86_64-linux-gnu/ which would be good if we were
installing this binary as aprt of the package, but we are not - it's
just a test binary to be run at build-time.

So I fixed this by explicitly setting the rpath:
cpp.rpaths: ["qbs-build/install-root/usr/lib/x86_64-linux-gnu/"]
(because 'qbs run' is run with $PWD in the source dir and that's 
where rpaths have to be relative to).

A better version is:
cpp.rpaths: ["qbs-build/install-root/" + qbs.installPrefix + project.libDir]

but that still has the build dir in it, which seems ugly, so doing it relative 
to the binary seems better still:
cpp.rpaths: ["$ORIGIN/../install-root/" + qbs.installPrefix + project.libDir]

But isn't this exactly what Qbs could be doing for me?  
I suspect I am doing this wrong, and there is a better way.

In the debian build context where we have control of the profile and
build-dir in use this does work fine, but seems clunky.

Principal hats:  Linaro, Debian, Wookware, ARM
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/qbs/attachments/20171223/5d9f6703/attachment.sig>

More information about the Qbs mailing list