Control: notfound 1011166 pidgin/2.14.9-2 Control: tags 1011166 patch
On 5/17/22 15:34, Paul Gevers wrote:
I note that the library moved location from /usr/lib/purple-2/libjabber.so.0.0.0 to /usr/lib/x86_64-linux-gnu/purple-2/libjabber.so.0.0.0.
I converted from an ancient compat version to modern debhelper. This brought in multiarch support. Rather than fight it, I just went with that, since the problem looked tractable.
Naively I would have expected it to be picked up, but maybe the /purple-2 in the middle of the path is preventing that.
-- BEGIN RED HERRING -- I would expect it to be picked up.libpurple/plugin.c sets up the search path for that purple-2 directory (which is where all libpurple plugins are installed):
purple_plugins_add_search_path(LIBDIR); In libpurple/Makefile.am, AM_CPPFLAGS has: -DLIBDIR=\"$(libdir)/purple-$(PURPLE_MAJOR_VERSION)/\"This should cause us to find libxmpp.so, the protocol plugin. It then needs to bring in libjabber.so, an internal library. It should be finding this with RUNPATH, I believe:
$ readelf -a /usr/lib/x86_64-linux-gnu/purple-2/libxmpp.so | grep -i path0x000000000000001d (RUNPATH) Library runpath: [/usr/lib/x86_64-linux-gnu/purple-2]
If I run: LD_DEBUG=libs pidgin -n That is indeed what happens: 43864: find library=libjabber.so.0 [0]; searching43864: search path=/usr/lib/x86_64-linux-gnu/purple-2/glibc-hwcaps/x86-64-v3:/usr/lib/x86_64-linux-gnu/purple-2/glibc-hwcaps/x86-64-v2:/usr/lib/x86_64-linux-gnu/purple-2/tls/haswell/x86_64:/usr/lib/x86_64-linux-gnu/purple-2/tls/haswell:/usr/lib/x86_64-linux-gnu/purple-2/tls/x86_64:/usr/lib/x86_64-linux-gnu/purple-2/tls:/usr/lib/x86_64-linux-gnu/purple-2/haswell/x86_64:/usr/lib/x86_64-linux-gnu/purple-2/haswell:/usr/lib/x86_64-linux-gnu/purple-2/x86_64:/usr/lib/x86_64-linux-gnu/purple-2 (RUNPATH from file /usr/lib/x86_64-linux-gnu/purple-2/libxmpp.so)
If I run: LD_DEBUG=libs chatty It fails: 43926: find library=libjabber.so.0 [0]; searching 43926: search path=/usr/lib/purple-2 (RUNPATH from file chatty) 43926: trying file=/usr/lib/purple-2/libjabber.so.0 43926: search cache=/etc/ld.so.cache43926: search path=/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v3:/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v2:/lib/x86_64-linux-gnu/tls/haswell/x86_64:/lib/x86_64-linux-gnu/tls/haswell:/lib/x86_64-linux-gnu/tls/x86_64:/lib/x86_64-linux-gnu/tls:/lib/x86_64-linux-gnu/haswell/x86_64:/lib/x86_64-linux-gnu/haswell:/lib/x86_64-linux-gnu/x86_64:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v3:/usr/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v2:/usr/lib/x86_64-linux-gnu/tls/haswell/x86_64:/usr/lib/x86_64-linux-gnu/tls/haswell:/usr/lib/x86_64-linux-gnu/tls/x86_64:/usr/lib/x86_64-linux-gnu/tls:/usr/lib/x86_64-linux-gnu/haswell/x86_64:/usr/lib/x86_64-linux-gnu/haswell:/usr/lib/x86_64-linux-gnu/x86_64:/usr/lib/x86_64-linux-gnu:/lib/glibc-hwcaps/x86-64-v3:/lib/glibc-hwcaps/x86-64-v2:/lib/tls/haswell/x86_64:/lib/tls/haswell:/lib/tls/x86_64:/lib/tls:/lib/haswell/x86_64:/lib/haswell:/lib/x86_64:/lib:/usr/lib/glibc-hwcaps/x86-64-v3:/usr/lib/glibc-hwcaps/x86-64-v2:/usr/lib/tls/haswell/x86_64:/usr/lib/tls/haswell:/usr/lib/tls/x86_64:/usr/lib/tls:/usr/lib/haswell/x86_64:/usr/lib/haswell:/usr/lib/x86_64:/usr/lib (system search path)
At first glance, it felt like the RUNPATH from chatty was winning over that from libxmpp.so.
-- END RED HERRING --Upon further investigation, the real issue is that chatty is directly linking to libjabber.so, and they're setting a RUNPATH to do it.
chatty's src/meson.build has: executable('chatty', chatty_sources, resources, include_directories: src_inc, dependencies: chatty_deps, link_with: libchatty.get_static_lib(), install: true, install_rpath: purple_plugdir, ) Note the install_rpath. and src/purple/meson.build has (manual wrapping added for email): purple_plugdir = purple_dep.get_pkgconfig_variable('plugindir') jabber = meson.get_compiler('c').find_library( 'jabber', dirs: purple_plugdir)In terms of "Who is at fault?", I blame chatty for explicitly linking to an internal library. However, in fairness, I understand that they have their reasons and a better solution was never found with upstream (at least in part because no significant changes are going to go into purple 2 at this point):
https://source.puri.sm/Librem5/chatty/-/issues/266The good news here is that a rebuild of chatty is all that's necessary. A binNMU should be sufficient to fix the bug. I've submitted a request for one, but this was my first time, so I might have done something wrong.
To fix it fully correctly, though, I think we want a versioned Build-Depends to ensure it cannot be built against an old libpurple0 (not that such a thing should happen). And a lintian override needs updating. Here is a MR for that:
https://salsa.debian.org/DebianOnMobile-team/chatty/-/merge_requests/21 -- Richard
OpenPGP_signature
Description: OpenPGP digital signature