diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b9838f27c..e8ea2001af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,17 @@ if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.20.0") cmake_policy(SET CMP0117 NEW) endif() -project(opentelemetry-cpp) +set(OPENTELEMETRY_VERSION_NUMBER "1.22.0") +set(OPENTELEMETRY_VERSION_SUFFIX "") +set(OPENTELEMETRY_VERSION + "${OPENTELEMETRY_VERSION_NUMBER}${OPENTELEMETRY_VERSION_SUFFIX}") + +set(OPENTELEMETRY_ABI_VERSION_DEFAULT "1") + +project( + opentelemetry-cpp + VERSION "${OPENTELEMETRY_VERSION_NUMBER}" + LANGUAGES CXX) # Mark variables as used so cmake doesn't complain about them mark_as_advanced(CMAKE_TOOLCHAIN_FILE) @@ -56,9 +66,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. @@ -88,31 +95,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() + set(OPENTELEMETRY_ABI_VERSION_NO "${OPENTELEMETRY_ABI_VERSION_DEFAULT}") 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" - ) -endif() - -message(STATUS "OPENTELEMETRY_VERSION=${OPENTELEMETRY_VERSION}") - option(WITH_NO_DEPRECATED_CODE "Do not include deprecated code" OFF) set(WITH_STL @@ -478,7 +463,7 @@ endif() message(STATUS "---------------------------------------------") message(STATUS "build settings") message(STATUS "---------------------------------------------") -message(STATUS "OpenTelemetry: ${OPENTELEMETRY_VERSION}") +message(STATUS "OpenTelemetry VERSION: ${OPENTELEMETRY_VERSION}") message(STATUS "OpenTelemetry ABI: ${OPENTELEMETRY_ABI_VERSION_NO}") message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") message(STATUS "CXX: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}") @@ -662,3 +647,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) diff --git a/cmake/otel-install-functions.cmake b/cmake/otel-install-functions.cmake index 8d72c12ce5..109a0ed548 100644 --- a/cmake/otel-install-functions.cmake +++ b/cmake/otel-install-functions.cmake @@ -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( diff --git a/cmake/templates/opentelemetry-cpp-config.cmake.in b/cmake/templates/opentelemetry-cpp-config.cmake.in index 46655f8ff6..0503b180fb 100644 --- a/cmake/templates/opentelemetry-cpp-config.cmake.in +++ b/cmake/templates/opentelemetry-cpp-config.cmake.in @@ -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 diff --git a/install/test/cmake/fetch_content_test/CMakeLists.txt b/install/test/cmake/fetch_content_test/CMakeLists.txt index c03e8b245a..116ca58b6a 100644 --- a/install/test/cmake/fetch_content_test/CMakeLists.txt +++ b/install/test/cmake/fetch_content_test/CMakeLists.txt @@ -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