Skip to content

Commit c2c62ef

Browse files
committed
Handle versioning
1 parent 1841ef1 commit c2c62ef

File tree

3 files changed

+84
-4
lines changed

3 files changed

+84
-4
lines changed

CMakeLists.txt

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,42 @@ include(external_dependencies)
1515

1616
set(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
# =============
2056
OPTION(ACTIVATE_LINTER "Create targets to run clang-format" OFF)
@@ -44,11 +80,9 @@ endif()
4480
OPTION(SPARROW_IPC_BUILD_TESTS "Build sparrow-ipc test suite" OFF)
4581
MESSAGE(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-
5083
set(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

129163
if(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")
131177
else()
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)
133185
endif()
134186

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#pragma once
2+
3+
namespace sparrow_ipc
4+
{
5+
constexpr int SPARROW_IPC_VERSION_MAJOR = 0;
6+
constexpr int SPARROW_IPC_VERSION_MINOR = 0;
7+
constexpr int SPARROW_IPC_VERSION_PATCH = 1;
8+
9+
constexpr int SPARROW_IPC_BINARY_CURRENT = 0;
10+
constexpr int SPARROW_IPC_BINARY_REVISION = 0;
11+
constexpr int SPARROW_IPC_BINARY_AGE = 0;
12+
}

tests/main.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
22

3+
#include <string>
4+
35
#include "doctest/doctest.h"
46

5-
//TODO check version?
7+
#include "config/sparrow_ipc_version.hpp"
8+
9+
TEST_CASE("versions exist and are readable")
10+
{
11+
using namespace sparrow_ipc;
12+
[[maybe_unused]] const std::string printable_version = std::string("sparrow-ipc version: ")
13+
+ std::to_string(SPARROW_IPC_VERSION_MAJOR) + "."
14+
+ std::to_string(SPARROW_IPC_VERSION_MINOR) + "."
15+
+ std::to_string(SPARROW_IPC_VERSION_PATCH);
16+
17+
[[maybe_unused]] const std::string printable_binary_version = std::string("sparrow-ipc binary version: ")
18+
+ std::to_string(SPARROW_IPC_BINARY_CURRENT) + "."
19+
+ std::to_string(SPARROW_IPC_BINARY_REVISION) + "."
20+
+ std::to_string(SPARROW_IPC_BINARY_AGE);
21+
}

0 commit comments

Comments
 (0)