Skip to content

Commit b9776d6

Browse files
authored
[API] Deliver ABI breaking changes (#2222)
1 parent f5f3934 commit b9776d6

File tree

4 files changed

+583
-8
lines changed

4 files changed

+583
-8
lines changed

CMakeLists.txt

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,17 +92,54 @@ if(VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
9292
include("${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}")
9393
endif()
9494

95+
option(WITH_ABI_VERSION_1 "ABI version 1" ON)
96+
option(WITH_ABI_VERSION_2 "EXPERIMENTAL: ABI version 2 preview" OFF)
97+
9598
file(READ "${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h"
9699
OPENTELEMETRY_CPP_HEADER_VERSION_H)
97-
if(OPENTELEMETRY_CPP_HEADER_VERSION_H MATCHES
98-
"OPENTELEMETRY_ABI_VERSION_NO[ \t\r\n]+\"?([0-9]+)\"?")
99-
math(EXPR OPENTELEMETRY_ABI_VERSION_NO ${CMAKE_MATCH_1})
100-
else()
100+
101+
#
102+
# We do not want to have WITH_ABI_VERSION = "1" or "2", and instead prefer two
103+
# distinct flags, WITH_ABI_VERSION_1 and WITH_ABI_VERSION_2.
104+
#
105+
# This allows:
106+
#
107+
# * to have a specific option description for each ABI
108+
# * to mark experimental/stable/deprecated on flags, for clarity
109+
# * to search for exact abi usage move easily, discouraging:
110+
#
111+
# * cmake -DWITH_ABI_VERSION=${ARG}
112+
#
113+
# While not supported, having distinct WITH_ABI_VERSION_1 and WITH_ABI_VERSION_2
114+
# flags also opens the possibility to support multiple ABI concurrently, should
115+
# that become necessary.
116+
#
117+
if(WITH_ABI_VERSION_1 AND WITH_ABI_VERSION_2)
118+
#
119+
# Only one ABI is supported in a build.
120+
#
101121
message(
102-
FATAL_ERROR
103-
"OPENTELEMETRY_ABI_VERSION_NO not found on ${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h"
104-
)
122+
FATAL_ERROR "Set either WITH_ABI_VERSION_1 or WITH_ABI_VERSION_2, not both")
105123
endif()
124+
125+
if(WITH_ABI_VERSION_2)
126+
set(OPENTELEMETRY_ABI_VERSION_NO "2")
127+
elseif(WITH_ABI_VERSION_1)
128+
set(OPENTELEMETRY_ABI_VERSION_NO "1")
129+
else()
130+
if(OPENTELEMETRY_CPP_HEADER_VERSION_H MATCHES
131+
"OPENTELEMETRY_ABI_VERSION_NO[ \t\r\n]+\"?([0-9]+)\"?")
132+
math(EXPR OPENTELEMETRY_ABI_VERSION_NO ${CMAKE_MATCH_1})
133+
else()
134+
message(
135+
FATAL_ERROR
136+
"OPENTELEMETRY_ABI_VERSION_NO not found on ${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h"
137+
)
138+
endif()
139+
endif()
140+
141+
message(STATUS "OPENTELEMETRY_ABI_VERSION_NO=${OPENTELEMETRY_ABI_VERSION_NO}")
142+
106143
if(OPENTELEMETRY_CPP_HEADER_VERSION_H MATCHES
107144
"OPENTELEMETRY_VERSION[ \t\r\n]+\"?([^\"]+)\"?")
108145
set(OPENTELEMETRY_VERSION ${CMAKE_MATCH_1})
@@ -113,6 +150,8 @@ else()
113150
)
114151
endif()
115152

153+
message(STATUS "OPENTELEMETRY_VERSION=${OPENTELEMETRY_VERSION}")
154+
116155
option(WITH_NO_DEPRECATED_CODE "Do not include deprecated code" OFF)
117156

118157
option(WITH_STL "Whether to use Standard Library for C++ latest features" OFF)

api/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ if(WITH_REMOVE_METER_PREVIEW)
9494
INTERFACE ENABLE_REMOVE_METER_PREVIEW)
9595
endif()
9696

97+
target_compile_definitions(
98+
opentelemetry_api
99+
INTERFACE OPENTELEMETRY_ABI_VERSION_NO=${OPENTELEMETRY_ABI_VERSION_NO})
100+
97101
# A better place should be in sdk, not api
98102
if(WITH_OTLP_HTTP_SSL_PREVIEW)
99103
target_compile_definitions(opentelemetry_api

api/include/opentelemetry/version.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
#include "opentelemetry/common/macros.h"
77
#include "opentelemetry/detail/preprocessor.h"
88

9-
#define OPENTELEMETRY_ABI_VERSION_NO 1
9+
#ifndef OPENTELEMETRY_ABI_VERSION_NO
10+
# define OPENTELEMETRY_ABI_VERSION_NO 1
11+
#endif
12+
1013
#define OPENTELEMETRY_VERSION "1.11.0"
1114
#define OPENTELEMETRY_VERSION_MAJOR 1
1215
#define OPENTELEMETRY_VERSION_MINOR 11

0 commit comments

Comments
 (0)