Skip to content

Commit 6d7b8ad

Browse files
authored
[CMAKE] Set the project version through the cmake project macro (open-telemetry#3605)
1 parent dfa7118 commit 6d7b8ad

File tree

4 files changed

+51
-34
lines changed

4 files changed

+51
-34
lines changed

CMakeLists.txt

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,17 @@ if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.20.0")
1515
cmake_policy(SET CMP0117 NEW)
1616
endif()
1717

18-
project(opentelemetry-cpp)
18+
set(OPENTELEMETRY_VERSION_NUMBER "1.22.0")
19+
set(OPENTELEMETRY_VERSION_SUFFIX "")
20+
set(OPENTELEMETRY_VERSION
21+
"${OPENTELEMETRY_VERSION_NUMBER}${OPENTELEMETRY_VERSION_SUFFIX}")
22+
23+
set(OPENTELEMETRY_ABI_VERSION_DEFAULT "1")
24+
25+
project(
26+
opentelemetry-cpp
27+
VERSION "${OPENTELEMETRY_VERSION_NUMBER}"
28+
LANGUAGES CXX)
1929

2030
# Mark variables as used so cmake doesn't complain about them
2131
mark_as_advanced(CMAKE_TOOLCHAIN_FILE)
@@ -56,9 +66,6 @@ endif()
5666
option(WITH_ABI_VERSION_1 "ABI version 1" ON)
5767
option(WITH_ABI_VERSION_2 "EXPERIMENTAL: ABI version 2 preview" OFF)
5868

59-
file(READ "${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h"
60-
OPENTELEMETRY_CPP_HEADER_VERSION_H)
61-
6269
#
6370
# We do not want to have WITH_ABI_VERSION = "1" or "2", and instead prefer two
6471
# distinct flags, WITH_ABI_VERSION_1 and WITH_ABI_VERSION_2.
@@ -88,31 +95,9 @@ if(WITH_ABI_VERSION_2)
8895
elseif(WITH_ABI_VERSION_1)
8996
set(OPENTELEMETRY_ABI_VERSION_NO "1")
9097
else()
91-
if(OPENTELEMETRY_CPP_HEADER_VERSION_H MATCHES
92-
"OPENTELEMETRY_ABI_VERSION_NO[ \t\r\n]+\"?([0-9]+)\"?")
93-
math(EXPR OPENTELEMETRY_ABI_VERSION_NO ${CMAKE_MATCH_1})
94-
else()
95-
message(
96-
FATAL_ERROR
97-
"OPENTELEMETRY_ABI_VERSION_NO not found on ${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h"
98-
)
99-
endif()
98+
set(OPENTELEMETRY_ABI_VERSION_NO "${OPENTELEMETRY_ABI_VERSION_DEFAULT}")
10099
endif()
101100

102-
message(STATUS "OPENTELEMETRY_ABI_VERSION_NO=${OPENTELEMETRY_ABI_VERSION_NO}")
103-
104-
if(OPENTELEMETRY_CPP_HEADER_VERSION_H MATCHES
105-
"OPENTELEMETRY_VERSION[ \t\r\n]+\"?([^\"]+)\"?")
106-
set(OPENTELEMETRY_VERSION ${CMAKE_MATCH_1})
107-
else()
108-
message(
109-
FATAL_ERROR
110-
"OPENTELEMETRY_VERSION not found on ${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h"
111-
)
112-
endif()
113-
114-
message(STATUS "OPENTELEMETRY_VERSION=${OPENTELEMETRY_VERSION}")
115-
116101
option(WITH_NO_DEPRECATED_CODE "Do not include deprecated code" OFF)
117102

118103
set(WITH_STL
@@ -478,7 +463,7 @@ endif()
478463
message(STATUS "---------------------------------------------")
479464
message(STATUS "build settings")
480465
message(STATUS "---------------------------------------------")
481-
message(STATUS "OpenTelemetry: ${OPENTELEMETRY_VERSION}")
466+
message(STATUS "OpenTelemetry VERSION: ${OPENTELEMETRY_VERSION}")
482467
message(STATUS "OpenTelemetry ABI: ${OPENTELEMETRY_ABI_VERSION_NO}")
483468
message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
484469
message(STATUS "CXX: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
@@ -662,3 +647,13 @@ if(OPENTELEMETRY_INSTALL)
662647
include(CPack)
663648
endif()
664649
endif()
650+
651+
# Make the version and ABI version available to the user for in-tree builds
652+
# These are the same variables that are cached with
653+
# find_package(opentelemetry-cpp CONFIG)
654+
set(OPENTELEMETRY_ABI_VERSION_NO
655+
"${OPENTELEMETRY_ABI_VERSION_NO}"
656+
CACHE STRING "opentelemetry-cpp ABI version" FORCE)
657+
set(OPENTELEMETRY_VERSION
658+
"${OPENTELEMETRY_VERSION}"
659+
CACHE STRING "opentelemetry-cpp version" FORCE)

cmake/otel-install-functions.cmake

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -487,13 +487,11 @@ function(otel_install_cmake_config)
487487
"${PROJECT_SOURCE_DIR}/cmake/templates/opentelemetry-cpp-config.cmake.in"
488488
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config.cmake"
489489
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
490-
PATH_VARS OPENTELEMETRY_ABI_VERSION_NO OPENTELEMETRY_VERSION PROJECT_NAME
491-
INCLUDE_INSTALL_DIR CMAKE_INSTALL_LIBDIR)
490+
PATH_VARS INCLUDE_INSTALL_DIR CMAKE_INSTALL_LIBDIR)
492491

493492
# Write version file for find_package(opentelemetry-cpp CONFIG)
494493
write_basic_package_version_file(
495494
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config-version.cmake"
496-
VERSION ${OPENTELEMETRY_VERSION}
497495
COMPATIBILITY ExactVersion)
498496

499497
install(

cmake/templates/opentelemetry-cpp-config.cmake.in

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,10 +211,13 @@ endforeach()
211211
# handle the QUIETLY and REQUIRED arguments and set opentelemetry-cpp_FOUND to
212212
# TRUE if all variables listed contain valid results, e.g. valid file paths.
213213
include("FindPackageHandleStandardArgs")
214+
215+
set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE})
216+
214217
find_package_handle_standard_args(
215-
${CMAKE_FIND_PACKAGE_NAME}
216-
FOUND_VAR ${CMAKE_FIND_PACKAGE_NAME}_FOUND
217-
REQUIRED_VARS OPENTELEMETRY_CPP_INCLUDE_DIRS OPENTELEMETRY_CPP_LIBRARIES)
218+
${CMAKE_FIND_PACKAGE_NAME}
219+
CONFIG_MODE
220+
REQUIRED_VARS OPENTELEMETRY_CPP_INCLUDE_DIRS OPENTELEMETRY_CPP_LIBRARIES)
218221

