Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 19 additions & 27 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,14 @@ if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.20.0")
cmake_policy(SET CMP0117 NEW)
endif()

project(opentelemetry-cpp)
# Read the opentelemetry-cpp project and abi version from the api version header
# file and set the third-party version tags
include("${CMAKE_CURRENT_LIST_DIR}/cmake/version.cmake")

project(
opentelemetry-cpp
VERSION ${OPENTELEMETRY_VERSION}
LANGUAGES CXX)

# Mark variables as used so cmake doesn't complain about them
mark_as_advanced(CMAKE_TOOLCHAIN_FILE)
Expand Down Expand Up @@ -56,9 +63,6 @@ endif()
option(WITH_ABI_VERSION_1 "ABI version 1" ON)
option(WITH_ABI_VERSION_2 "EXPERIMENTAL: ABI version 2 preview" OFF)

file(READ "${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h"
OPENTELEMETRY_CPP_HEADER_VERSION_H)

#
# We do not want to have WITH_ABI_VERSION = "1" or "2", and instead prefer two
# distinct flags, WITH_ABI_VERSION_1 and WITH_ABI_VERSION_2.
Expand Down Expand Up @@ -88,31 +92,9 @@ if(WITH_ABI_VERSION_2)
elseif(WITH_ABI_VERSION_1)
set(OPENTELEMETRY_ABI_VERSION_NO "1")
else()
if(OPENTELEMETRY_CPP_HEADER_VERSION_H MATCHES
"OPENTELEMETRY_ABI_VERSION_NO[ \t\r\n]+\"?([0-9]+)\"?")
math(EXPR OPENTELEMETRY_ABI_VERSION_NO ${CMAKE_MATCH_1})
else()
message(
FATAL_ERROR
"OPENTELEMETRY_ABI_VERSION_NO not found on ${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h"
)
endif()
endif()

message(STATUS "OPENTELEMETRY_ABI_VERSION_NO=${OPENTELEMETRY_ABI_VERSION_NO}")

if(OPENTELEMETRY_CPP_HEADER_VERSION_H MATCHES
"OPENTELEMETRY_VERSION[ \t\r\n]+\"?([^\"]+)\"?")
set(OPENTELEMETRY_VERSION ${CMAKE_MATCH_1})
else()
message(
FATAL_ERROR
"OPENTELEMETRY_VERSION not found on ${CMAKE_CURRENT_LIST_DIR}/api/include/opentelemetry/version.h"
)
set(OPENTELEMETRY_ABI_VERSION_NO ${OPENTELEMETRY_ABI_VERSION_DEFAULT})
endif()

message(STATUS "OPENTELEMETRY_VERSION=${OPENTELEMETRY_VERSION}")

option(WITH_NO_DEPRECATED_CODE "Do not include deprecated code" OFF)

set(WITH_STL
Expand Down Expand Up @@ -662,3 +644,13 @@ if(OPENTELEMETRY_INSTALL)
include(CPack)
endif()
endif()

# Make the version and ABI version available to the user for in-tree builds
# These are the same variables that are cached with
# find_package(opentelemetry-cpp CONFIG)
set(OPENTELEMETRY_ABI_VERSION_NO
"${OPENTELEMETRY_ABI_VERSION_NO}"
CACHE STRING "opentelemetry-cpp ABI version" FORCE)
set(OPENTELEMETRY_VERSION
"${OPENTELEMETRY_VERSION}"
CACHE STRING "opentelemetry-cpp version" FORCE)
4 changes: 1 addition & 3 deletions cmake/otel-install-functions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -487,13 +487,11 @@ function(otel_install_cmake_config)
"${PROJECT_SOURCE_DIR}/cmake/templates/opentelemetry-cpp-config.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config.cmake"
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
PATH_VARS OPENTELEMETRY_ABI_VERSION_NO OPENTELEMETRY_VERSION PROJECT_NAME
INCLUDE_INSTALL_DIR CMAKE_INSTALL_LIBDIR)
PATH_VARS INCLUDE_INSTALL_DIR CMAKE_INSTALL_LIBDIR)

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

install(
Expand Down
9 changes: 6 additions & 3 deletions cmake/templates/opentelemetry-cpp-config.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -211,10 +211,13 @@ endforeach()
# handle the QUIETLY and REQUIRED arguments and set opentelemetry-cpp_FOUND to
# TRUE if all variables listed contain valid results, e.g. valid file paths.
include("FindPackageHandleStandardArgs")

set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE})

