Skip to content

Bump version to 1.7.0#85

Open
mattkjames7 wants to merge 4 commits into
masterfrom
bump-version
Open

Bump version to 1.7.0#85
mattkjames7 wants to merge 4 commits into
masterfrom
bump-version

Conversation

@mattkjames7

Copy link
Copy Markdown
Contributor

No description provided.

@mattkjames7 mattkjames7 self-assigned this Jul 13, 2026
@mattkjames7 mattkjames7 marked this pull request as ready for review July 13, 2026 10:10
Comment thread CMakeLists.txt
endif()

project(mgclient VERSION 1.6.0)
project(mgclient VERSION 1.7.0)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

btw, what about the SOVERSION below, do we have to bump that as well? 🤔

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, probably should! Well spotted!

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirmed

- 0 Removed, 0 Changed, 23 Added functions, 0 variable changes
- Exit code 4 = ABI_CHANGE (additive), not 8 (ABI_INCOMPATIBLE_CHANGE)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like this a lot, I will add abidiff do the workflow when I'm back from my AL 💪

@mattkjames7 mattkjames7 requested a review from gitbuda July 13, 2026 10:45
imilinovic
imilinovic previously approved these changes Jul 13, 2026
@imilinovic imilinovic dismissed their stale review July 13, 2026 13:07

Gareth's suggestion is nice, I approved before I've seen it

@mattkjames7 mattkjames7 requested a review from Ignition July 14, 2026 05:36
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants