Bump version to 1.7.0#85
Conversation
| endif() | ||
|
|
||
| project(mgclient VERSION 1.6.0) | ||
| project(mgclient VERSION 1.7.0) |
There was a problem hiding this comment.
btw, what about the SOVERSION below, do we have to bump that as well? 🤔
There was a problem hiding this comment.
Yep, probably should! Well spotted!
There was a problem hiding this comment.
https://cmake.org/cmake/help/latest/prop_tgt/SOVERSION.html
A common convention is to specify both VERSION and SOVERSION such that SOVERSION matches the first component of VERSION:
set_target_properties(mylib PROPERTIES VERSION 1.2.3 SOVERSION 1)
The idea is that breaking changes to the ABI increment both the SOVERSION and the major VERSION number.
There was a problem hiding this comment.
I'm not sure why the SOVERSION doesn't match our existing major version, but I have undone my change to it because I don't think that I have made any breaking ABI changes - I'm pretty sure I have only added to it.
Should we keep 1.7.0 and SOVERSION 2?
There was a problem hiding this comment.
AFAICT, from 1.6.0 -> 1.7.0 nothing was removed, no function calls were modified, and no existing types layouts were changed. SOVERSION 2 should be fine. We should be using abigail-tools abidiff to confirm.
There was a problem hiding this comment.
Confirmed
- 0 Removed, 0 Changed, 23 Added functions, 0 variable changes
- Exit code 4 = ABI_CHANGE (additive), not 8 (ABI_INCOMPATIBLE_CHANGE)
There was a problem hiding this comment.
I like this a lot, I will add abidiff do the workflow when I'm back from my AL 💪
Gareth's suggestion is nice, I approved before I've seen it
Add a check that the shared library's ABI stays consistent with its version numbers, so an incompatible change cannot ship under an unchanged SOVERSION. The check compares the built library against an in-tree baseline of the last released ABI (captured with libabigail's abidw) using abidiff, classifying the result as an incompatible change, compatible additions, or no change. It then enforces the versioning policy: an incompatible change requires both SOVERSION and project VERSION to increase; compatible additions require a VERSION increase; no ABI change requires nothing. Because a minor version bump may carry an ABI break, SOVERSION rather than a semver major is the compatibility guard. The policy is a pure core, so the whole matrix is unit-tested with plain data without building anything; the shell around it gathers facts and renders. Classification reads no version data from CMakeLists.txt: SOVERSION comes from the built library's ELF SONAME and the version from its own mg_client_version(). An update subcommand refreshes the baseline, and optionally sets the CMake variables, on an intended ABI change or release. The check and the policy tests run as a new job on push and pull_request.
No description provided.