find_package_handle_standard_args(
${CMAKE_FIND_PACKAGE_NAME}
FOUND_VAR ${CMAKE_FIND_PACKAGE_NAME}_FOUND
REQUIRED_VARS OPENTELEMETRY_CPP_INCLUDE_DIRS OPENTELEMETRY_CPP_LIBRARIES)
${CMAKE_FIND_PACKAGE_NAME}
CONFIG_MODE
REQUIRED_VARS OPENTELEMETRY_CPP_INCLUDE_DIRS OPENTELEMETRY_CPP_LIBRARIES)

if(${CMAKE_FIND_PACKAGE_NAME}_FOUND)
set(OPENTELEMETRY_CPP_FOUND
Expand Down
35 changes: 35 additions & 0 deletions cmake/version.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Copyright The OpenTelemetry Authors
# SPDX-License-Identifier: Apache-2.0

set(OTELCPP_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/..")
get_filename_component(OTELCPP_SOURCE_DIR "${OTELCPP_SOURCE_DIR}" ABSOLUTE)
set(OTELCPP_API_VERSION_FILE "${OTELCPP_SOURCE_DIR}/api/include/opentelemetry/version.h")

file(READ "${OTELCPP_API_VERSION_FILE}"
OPENTELEMETRY_CPP_HEADER_VERSION_H)

if(NOT DEFINED OPENTELEMETRY_CPP_HEADER_VERSION_H)
message(FATAL_ERROR "${OTELCPP_API_VERSION_FILE} not found")
endif()

if(OPENTELEMETRY_CPP_HEADER_VERSION_H MATCHES
"OPENTELEMETRY_VERSION[ \t\r\n]+\"?([^\"]+)\"?")
set(OPENTELEMETRY_VERSION ${CMAKE_MATCH_1})
else()
message(
FATAL_ERROR
"OPENTELEMETRY_VERSION not found on ${OTELCPP_API_VERSION_FILE}"
)
endif()

if(OPENTELEMETRY_CPP_HEADER_VERSION_H MATCHES "OPENTELEMETRY_ABI_VERSION_NO[ \t\r\n]+\"?([0-9]+)\"?")
math(EXPR OPENTELEMETRY_ABI_VERSION_DEFAULT ${CMAKE_MATCH_1})
endif()

if(NOT OPENTELEMETRY_VERSION OR OPENTELEMETRY_VERSION VERSION_LESS_EQUAL "0.0.0")
message(FATAL_ERROR "Failed to extract OpenTelemetry C++ version (${OPENTELEMETRY_VERSION}) from ${OTELCPP_API_VERSION_FILE}")
endif()

if(NOT OPENTELEMETRY_ABI_VERSION_DEFAULT)
message(FATAL_ERROR "Failed to extract OpenTelemetry C++ ABI version from ${OTELCPP_API_VERSION_FILE}")
endif()
21 changes: 21 additions & 0 deletions install/test/cmake/fetch_content_test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,27 @@ FetchContent_Declare(
FetchContent_Declare(opentelemetry-cpp SOURCE_DIR ${OPENTELEMETRY_CPP_SRC_DIR})
FetchContent_MakeAvailable(googletest opentelemetry-cpp)

if(NOT DEFINED OPENTELEMETRY_VERSION OR OPENTELEMETRY_VERSION
VERSION_LESS_EQUAL 0.0.0)
message(
FATAL_ERROR
"OpenTelemetry C++ version not set after FetchContent_MakeAvailable(opentelemetry-cpp)."
)
endif()

if(NOT DEFINED OPENTELEMETRY_ABI_VERSION_NO OR OPENTELEMETRY_ABI_VERSION_NO
LESS 1)
message(
FATAL_ERROR
"OpenTelemetry C++ ABI version number not defined in the source directory"
)
endif()

message(
STATUS
"OpenTelemetry C++ version: ${OPENTELEMETRY_VERSION}, ABI version: ${OPENTELEMETRY_ABI_VERSION_NO}"
)

add_executable(
fetch_content_src_test
${OPENTELEMETRY_CPP_SRC_DIR}/install/test/src/test_api.cc
Expand Down
Loading