219222
if(${CMAKE_FIND_PACKAGE_NAME}_FOUND)
220223
set(OPENTELEMETRY_CPP_FOUND

install/test/cmake/fetch_content_test/CMakeLists.txt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,27 @@ FetchContent_Declare(
3030
FetchContent_Declare(opentelemetry-cpp SOURCE_DIR ${OPENTELEMETRY_CPP_SRC_DIR})
3131
FetchContent_MakeAvailable(googletest opentelemetry-cpp)
3232

33+
if(NOT DEFINED OPENTELEMETRY_VERSION OR OPENTELEMETRY_VERSION
34+
VERSION_LESS_EQUAL 0.0.0)
35+
message(
36+
FATAL_ERROR
37+
"OpenTelemetry C++ version not set after FetchContent_MakeAvailable(opentelemetry-cpp)."
38+
)
39+
endif()
40+
41+
if(NOT DEFINED OPENTELEMETRY_ABI_VERSION_NO OR OPENTELEMETRY_ABI_VERSION_NO
42+
LESS 1)
43+
message(
44+
FATAL_ERROR
45+
"OpenTelemetry C++ ABI version number not defined in the source directory"
46+
)
47+
endif()
48+
49+
message(
50+
STATUS
51+
"OpenTelemetry C++ version: ${OPENTELEMETRY_VERSION}, ABI version: ${OPENTELEMETRY_ABI_VERSION_NO}"
52+
)
53+
3354
add_executable(
3455
fetch_content_src_test
3556
${OPENTELEMETRY_CPP_SRC_DIR}/install/test/src/test_api.cc

0 commit comments

Comments
 (0)