Skip to content

Commit 580f22f

Browse files
committed
Handle versioning
1 parent ddf6682 commit 580f22f

File tree

3 files changed

+83
-4
lines changed

3 files changed

+83
-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+
# 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
# =============
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
@@ -133,8 +167,26 @@ target_compile_definitions(sparrow-ipc
133167
${SPARROW_IPC_COMPILE_DEFINITIONS})
134168

135169
if(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")
137183
else()
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)
139191
endif()
140192

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: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
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+
[[maybe_unused]] const std::string printable_binary_version = std::string("sparrow-ipc binary version : ")
17+
+ std::to_string(SPARROW_IPC_BINARY_CURRENT) + "."
18+
+ std::to_string(SPARROW_IPC_BINARY_REVISION) + "."
19+
+ std::to_string(SPARROW_IPC_BINARY_AGE);
20+
}

0 commit comments

Comments
 (0)