Bug#615940: dpkg-gensymbols: support a #CURVER# substitution to generate strict dependencies

Simon McVittie <[email protected]> Sun, 21 Dec 2025 11:25:29 +0000
Newsgroups gmane.linux.debian.devel.dpkg.bugs
Message-ID <aUfZKekD9XdTFOaI__35962.093719148$1766318266$gmane$org@remnant.pseudorandom.co.uk>
On Sun, 21 Dec 2025 at 11:31:48 +0100, Guillem Jover wrote:
>On Sat, 2025-12-20 at 14:11:51 +0100, Chris Hofstaedtler wrote:
>> On Tue, Mar 01, 2011 at 08:47:58AM +0100, Raphael Hertzog wrote:
>> > What is missing however is a way to have that alternate dependency
>> > embed the strict versioning scheme. For this we need to support a new
>> > #CURVER# substitution that is replaced with the current version so that
>> > we can keep the associated dependency in sync with the latest version of
>> > the package.
>>
>> I'd also like this. For src:multipath-tools I've for now copied the
>> solution from src:dbus:
>>
>> https://sources.debian.org/src/dbus/1.16.2-2/debian/libdbus-1-3.symbols.in#L2
>> https://sources.debian.org/src/dbus/1.16.2-2/debian/rules#L265
>
>I briefly looked how difficult this could be, and ended up with the
>following set of changes (not tested beyond the test suite):
>
>  https://git.hadrons.org/cgit/debian/dpkg/dpkg.git/log/?h=next/dpkg-gensymbols-CURVER

This certainly looks like a nicer way to provide what dbus wants, 
without having to use our own .in substitution.

>But then wondered whether it might be better to instead add a tag to
>mark each symbol with say "(internal)" or something along those lines,
>to make it more clear when looking at a particular symbol. Although if
>there is going to be a use for #CURVER# besides internal or ABI
>unstable symbols, then perhaps that makes sense to be implemented as it
>is anyway (or both could be provided).

There are levels of instability. For dbus' use-case, the affected 
symbols are private to the dbus source package, but binary packages 
outside libdbus-1-3 are allowed to use them, and that's why we have them 
in the binary interface at all: they're used by dbus-daemon(1), and by 
some of the as-installed tests that are run by autopkgtest. So we can't 
have a policy like "if you depend on these symbols then you'll FTBFS".

(In dbus, truly private symbols are filtered out from the ABI by using 
-fvisibility=hidden: the symbols in the LIBDBUS_PRIVATE_* verdef are 
those that are outside the public API, but are required for in-tree use 
by either the tools or the tests.)

I suppose we could combine your #PRIVATE# pseudo-dependency (which makes 
any dependent packages intentionally FTBFS, if I understand correctly) 
with a shlibs.local that overrules the .symbols and generates a 
lockstep-versioned dependency on libdbus-1-3 instead? Is that what you 
had in mind?

     smcv