@@ -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+ # Versioning
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 more info on the binary versioning
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
@@ -127,8 +161,26 @@ target_compile_definitions(sparrow-ipc
127161 ${SPARROW_IPC_COMPILE_DEFINITIONS} )
128162
129163if (UNIX )
164+ # CMake does not compute the version number of so files as libtool
165+ # does on Linux. Strictly speaking, we should exclude FreeBSD and
166+ # Apple from this, but that would require having different version
167+ # numbers depending on the platform. We prefer to follow the
168+ # libtool pattern everywhere.
169+ math (EXPR SPARROW_IPC_BINARY_COMPATIBLE "${SPARROW_IPC_BINARY_CURRENT} - ${SPARROW_IPC_BINARY_AGE} " )
170+ set_target_properties (
171+ sparrow-ipc
172+ PROPERTIES
173+ VERSION "${SPARROW_IPC_BINARY_COMPATIBLE} .${SPARROW_IPC_BINARY_REVISION} .${SPARROW_IPC_BINARY_AGE} "
174+ SOVERSION ${SPARROW_IPC_BINARY_COMPATIBLE}
175+ )
130176 target_compile_options (sparrow-ipc PRIVATE "-fvisibility=hidden" )
131177else ()
178+ set_target_properties (
179+ sparrow-ipc
180+ PROPERTIES
181+ VERSION ${SPARROW_IPC_BINARY_VERSION}
182+ SOVERSION ${SPARROW_IPC_BINARY_CURRENT}
183+ )
132184 target_compile_definitions (sparrow-ipc PRIVATE SPARROW_IPC_EXPORTS)
133185endif ()
134186
0 commit comments