Use full project version as SOVERSION for the shared library (#7777)

Since flatbuffers is using calendar versioning and does not provide
any ABI stability guarantees, use the complete version as SOVERSION
for the shared library rather than just the major component. This
prevents breaking reverse dependencies on incompatible upgrades.

Fixes #7759
This commit is contained in:
Michał Górny
2023-01-10 18:31:49 +01:00
committed by GitHub
parent ca6381bcc8
commit 7bf83f5ea0
2 changed files with 10 additions and 14 deletions

View File

@@ -438,14 +438,12 @@ endif()
if(FLATBUFFERS_BUILD_SHAREDLIB) if(FLATBUFFERS_BUILD_SHAREDLIB)
add_library(flatbuffers_shared SHARED ${FlatBuffers_Library_SRCS}) add_library(flatbuffers_shared SHARED ${FlatBuffers_Library_SRCS})
# Shared object version: "major.minor.micro" # FlatBuffers use calendar-based versioning and do not provide any ABI
# - micro updated every release when there is no API/ABI changes # stability guarantees. Therefore, always use the full version as SOVERSION
# - minor updated when there are additions in API/ABI # in order to avoid breaking reverse dependencies on upgrades.
# - major (ABI number) updated when there are changes in ABI (or removals) set(FlatBuffers_Library_SONAME_FULL "${PROJECT_VERSION}")
set(FlatBuffers_Library_SONAME_MAJOR ${VERSION_MAJOR})
set(FlatBuffers_Library_SONAME_FULL "${FlatBuffers_Library_SONAME_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
set_target_properties(flatbuffers_shared PROPERTIES OUTPUT_NAME flatbuffers set_target_properties(flatbuffers_shared PROPERTIES OUTPUT_NAME flatbuffers
SOVERSION "${FlatBuffers_Library_SONAME_MAJOR}" SOVERSION "${FlatBuffers_Library_SONAME_FULL}"
VERSION "${FlatBuffers_Library_SONAME_FULL}") VERSION "${FlatBuffers_Library_SONAME_FULL}")
if(FLATBUFFERS_ENABLE_PCH) if(FLATBUFFERS_ENABLE_PCH)
add_pch_to_target(flatbuffers_shared include/flatbuffers/pch/pch.h) add_pch_to_target(flatbuffers_shared include/flatbuffers/pch/pch.h)

View File

@@ -525,14 +525,12 @@ endif()
if(FLATBUFFERS_BUILD_SHAREDLIB) if(FLATBUFFERS_BUILD_SHAREDLIB)
add_library(flatbuffers_shared SHARED ${FlatBuffers_Library_SRCS}) add_library(flatbuffers_shared SHARED ${FlatBuffers_Library_SRCS})
target_link_libraries(flatbuffers_shared PRIVATE $<BUILD_INTERFACE:ProjectConfig>) target_link_libraries(flatbuffers_shared PRIVATE $<BUILD_INTERFACE:ProjectConfig>)
# Shared object version: "major.minor.micro" # FlatBuffers use calendar-based versioning and do not provide any ABI
# - micro updated every release when there is no API/ABI changes # stability guarantees. Therefore, always use the full version as SOVERSION
# - minor updated when there are additions in API/ABI # in order to avoid breaking reverse dependencies on upgrades.
# - major (ABI number) updated when there are changes in ABI (or removals) set(FlatBuffers_Library_SONAME_FULL "${PROJECT_VERSION}")
set(FlatBuffers_Library_SONAME_MAJOR ${VERSION_MAJOR})
set(FlatBuffers_Library_SONAME_FULL "${FlatBuffers_Library_SONAME_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
set_target_properties(flatbuffers_shared PROPERTIES OUTPUT_NAME flatbuffers set_target_properties(flatbuffers_shared PROPERTIES OUTPUT_NAME flatbuffers
SOVERSION "${FlatBuffers_Library_SONAME_MAJOR}" SOVERSION "${FlatBuffers_Library_SONAME_FULL}"
VERSION "${FlatBuffers_Library_SONAME_FULL}") VERSION "${FlatBuffers_Library_SONAME_FULL}")
if(FLATBUFFERS_ENABLE_PCH) if(FLATBUFFERS_ENABLE_PCH)
add_pch_to_target(flatbuffers_shared include/flatbuffers/pch/pch.h) add_pch_to_target(flatbuffers_shared include/flatbuffers/pch/pch.h)