Control: reassign -1 uhd 4.9.0.1-1.4
Control: retitle -1 uhd: Passes non-existent directory to dpkg-shlibdeps -S

Hi!

On Fri, 2026-08-07 at 18:02:04 +0200, Jochen Sprickerhof wrote:
> Package: dpkg-dev
> Version: 1.23.7
> Severity: normal
> File: /usr/bin/dpkg-shlibdeps

> as just discussed in #debian-bootstrap there is a problem reproducing
> the uhd package:
> 
> https://reproduce.debian.net/arm64/api/v1/builds/252324/artifacts/629453/diffoscope
> https://reproduce.debian.net/amd64/api/v1/builds/277668/artifacts/739185/diffoscope
> 
> To me it looks like dpkg-shlibdeps sometimes misses the libuhd4.9.0
> dependency even though it should be there as dpdk_port_test in the
> package depends on it and there is no other diff.

So, after looking into it the problem seems to be that debian/rules
specifies the following override for dh_shlibdeps:

,---
override_dh_shlibdeps:
        dh_shlibdeps --package=uhd-host --libpackage=libuhd4.9.0
        dh_shlibdeps --package=libuhd4.9.0 --libpackage=libuhd4.8.0
        dh_shlibdeps --package=libuhd4.9.0-dpdk --libpackage=libuhd4.8.0-dpdk
        dh_shlibdeps --package=libuhd4.9.0-dpdk-tests 
--libpackage=libuhd4.8.0-dpdk
        dh_shlibdeps --package=libuhd-dev --libpackage=libuhd4.9.0
        dh_shlibdeps --package=python3-uhd --libpackage=libuhd4.9.0
`---

Where the --libpackage is in a few cases referring to 4.8.0 instead of
4.9.0, which means that dpkg-shlibdeps gets passed a non-existent
directory in -S, and cannot prefer that package for the libuhd shared
library. And because both libuhd4.9.0 and libuhd4.9.0-dpdk provide the
same shared library with the same SONAME as different flavors, then
dpkg-shlibdeps ends up picking either one randomly depending on Perl's
hash key seed.

I've now locally added warnings to the various dpkg-shlibdeps options
taking directories on non-existent ones, so that this kind of problem
becomes more obvious in the future. (And might even consider turning
them into errors at some point probably.)

Thanks,
Guillem

Reply via email to