1*1c60b9acSAndroid Build Coastguard Worker# DBUS Role Support 2*1c60b9acSAndroid Build Coastguard Worker 3*1c60b9acSAndroid Build Coastguard Worker## DBUS-related distro packages 4*1c60b9acSAndroid Build Coastguard Worker 5*1c60b9acSAndroid Build Coastguard WorkerFedora: dbus-devel 6*1c60b9acSAndroid Build Coastguard WorkerDebian / Ubuntu: libdbus-1-dev 7*1c60b9acSAndroid Build Coastguard Worker 8*1c60b9acSAndroid Build Coastguard Worker## Enabling for build at cmake 9*1c60b9acSAndroid Build Coastguard Worker 10*1c60b9acSAndroid Build Coastguard WorkerFedora example: 11*1c60b9acSAndroid Build Coastguard Worker``` 12*1c60b9acSAndroid Build Coastguard Worker$ cmake .. -DLWS_ROLE_DBUS=1 -DLWS_DBUS_INCLUDE2="/usr/lib64/dbus-1.0/include" 13*1c60b9acSAndroid Build Coastguard Worker``` 14*1c60b9acSAndroid Build Coastguard Worker 15*1c60b9acSAndroid Build Coastguard WorkerUbuntu example: 16*1c60b9acSAndroid Build Coastguard Worker``` 17*1c60b9acSAndroid Build Coastguard Worker$ cmake .. -DLWS_ROLE_DBUS=1 -DLWS_DBUS_INCLUDE2="/usr/lib/x86_64-linux-gnu/dbus-1.0/include" 18*1c60b9acSAndroid Build Coastguard Worker``` 19*1c60b9acSAndroid Build Coastguard Worker 20*1c60b9acSAndroid Build Coastguard WorkerDbus requires two include paths, which you can force by setting `LWS_DBUS_INCLUDE1` 21*1c60b9acSAndroid Build Coastguard Workerand `LWS_DBUS_INCLUDE2`. Although INCLUDE1 is usually guessable, both can be 22*1c60b9acSAndroid Build Coastguard Workerforced to allow cross-build. 23*1c60b9acSAndroid Build Coastguard Worker 24*1c60b9acSAndroid Build Coastguard WorkerIf these are not forced, then lws cmake will try to check some popular places, 25*1c60b9acSAndroid Build Coastguard Workerfor `LWS_DBUS_INCLUDE1`, on both Fedora and Debian / Ubuntu, this is 26*1c60b9acSAndroid Build Coastguard Worker`/usr/include/dbus-1.0`... if the directory exists, it is used. 27*1c60b9acSAndroid Build Coastguard Worker 28*1c60b9acSAndroid Build Coastguard WorkerFor `LWS_DBUS_INCLUDE2`, it is the arch-specific dbus header which may be 29*1c60b9acSAndroid Build Coastguard Workerpackaged separately than the main dbus headers. On Fedora, this is in 30*1c60b9acSAndroid Build Coastguard Worker`/usr/lib[64]/dbus-1.0/include`... if not given externally, lws cmake will 31*1c60b9acSAndroid Build Coastguard Workertry `/usr/lib64/dbus-1.0/include`. On Debian / Ubuntu, the package installs 32*1c60b9acSAndroid Build Coastguard Workerit in an arch-specific dir like `/usr/lib/x86_64-linux-gnu/dbus-1.0/include`, 33*1c60b9acSAndroid Build Coastguard Workeryou should force the path. 34*1c60b9acSAndroid Build Coastguard Worker 35*1c60b9acSAndroid Build Coastguard WorkerThe library path is usually \[lib\] "dbus-1", but this can also be forced if 36*1c60b9acSAndroid Build Coastguard Workeryou want to build cross or use a special build, via `LWS_DBUS_LIB`. 37*1c60b9acSAndroid Build Coastguard Worker 38*1c60b9acSAndroid Build Coastguard Worker## Building against local dbus build 39*1c60b9acSAndroid Build Coastguard Worker 40*1c60b9acSAndroid Build Coastguard WorkerIf you built your own local dbus and installed it in /usr/local, then 41*1c60b9acSAndroid Build Coastguard Workerthis is the incantation to direct lws to use the local version of dbus: 42*1c60b9acSAndroid Build Coastguard Worker 43*1c60b9acSAndroid Build Coastguard Worker``` 44*1c60b9acSAndroid Build Coastguard Workercmake .. -DLWS_ROLE_DBUS=1 -DLWS_DBUS_INCLUDE1="/usr/local/include/dbus-1.0" -DLWS_DBUS_INCLUDE2="/usr/local/lib/dbus-1.0/include" -DLWS_DBUS_LIB="/usr/local/lib/libdbus-1.so" 45*1c60b9acSAndroid Build Coastguard Worker``` 46*1c60b9acSAndroid Build Coastguard Worker 47*1c60b9acSAndroid Build Coastguard WorkerYou'll also need to give the loader a helping hand to do what you want if 48*1c60b9acSAndroid Build Coastguard Workerthere's a perfectly good dbus lib already in `/usr/lib[64]` using `LD_PRELOAD` 49*1c60b9acSAndroid Build Coastguard Workerlike this 50*1c60b9acSAndroid Build Coastguard Worker 51*1c60b9acSAndroid Build Coastguard Worker``` 52*1c60b9acSAndroid Build Coastguard WorkerLD_PRELOAD=/usr/local/lib/libdbus-1.so.3.24.0 myapp 53*1c60b9acSAndroid Build Coastguard Worker``` 54*1c60b9acSAndroid Build Coastguard Worker 55*1c60b9acSAndroid Build Coastguard Worker## Lws dbus api exports 56*1c60b9acSAndroid Build Coastguard Worker 57*1c60b9acSAndroid Build Coastguard WorkerBecause of the irregular situation with libdbus includes, if lws exports the 58*1c60b9acSAndroid Build Coastguard Workerdbus helpers, which use dbus types, as usual from `#include <libwebsockets.h>` 59*1c60b9acSAndroid Build Coastguard Workerthen if lws was compiled with dbus role support it forces all users to take 60*1c60b9acSAndroid Build Coastguard Workercare about the dbus include path mess whether they use dbus themselves or not. 61*1c60b9acSAndroid Build Coastguard Worker 62*1c60b9acSAndroid Build Coastguard WorkerFor that reason, if you need access to the lws dbus apis, you must explicitly 63*1c60b9acSAndroid Build Coastguard Workerinclude them by 64*1c60b9acSAndroid Build Coastguard Worker 65*1c60b9acSAndroid Build Coastguard Worker``` 66*1c60b9acSAndroid Build Coastguard Worker#include <libwebsockets/lws-dbus.h> 67*1c60b9acSAndroid Build Coastguard Worker``` 68*1c60b9acSAndroid Build Coastguard Worker 69*1c60b9acSAndroid Build Coastguard WorkerThis includes `<dbus/dbus.h>` and so requires the include paths set up. But 70*1c60b9acSAndroid Build Coastguard Workerotherwise non-dbus users that don't include `libwebsockets/lws-dbus.h` don't 71*1c60b9acSAndroid Build Coastguard Workerhave to care about it. 72*1c60b9acSAndroid Build Coastguard Worker 73*1c60b9acSAndroid Build Coastguard Worker## DBUS and valgrind 74*1c60b9acSAndroid Build Coastguard Worker 75*1c60b9acSAndroid Build Coastguard Workerhttps://cgit.freedesktop.org/dbus/dbus/tree/README.valgrind 76*1c60b9acSAndroid Build Coastguard Worker 77*1c60b9acSAndroid Build Coastguard Worker1) One-time 6KiB "Still reachable" caused by abstract unix domain socket + libc 78*1c60b9acSAndroid Build Coastguard Worker`getgrouplist()` via nss... bug since 2004(!) 79*1c60b9acSAndroid Build Coastguard Worker 80*1c60b9acSAndroid Build Coastguard Workerhttps://bugs.debian.org/cgi-bin/bugreport.cgi?bug=273051 81*1c60b9acSAndroid Build Coastguard Worker 82*1c60b9acSAndroid Build Coastguard Worker 83*1c60b9acSAndroid Build Coastguard Worker 84