@@ -15,6 +15,42 @@ include(external_dependencies)
1515
1616set (SPARROW_IPC_COMPILE_DEFINITIONS "" CACHE STRING "List of public compile definitions of the sparrow-ipc target" )
1717
18+ set (SPARROW_IPC_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /include )
19+ set (SPARROW_IPC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /src)
20+
21+ # Versionning
22+ # ===========
23+ file (STRINGS "${SPARROW_IPC_INCLUDE_DIR} /config/sparrow_ipc_version.hpp" sparrow_ipc_version_defines
24+ REGEX "constexpr int SPARROW_IPC_VERSION_(MAJOR|MINOR|PATCH)" )
25+
26+ foreach (ver ${sparrow_ipc_version_defines} )
27+ if (ver MATCHES "constexpr int SPARROW_IPC_VERSION_(MAJOR|MINOR|PATCH) = ([0-9]+);$" )
28+ set (PROJECT_VERSION_${CMAKE_MATCH_1} "${CMAKE_MATCH_2} " CACHE INTERNAL "" )
29+ endif ()
30+ endforeach ()
31+
32+ set (CMAKE_PROJECT_VERSION
33+ ${PROJECT_VERSION_MAJOR} .${PROJECT_VERSION_MINOR} .${PROJECT_VERSION_PATCH} )
34+
35+ message (STATUS "Building sparrow-ipc v${CMAKE_PROJECT_VERSION} " )
36+
37+ # Binary version
38+ # See the following URL for explanations about the binary versionning
39+ # https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info
40+ file (STRINGS "${SPARROW_IPC_INCLUDE_DIR} /config/sparrow_ipc_version.hpp" sparrow_ipc_version_defines
41+ REGEX "constexpr int SPARROW_IPC_BINARY_(CURRENT|REVISION|AGE)" )
42+
43+ foreach (ver ${sparrow_ipc_version_defines} )
44+ if (ver MATCHES "constexpr int SPARROW_IPC_BINARY_(CURRENT|REVISION|AGE) = ([0-9]+);$" )
45+ set (SPARROW_IPC_BINARY_${CMAKE_MATCH_1} "${CMAKE_MATCH_2} " CACHE INTERNAL "" )
46+ endif ()
47+ endforeach ()
48+
49+ set (SPARROW_IPC_BINARY_VERSION
50+ ${SPARROW_IPC_BINARY_CURRENT} .${SPARROW_IPC_BINARY_REVISION} .${SPARROW_IPC_BINARY_AGE} )
51+
52+ message (STATUS "sparrow-ipc binary version: v${SPARROW_IPC_BINARY_VERSION} " )
53+
1854# Linter options
1955# =============
2056OPTION (ACTIVATE_LINTER "Create targets to run clang-format" OFF )
@@ -44,11 +80,9 @@ endif()
4480OPTION (SPARROW_IPC_BUILD_TESTS "Build sparrow-ipc test suite" OFF )
4581MESSAGE (STATUS "🔧 Build tests: ${SPARROW_IPC_BUILD_TESTS} " )
4682
47- set (SPARROW_IPC_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /include )
48- set (SPARROW_IPC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /src)
49-
5083set (SPARROW_IPC_HEADERS
5184 ${SPARROW_IPC_INCLUDE_DIR} /config/config.hpp
85+ ${SPARROW_IPC_INCLUDE_DIR} /config/sparrow_ipc_version.hpp
5286 ${SPARROW_IPC_INCLUDE_DIR} /serialize.hpp
5387 ${SPARROW_IPC_INCLUDE_DIR} /serialize_primitive_array.hpp
5488 ${SPARROW_IPC_INCLUDE_DIR} /serialize_null_array.hpp
@@ -133,8 +167,26 @@ target_compile_definitions(sparrow-ipc
133167 ${SPARROW_IPC_COMPILE_DEFINITIONS} )
134168
135169if (UNIX )
170+ # CMake does not compute the version number of so files as libtool
171+ # does on Linux. Strictly speaking, we should exclude FreeBSD and
172+ # Apple from this, but that would require having different version
173+ # numbers depending on the platform. We prefer to follow the
174+ # libtool pattern everywhere.
175+ math (EXPR SPARROW_IPC_BINARY_COMPATIBLE "${SPARROW_IPC_BINARY_CURRENT} - ${SPARROW_IPC_BINARY_AGE} " )
176+ set_target_properties (
177+ sparrow-ipc
178+ PROPERTIES
179+ VERSION "${SPARROW_IPC_BINARY_COMPATIBLE} .${SPARROW_IPC_BINARY_REVISION} .${SPARROW_IPC_BINARY_AGE} "
180+ SOVERSION ${SPARROW_IPC_BINARY_COMPATIBLE}
181+ )
136182 target_compile_options (sparrow-ipc PRIVATE "-fvisibility=hidden" )
137183else ()
184+ set_target_properties (
185+ sparrow-ipc
186+ PROPERTIES
187+ VERSION ${SPARROW_IPC_BINARY_VERSION}
188+ SOVERSION ${SPARROW_IPC_BINARY_CURRENT}
189+ )
138190 target_compile_definitions (sparrow-ipc PRIVATE SPARROW_IPC_EXPORTS)
139191endif ()
140192
0 commit comments