The grpc C++ libraries have CMake SOVERSION e.g. “1.48” for the 1.48.x minor release. There is no attempt at ABI compatibility across minor releases, and the entire string “1.48” is effectively a major version for ABI purposes. The “patch” relases of grpc only change internal implementation details. This approach is fairly common in C++ projects. The grpc C libraries use a single integer that is bumped on some but not all minor releases. The CMake-based build system does not implement the libtool-style “age” semantics. The gtest library uses the entire project version number for the CMake SOVERSION, so the library for gtest/gmock 1.13.0 is “1.13.0”; this entire string is effectively a major version for the ABI. This is appropriate because upstream does not concern itself with ABI stability at all, so even patch updates must be considered to break the ABI. This is an even more common approach in C++-land. See flatbuffers for another example of this. On Mon, Feb 20, 2023, at 1:44 PM, Gordon Messmer wrote: > On 2023-02-20 02:16, Daniel P. Berrangé wrote: >> You mention 'libtool' multiple times through this thread. libtool >> defines specific semantics for 3 digits in the version number. >> Not all shared libraries are built with libtool, and even those >> which did use libtool didn't neccesarily apply libtool's semantics. >> >> Possibly this proposal works fine regardless ? In fact, presumably it >> must, otherwise its going to break stuff. >> >> If so, then I'd suggest removing references to libtool and describing >> directly what kind of versions it looks for and what it does with them. > > > Yes, the naming of things is a question I raised in the PR. I'm open to > suggestions. :) > > I'm also interested in looking at examples of non-libtool behavior, > since I'm proposing that we enforce versioning semantics where they have > not been enforced in the past. Can we find libraries that provide only > two dot-separated numbers? What about more than three? Can we treat > the first two as major.minor, or do we have examples where "minor" is > evidently a later number in the set? > > The currently open PR will only generate a versioned dependency if the > library's real name ends in ".so." followed by numbers and dots. If > there's a letter (e.g. libssl.so.1.1.1q), it doesn't get a version. > Mostly because: > > $ rpmdev-vercmp 1.2.3git 1.2.3 > 1.2.3git > 1.2.3 > > Is 1.2.3git a release from git leading up to 1.2.3, or is it a release > after 1.2.3 with fixes from git? > > How should maintainers handle packages where libraries have versions > that don't conform to the semantics we want? > _______________________________________________ > devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx > To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx > Fedora Code of Conduct: > https://docs.fedoraproject.org/en-US/project/code-of-conduct/ > List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines > List Archives: > https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx > Do not reply to spam, report it: > https://pagure.io/fedora-infrastructure/new_issue _______________________________________________ devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx Do not reply to spam, report it: https://pagure.io/fedora-infrastructure/new_issue