As seen in Firefox and Thunderbird its quite possible to ship private .so files which then confuse the provider system. Despite not having PATH conflicts, they both provide the same soname($NAME($ARCH))
Remedying this is a two part process:
For every SONAME encoded to Provider { SharedLibrary }, strip the /usr/lib (or biarch libdir) prefix and join the remaining .so directory name (/usr/lib/firefox/libgkcodecs.so -> `soname(firefox/libgkcodecs.so(x86_64))
Evaluate RUNPATH from each ELF when considering DT_NEEDED. Handle in same fashion as ld.so, and if it turns out we linked reliant on RPATH behaviour, correctly encode the dependency in the same style as above.
As seen in Firefox and Thunderbird its quite possible to ship private
.so
files which then confuse the provider system. Despite not having PATH conflicts, they both provide the samesoname($NAME($ARCH))
Remedying this is a two part process:
SONAME
encoded toProvider { SharedLibrary }
, strip the/usr/lib
(or biarch libdir) prefix and join the remaining .so directory name (/usr/lib/firefox/libgkcodecs.so
-> `soname(firefox/libgkcodecs.so(x86_64))DT_NEEDED
. Handle in same fashion asld.so
, and if it turns out we linked reliant on RPATH behaviour, correctly encode the dependency in the same style as above.