mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-08-13 17:27:08 +02:00
876 lines
29 KiB
Diff
876 lines
29 KiB
Diff
Patch-Source: https://github.com/open-telemetry/opentelemetry-cpp/pull/2163
|
|
--
|
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
index eef100f..59efb0d 100644
|
|
--- a/CMakeLists.txt
|
|
+++ b/CMakeLists.txt
|
|
@@ -18,6 +18,9 @@ project(opentelemetry-cpp)
|
|
# Mark variables as used so cmake doesn't complain about them
|
|
mark_as_advanced(CMAKE_TOOLCHAIN_FILE)
|
|
|
|
+# Prefer cmake CONFIG to auto resolve dependencies.
|
|
+set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE)
|
|
+
|
|
# Don't use customized cmake modules if vcpkg is used to resolve dependence.
|
|
if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/")
|
|
@@ -125,6 +128,8 @@ endif()
|
|
option(OPENTELEMETRY_INSTALL "Whether to install opentelemetry targets"
|
|
${OPENTELEMETRY_INSTALL_default})
|
|
|
|
+include("${PROJECT_SOURCE_DIR}/cmake/tools.cmake")
|
|
+
|
|
if(NOT DEFINED CMAKE_CXX_STANDARD)
|
|
if(WITH_STL)
|
|
# Require at least C++17. C++20 is needed to avoid gsl::span
|
|
@@ -328,9 +333,21 @@ if(WITH_PROMETHEUS)
|
|
endif()
|
|
endif()
|
|
|
|
+if(WITH_ABSEIL)
|
|
+ find_package(absl CONFIG REQUIRED)
|
|
+endif()
|
|
+
|
|
if(WITH_OTLP)
|
|
- set(protobuf_MODULE_COMPATIBLE ON)
|
|
find_package(Protobuf)
|
|
+ if(Protobuf_VERSION AND Protobuf_VERSION VERSION_GREATER_EQUAL "3.22.0")
|
|
+ if(NOT WITH_ABSEIL)
|
|
+ message(
|
|
+ FATAL_ERROR
|
|
+ "Protobuf 3.22 or upper require abseil-cpp(Recommended version: 20230125.3 or upper)"
|
|
+ )
|
|
+ endif()
|
|
+ endif()
|
|
+
|
|
if(WITH_OTLP_GRPC OR (NOT DEFINED WITH_OTLP_GRPC AND NOT DEFINED
|
|
CACHE{WITH_OTLP_GRPC}))
|
|
find_package(gRPC)
|
|
@@ -363,10 +380,14 @@ if(WITH_OTLP)
|
|
)
|
|
endif()
|
|
endif()
|
|
- # Latest Protobuf uses mixed case instead of uppercase
|
|
- if(Protobuf_PROTOC_EXECUTABLE)
|
|
- set(PROTOBUF_PROTOC_EXECUTABLE ${Protobuf_PROTOC_EXECUTABLE})
|
|
- endif()
|
|
+ endif()
|
|
+ # Latest Protobuf imported targets and without legacy module support
|
|
+ if(TARGET protobuf::protoc)
|
|
+ project_build_tools_get_imported_location(PROTOBUF_PROTOC_EXECUTABLE
|
|
+ protobuf::protoc)
|
|
+ elseif(Protobuf_PROTOC_EXECUTABLE)
|
|
+ # Some versions of FindProtobuf.cmake uses mixed case instead of uppercase
|
|
+ set(PROTOBUF_PROTOC_EXECUTABLE ${Protobuf_PROTOC_EXECUTABLE})
|
|
endif()
|
|
include(CMakeDependentOption)
|
|
|
|
@@ -535,7 +556,17 @@ if(BUILD_TESTING)
|
|
# Prefer GTest installed by OS distro, brew or vcpkg package manager
|
|
find_package(GTest REQUIRED)
|
|
endif()
|
|
- include_directories(SYSTEM ${GTEST_INCLUDE_DIRS})
|
|
+ if(NOT GTEST_BOTH_LIBRARIES)
|
|
+ # New GTest package names
|
|
+ if(TARGET GTest::gtest)
|
|
+ set(GTEST_BOTH_LIBRARIES GTest::gtest GTest::gtest_main GTest::gmock)
|
|
+ elseif(TARGET GTest::GTest)
|
|
+ set(GTEST_BOTH_LIBRARIES GTest::GTest GTest::Main)
|
|
+ endif()
|
|
+ endif()
|
|
+ if(GTEST_INCLUDE_DIRS)
|
|
+ include_directories(SYSTEM ${GTEST_INCLUDE_DIRS})
|
|
+ endif()
|
|
message("GTEST_INCLUDE_DIRS = ${GTEST_INCLUDE_DIRS}")
|
|
message("GTEST_BOTH_LIBRARIES = ${GTEST_BOTH_LIBRARIES}")
|
|
enable_testing()
|
|
@@ -606,6 +637,8 @@ if(NOT WITH_API_ONLY)
|
|
endif()
|
|
endif()
|
|
|
|
+include("${PROJECT_SOURCE_DIR}/cmake/patch-imported-config.cmake")
|
|
+
|
|
if(OPENTELEMETRY_INSTALL)
|
|
# Export cmake config and support find_packages(opentelemetry-cpp CONFIG)
|
|
# Write config file for find_packages(opentelemetry-cpp CONFIG)
|
|
diff --git a/api/CMakeLists.txt b/api/CMakeLists.txt
|
|
index 31863b2..da9f69d 100644
|
|
--- a/api/CMakeLists.txt
|
|
+++ b/api/CMakeLists.txt
|
|
@@ -48,8 +48,6 @@ endif()
|
|
|
|
if(WITH_ABSEIL)
|
|
|
|
- find_package(absl CONFIG REQUIRED)
|
|
-
|
|
target_compile_definitions(opentelemetry_api INTERFACE HAVE_ABSEIL)
|
|
target_link_libraries(
|
|
opentelemetry_api INTERFACE absl::bad_variant_access absl::any absl::base
|
|
diff --git a/ci/do_ci.sh b/ci/do_ci.sh
|
|
index 19695d2..cbbb7bc 100755
|
|
--- a/ci/do_ci.sh
|
|
+++ b/ci/do_ci.sh
|
|
@@ -73,12 +73,17 @@ BAZEL_MACOS_TEST_OPTIONS="$BAZEL_MACOS_OPTIONS --test_output=errors"
|
|
|
|
BAZEL_STARTUP_OPTIONS="--output_user_root=$HOME/.cache/bazel"
|
|
|
|
+CMAKE_OPTIONS=(-DCMAKE_BUILD_TYPE=Debug)
|
|
+if [ ! -z "${CXX_STANDARD}" ]; then
|
|
+ CMAKE_OPTIONS=(${CMAKE_OPTIONS[@]} "-DCMAKE_CXX_STANDARD=${CXX_STANDARD}")
|
|
+fi
|
|
+
|
|
export CTEST_OUTPUT_ON_FAILURE=1
|
|
|
|
if [[ "$1" == "cmake.test" ]]; then
|
|
cd "${BUILD_DIR}"
|
|
rm -rf *
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DWITH_PROMETHEUS=ON \
|
|
-DWITH_ZIPKIN=ON \
|
|
-DWITH_JAEGER=ON \
|
|
@@ -93,7 +98,7 @@ if [[ "$1" == "cmake.test" ]]; then
|
|
elif [[ "$1" == "cmake.maintainer.sync.test" ]]; then
|
|
cd "${BUILD_DIR}"
|
|
rm -rf *
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DWITH_OTLP=ON \
|
|
-DWITH_OTLP_HTTP=ON \
|
|
-DWITH_OTLP_HTTP_SSL_PREVIEW=ON \
|
|
@@ -117,7 +122,7 @@ elif [[ "$1" == "cmake.maintainer.sync.test" ]]; then
|
|
elif [[ "$1" == "cmake.maintainer.async.test" ]]; then
|
|
cd "${BUILD_DIR}"
|
|
rm -rf *
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DWITH_OTLP=ON \
|
|
-DWITH_OTLP_HTTP=ON \
|
|
-DWITH_OTLP_HTTP_SSL_PREVIEW=ON \
|
|
@@ -141,7 +146,7 @@ elif [[ "$1" == "cmake.maintainer.async.test" ]]; then
|
|
elif [[ "$1" == "cmake.with_async_export.test" ]]; then
|
|
cd "${BUILD_DIR}"
|
|
rm -rf *
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DWITH_PROMETHEUS=ON \
|
|
-DWITH_ZIPKIN=ON \
|
|
-DWITH_JAEGER=ON \
|
|
@@ -157,7 +162,7 @@ elif [[ "$1" == "cmake.with_async_export.test" ]]; then
|
|
elif [[ "$1" == "cmake.abseil.test" ]]; then
|
|
cd "${BUILD_DIR}"
|
|
rm -rf *
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
|
|
-DWITH_LOGS_PREVIEW=ON \
|
|
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
|
|
@@ -170,7 +175,7 @@ elif [[ "$1" == "cmake.abseil.test" ]]; then
|
|
elif [[ "$1" == "cmake.opentracing_shim.test" ]]; then
|
|
cd "${BUILD_DIR}"
|
|
rm -rf *
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DCMAKE_CXX_FLAGS="-Werror -Wno-error=redundant-move $CXXFLAGS" \
|
|
-DWITH_OPENTRACING=ON \
|
|
"${SRC_DIR}"
|
|
@@ -180,7 +185,7 @@ elif [[ "$1" == "cmake.opentracing_shim.test" ]]; then
|
|
elif [[ "$1" == "cmake.c++20.test" ]]; then
|
|
cd "${BUILD_DIR}"
|
|
rm -rf *
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
|
|
-DWITH_ASYNC_EXPORT_PREVIEW=ON \
|
|
-DCMAKE_CXX_STANDARD=20 \
|
|
@@ -191,7 +196,7 @@ elif [[ "$1" == "cmake.c++20.test" ]]; then
|
|
elif [[ "$1" == "cmake.c++20.stl.test" ]]; then
|
|
cd "${BUILD_DIR}"
|
|
rm -rf *
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
|
|
-DWITH_LOGS_PREVIEW=ON \
|
|
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
|
|
@@ -206,7 +211,7 @@ elif [[ "$1" == "cmake.legacy.test" ]]; then
|
|
rm -rf *
|
|
export BUILD_ROOT="${BUILD_DIR}"
|
|
${SRC_DIR}/tools/build-benchmark.sh
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
|
|
-DCMAKE_CXX_STANDARD=11 \
|
|
"${SRC_DIR}"
|
|
@@ -218,7 +223,7 @@ elif [[ "$1" == "cmake.legacy.exporter.otprotocol.test" ]]; then
|
|
rm -rf *
|
|
export BUILD_ROOT="${BUILD_DIR}"
|
|
${SRC_DIR}/tools/build-benchmark.sh
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DCMAKE_CXX_STANDARD=11 \
|
|
-DWITH_OTLP=ON \
|
|
-DWITH_OTLP_HTTP=ON \
|
|
@@ -233,7 +238,10 @@ elif [[ "$1" == "cmake.legacy.exporter.otprotocol.test" ]]; then
|
|
elif [[ "$1" == "cmake.exporter.otprotocol.test" ]]; then
|
|
cd "${BUILD_DIR}"
|
|
rm -rf *
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ if [[ ! -z "${WITH_ABSEIL}" ]]; then
|
|
+ CMAKE_OPTIONS=(${CMAKE_OPTIONS[@]} "-DWITH_ABSEIL=${WITH_ABSEIL}")
|
|
+ fi
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DWITH_OTLP=ON \
|
|
-DWITH_OTLP_HTTP=ON \
|
|
"${SRC_DIR}"
|
|
@@ -246,7 +254,7 @@ elif [[ "$1" == "cmake.exporter.otprotocol.test" ]]; then
|
|
elif [[ "$1" == "cmake.exporter.otprotocol.with_async_export.test" ]]; then
|
|
cd "${BUILD_DIR}"
|
|
rm -rf *
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DWITH_OTLP=ON \
|
|
-DWITH_OTLP_HTTP=ON \
|
|
-DWITH_ASYNC_EXPORT_PREVIEW=ON \
|
|
@@ -260,7 +268,7 @@ elif [[ "$1" == "cmake.exporter.otprotocol.with_async_export.test" ]]; then
|
|
elif [[ "$1" == "cmake.do_not_install.test" ]]; then
|
|
cd "${BUILD_DIR}"
|
|
rm -rf *
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DWITH_OTLP=ON \
|
|
-DWITH_OTLP_HTTP=ON \
|
|
-DWITH_ASYNC_EXPORT_PREVIEW=ON \
|
|
@@ -293,7 +301,7 @@ EOF
|
|
-static-libgcc \
|
|
-Wl,--version-script=${PWD}/export.map \
|
|
"
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
|
|
-DCMAKE_EXE_LINKER_FLAGS="$LINKER_FLAGS" \
|
|
-DCMAKE_SHARED_LINKER_FLAGS="$LINKER_FLAGS" \
|
|
@@ -304,7 +312,7 @@ EOF
|
|
# Verify we can load the plugin
|
|
cd "${BUILD_DIR}"
|
|
rm -rf *
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
|
|
"${SRC_DIR}"
|
|
make load_plugin_example
|
|
@@ -386,7 +394,7 @@ elif [[ "$1" == "format" ]]; then
|
|
elif [[ "$1" == "code.coverage" ]]; then
|
|
cd "${BUILD_DIR}"
|
|
rm -rf *
|
|
- cmake -DCMAKE_BUILD_TYPE=Debug \
|
|
+ cmake ${CMAKE_OPTIONS[@]} \
|
|
-DCMAKE_CXX_FLAGS="-Werror --coverage $CXXFLAGS" \
|
|
"${SRC_DIR}"
|
|
make
|
|
diff --git a/ci/install_abseil.sh b/ci/install_abseil.sh
|
|
index 7764b4d..3bc69df 100755
|
|
--- a/ci/install_abseil.sh
|
|
+++ b/ci/install_abseil.sh
|
|
@@ -3,19 +3,27 @@
|
|
# Copyright The OpenTelemetry Authors
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
-set -e
|
|
+set -ex
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
+[ -z "${ABSEIL_CPP_VERSION}" ] && export ABSEIL_CPP_VERSION="20220623.1"
|
|
|
|
BUILD_DIR=/tmp/
|
|
INSTALL_DIR=/usr/local/
|
|
-TAG=20220623.1
|
|
pushd $BUILD_DIR
|
|
-git clone --depth=1 -b ${TAG} https://github.com/abseil/abseil-cpp.git
|
|
+git clone --depth=1 -b ${ABSEIL_CPP_VERSION} https://github.com/abseil/abseil-cpp.git
|
|
cd abseil-cpp
|
|
+ABSEIL_CPP_BUILD_OPTIONS=(
|
|
+ "-DBUILD_TESTING=OFF"
|
|
+ "-DCMAKE_POSITION_INDEPENDENT_CODE=ON"
|
|
+ "-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR"
|
|
+)
|
|
+
|
|
+if [ ! -z "${CXX_STANDARD}" ]; then
|
|
+ ABSEIL_CPP_BUILD_OPTIONS=(${ABSEIL_CPP_BUILD_OPTIONS[@]} "-DCMAKE_CXX_STANDARD=${CXX_STANDARD}")
|
|
+fi
|
|
+
|
|
mkdir build && pushd build
|
|
-cmake -DBUILD_TESTING=OFF -DCMAKE_CXX_STANDARD=11 \
|
|
- -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
|
|
- ..
|
|
+cmake ${ABSEIL_CPP_BUILD_OPTIONS[@]} ..
|
|
make -j $(nproc)
|
|
make install
|
|
popd
|
|
diff --git a/ci/install_protobuf.sh b/ci/install_protobuf.sh
|
|
index dde9411..3fb18e7 100755
|
|
--- a/ci/install_protobuf.sh
|
|
+++ b/ci/install_protobuf.sh
|
|
@@ -31,12 +31,41 @@ set -e
|
|
# when calling this script
|
|
#
|
|
|
|
-export CPP_PROTOBUF_VERSION="3.${PROTOBUF_VERSION}"
|
|
+CPP_PROTOBUF_BUILD_OPTIONS=(
|
|
+ "-DCMAKE_POSITION_INDEPENDENT_CODE=ON"
|
|
+ "-Dprotobuf_BUILD_TESTS=OFF"
|
|
+ "-Dprotobuf_BUILD_EXAMPLES=OFF"
|
|
+)
|
|
|
|
-cd /
|
|
-wget https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protobuf-cpp-${CPP_PROTOBUF_VERSION}.tar.gz
|
|
-tar zxf protobuf-cpp-${CPP_PROTOBUF_VERSION}.tar.gz --no-same-owner
|
|
-cd protobuf-${CPP_PROTOBUF_VERSION}
|
|
-./configure
|
|
-make -j $(nproc) && make install
|
|
+if [ ! -z "${CXX_STANDARD}" ]; then
|
|
+ CPP_PROTOBUF_BUILD_OPTIONS=(${CPP_PROTOBUF_BUILD_OPTIONS[@]} "-DCMAKE_CXX_STANDARD=${CXX_STANDARD}")
|
|
+fi
|
|
+
|
|
+# After protobuf 22/4.22, protobuf depends on absl and we can use
|
|
+# "-Dprotobuf_ABSL_PROVIDER=package" to tell protobuf to find absl from the
|
|
+# system. Otherwise, it will build absl from source.
|
|
+# 4.XX.YY and 3.XX.YY are alias of XX.YY, and source pacakges are moved into the
|
|
+# tag of XX.YY and without -cpp suffix from protobuf v22.
|
|
+if [[ ${PROTOBUF_VERSION/.*/} -ge 22 ]]; then
|
|
+ export CPP_PROTOBUF_VERSION="${PROTOBUF_VERSION}"
|
|
+ CPP_PROTOBUF_PACKAGE_NAME="protobuf-${CPP_PROTOBUF_VERSION}"
|
|
+ CPP_PROTOBUF_BUILD_OPTIONS=(${CPP_PROTOBUF_BUILD_OPTIONS[@]} "-Dprotobuf_ABSL_PROVIDER=package")
|
|
+else
|
|
+ export CPP_PROTOBUF_VERSION="3.${PROTOBUF_VERSION}"
|
|
+ CPP_PROTOBUF_PACKAGE_NAME="protobuf-cpp-${CPP_PROTOBUF_VERSION}"
|
|
+fi
|
|
+
|
|
+cd /tmp
|
|
+wget https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/${CPP_PROTOBUF_PACKAGE_NAME}.tar.gz
|
|
+tar zxf ${CPP_PROTOBUF_PACKAGE_NAME}.tar.gz --no-same-owner
|
|
+
|
|
+mkdir protobuf-${CPP_PROTOBUF_VERSION}/build && pushd protobuf-${CPP_PROTOBUF_VERSION}/build
|
|
+if [ -e "../CMakeLists.txt" ]; then
|
|
+ cmake .. ${CPP_PROTOBUF_BUILD_OPTIONS[@]}
|
|
+else
|
|
+ cmake ../cmake ${CPP_PROTOBUF_BUILD_OPTIONS[@]}
|
|
+fi
|
|
+cmake --build . -j $(nproc)
|
|
+cmake --install .
|
|
+popd
|
|
ldconfig
|
|
diff --git a/ci/setup_grpc.sh b/ci/setup_grpc.sh
|
|
index d6e92d4..eceb4b8 100755
|
|
--- a/ci/setup_grpc.sh
|
|
+++ b/ci/setup_grpc.sh
|
|
@@ -22,22 +22,35 @@ while getopts ":v:i:r:s:" o; do
|
|
i)
|
|
install_dir=${OPTARG}
|
|
;;
|
|
+ p)
|
|
+ if [ "${OPTARG}" == "protobuf" ]; then
|
|
+ GRPC_BUILD_OPTIONS=(${GRPC_BUILD_OPTIONS[@]} "-DgRPC_PROTOBUF_PROVIDER=package")
|
|
+ elif [ "${OPTARG}" == "abseil-cpp" ]; then
|
|
+ GRPC_BUILD_OPTIONS=(${GRPC_BUILD_OPTIONS[@]} "-DgRPC_ABSL_PROVIDER=package")
|
|
+ build_internal_abseil_cpp=0
|
|
+ fi
|
|
+ ;;
|
|
r)
|
|
install_grpc_version=${OPTARG}
|
|
;;
|
|
+ m)
|
|
+ install_grpc_version=${modern_grpc_version}
|
|
+ ;;
|
|
s)
|
|
std_version=${OPTARG}
|
|
;;
|
|
*)
|
|
usage
|
|
+ exit 1;
|
|
;;
|
|
esac
|
|
done
|
|
+
|
|
if [ -z "${gcc_version}" ]; then
|
|
gcc_version=`gcc --version | awk '/gcc/ {print $NF}'`
|
|
fi
|
|
-if [[ "${gcc_version}" < "${gcc_version_for_new_grpc}" ]]; then
|
|
- echo "less"
|
|
+if [[ "${gcc_version}" < "${gcc_version_for_new_grpc}" ]] && [[ "${gcc_version:1:1}" == "." ]]; then
|
|
+ echo "${gcc_version} less than ${gcc_version_for_new_grpc}"
|
|
std_version='11'
|
|
install_grpc_version=${old_grpc_version}
|
|
fi
|
|
diff --git a/cmake/opentelemetry-proto.cmake b/cmake/opentelemetry-proto.cmake
|
|
index 1aa1ba0..99e709e 100644
|
|
--- a/cmake/opentelemetry-proto.cmake
|
|
+++ b/cmake/opentelemetry-proto.cmake
|
|
@@ -65,8 +65,6 @@ else()
|
|
endif()
|
|
endif()
|
|
|
|
-include(${PROJECT_SOURCE_DIR}/cmake/proto-options-patch.cmake)
|
|
-
|
|
set(COMMON_PROTO "${PROTO_PATH}/opentelemetry/proto/common/v1/common.proto")
|
|
set(RESOURCE_PROTO
|
|
"${PROTO_PATH}/opentelemetry/proto/resource/v1/resource.proto")
|
|
diff --git a/cmake/patch-imported-config.cmake b/cmake/patch-imported-config.cmake
|
|
new file mode 100644
|
|
index 0000000..b66e9f0
|
|
--- /dev/null
|
|
+++ b/cmake/patch-imported-config.cmake
|
|
@@ -0,0 +1,142 @@
|
|
+# Copyright The OpenTelemetry Authors
|
|
+# SPDX-License-Identifier: Apache-2.0
|
|
+
|
|
+# Some prebuilt or installed targets may have different CONFIG settings than
|
|
+# what we use to configure otel-cpp. This file applies patches to the imported
|
|
+# targets in order to use compatible CONFIG settings for fallback.
|
|
+
|
|
+# Common dependencies
|
|
+include(cmake/proto-options-patch.cmake)
|
|
+project_build_tools_patch_default_imported_config(ZLIB::ZLIB)
|
|
+
|
|
+# protobuf targets
|
|
+if(Protobuf_FOUND OR PROTOBUF_FOUND)
|
|
+ project_build_tools_patch_default_imported_config(
|
|
+ utf8_range::utf8_range utf8_range::utf8_validity protobuf::libprotobuf-lite
|
|
+ protobuf::libprotobuf protobuf::libprotoc)
|
|
+endif()
|
|
+
|
|
+# cares targets
|
|
+if(TARGET c-ares::cares)
|
|
+ project_build_tools_patch_default_imported_config(c-ares::cares)
|
|
+endif()
|
|
+
|
|
+# curl targets
|
|
+if(TARGET CURL::libcurl)
|
|
+ project_build_tools_patch_default_imported_config(CURL::libcurl)
|
|
+endif()
|
|
+
|
|
+# abseil targets
|
|
+if(WITH_ABSEIL)
|
|
+ project_build_tools_patch_default_imported_config(
|
|
+ absl::bad_variant_access
|
|
+ absl::raw_logging_internal
|
|
+ absl::log_severity
|
|
+ absl::log_internal_check_op
|
|
+ absl::log_internal_nullguard
|
|
+ absl::strings
|
|
+ absl::strings_internal
|
|
+ absl::base
|
|
+ absl::spinlock_wait
|
|
+ absl::int128
|
|
+ absl::throw_delegate
|
|
+ absl::log_internal_message
|
|
+ absl::examine_stack
|
|
+ absl::stacktrace
|
|
+ absl::debugging_internal
|
|
+ absl::symbolize
|
|
+ absl::demangle_internal
|
|
+ absl::malloc_internal
|
|
+ absl::log_internal_format
|
|
+ absl::log_internal_globals
|
|
+ absl::time
|
|
+ absl::civil_time
|
|
+ absl::time_zone
|
|
+ absl::str_format_internal
|
|
+ absl::log_internal_proto
|
|
+ absl::log_internal_log_sink_set
|
|
+ absl::log_globals
|
|
+ absl::hash
|
|
+ absl::city
|
|
+ absl::bad_optional_access
|
|
+ absl::low_level_hash
|
|
+ absl::log_entry
|
|
+ absl::log_sink
|
|
+ absl::synchronization
|
|
+ absl::graphcycles_internal
|
|
+ absl::strerror
|
|
+ absl::log_internal_conditions
|
|
+ absl::cord
|
|
+ absl::cord_internal
|
|
+ absl::crc_cord_state
|
|
+ absl::crc32c
|
|
+ absl::crc_cpu_detect
|
|
+ absl::crc_internal
|
|
+ absl::cordz_functions
|
|
+ absl::exponential_biased
|
|
+ absl::cordz_info
|
|
+ absl::cordz_handle
|
|
+ absl::leak_check
|
|
+ absl::die_if_null
|
|
+ absl::flags
|
|
+ absl::flags_commandlineflag
|
|
+ absl::flags_commandlineflag_internal
|
|
+ absl::flags_config
|
|
+ absl::flags_program_name
|
|
+ absl::flags_internal
|
|
+ absl::flags_marshalling
|
|
+ absl::flags_reflection
|
|
+ absl::flags_private_handle_accessor
|
|
+ absl::raw_hash_set
|
|
+ absl::hashtablez_sampler
|
|
+ absl::log_initialize
|
|
+ absl::status
|
|
+ absl::statusor)
|
|
+endif()
|
|
+
|
|
+# gRPC targets
|
|
+if(TARGET gRPC::grpc++)
|
|
+ project_build_tools_patch_default_imported_config(
|
|
+ gRPC::cares
|
|
+ gRPC::re2
|
|
+ gRPC::ssl
|
|
+ gRPC::crypto
|
|
+ gRPC::zlibstatic
|
|
+ gRPC::address_sorting
|
|
+ gRPC::gpr
|
|
+ gRPC::grpc
|
|
+ gRPC::grpc_unsecure
|
|
+ gRPC::grpc++
|
|
+ gRPC::grpc++_alts
|
|
+ gRPC::grpc++_error_details
|
|
+ gRPC::grpc++_reflection
|
|
+ gRPC::grpc++_unsecure
|
|
+ gRPC::grpc_authorization_provider
|
|
+ gRPC::grpc_plugin_support
|
|
+ gRPC::grpcpp_channelz
|
|
+ gRPC::upb)
|
|
+endif()
|
|
+
|
|
+# prometheus targets
|
|
+if(TARGET prometheus-cpp::core)
|
|
+ project_build_tools_patch_default_imported_config(
|
|
+ prometheus-cpp::core prometheus-cpp::pull prometheus-cpp::push)
|
|
+endif()
|
|
+
|
|
+# civetweb targets
|
|
+if(TARGET civetweb::civetweb)
|
|
+ project_build_tools_patch_default_imported_config(
|
|
+ civetweb::civetweb civetweb::server civetweb::civetweb-cpp)
|
|
+endif()
|
|
+
|
|
+if(BUILD_TESTING)
|
|
+ project_build_tools_patch_default_imported_config(
|
|
+ GTest::gtest
|
|
+ GTest::gtest_main
|
|
+ GTest::gmock
|
|
+ GTest::gmock_main
|
|
+ GTest::GTest
|
|
+ GTest::Main
|
|
+ benchmark::benchmark
|
|
+ benchmark::benchmark_main)
|
|
+endif()
|
|
diff --git a/cmake/proto-options-patch.cmake b/cmake/proto-options-patch.cmake
|
|
index 9787205..dee9a94 100644
|
|
--- a/cmake/proto-options-patch.cmake
|
|
+++ b/cmake/proto-options-patch.cmake
|
|
@@ -117,3 +117,71 @@ function(project_build_tools_get_imported_location OUTPUT_VAR_NAME TARGET_NAME)
|
|
PARENT_SCOPE)
|
|
endif()
|
|
endfunction()
|
|
+
|
|
+function(project_build_tools_patch_default_imported_config)
|
|
+ set(PATCH_VARS
|
|
+ IMPORTED_IMPLIB
|
|
+ IMPORTED_LIBNAME
|
|
+ IMPORTED_LINK_DEPENDENT_LIBRARIES
|
|
+ IMPORTED_LINK_INTERFACE_LANGUAGES
|
|
+ IMPORTED_LINK_INTERFACE_LIBRARIES
|
|
+ IMPORTED_LINK_INTERFACE_MULTIPLICITY
|
|
+ IMPORTED_LOCATION
|
|
+ IMPORTED_NO_SONAME
|
|
+ IMPORTED_OBJECTS
|
|
+ IMPORTED_SONAME)
|
|
+ foreach(TARGET_NAME ${ARGN})
|
|
+ if(TARGET ${TARGET_NAME})
|
|
+ get_target_property(IS_IMPORTED_TARGET ${TARGET_NAME} IMPORTED)
|
|
+ if(NOT IS_IMPORTED_TARGET)
|
|
+ continue()
|
|
+ endif()
|
|
+
|
|
+ if(CMAKE_VERSION VERSION_LESS "3.19.0")
|
|
+ get_target_property(TARGET_TYPE_NAME ${TARGET_NAME} TYPE)
|
|
+ if(TARGET_TYPE_NAME STREQUAL "INTERFACE_LIBRARY")
|
|
+ continue()
|
|
+ endif()
|
|
+ endif()
|
|
+
|
|
+ get_target_property(DO_NOT_OVERWRITE ${TARGET_NAME} IMPORTED_LOCATION)
|
|
+ if(DO_NOT_OVERWRITE)
|
|
+ continue()
|
|
+ endif()
|
|
+
|
|
+ # MSVC's STL and debug level must match the target, so we can only move
|
|
+ # out IMPORTED_LOCATION_NOCONFIG
|
|
+ if(MSVC)
|
|
+ set(PATCH_IMPORTED_CONFIGURATION "NOCONFIG")
|
|
+ else()
|
|
+ get_target_property(PATCH_IMPORTED_CONFIGURATION ${TARGET_NAME}
|
|
+ IMPORTED_CONFIGURATIONS)
|
|
+ endif()
|
|
+
|
|
+ if(NOT PATCH_IMPORTED_CONFIGURATION)
|
|
+ continue()
|
|
+ endif()
|
|
+
|
|
+ get_target_property(PATCH_TARGET_LOCATION ${TARGET_NAME}
|
|
+ "IMPORTED_LOCATION_${PATCH_IMPORTED_CONFIGURATION}")
|
|
+ if(NOT PATCH_TARGET_LOCATION)
|
|
+ continue()
|
|
+ endif()
|
|
+
|
|
+ foreach(PATCH_IMPORTED_KEY IN LISTS PATCH_VARS)
|
|
+ get_target_property(
|
|
+ PATCH_IMPORTED_VALUE ${TARGET_NAME}
|
|
+ "${PATCH_IMPORTED_KEY}_${PATCH_IMPORTED_CONFIGURATION}")
|
|
+ if(PATCH_IMPORTED_VALUE)
|
|
+ set_target_properties(
|
|
+ ${TARGET_NAME} PROPERTIES "${PATCH_IMPORTED_KEY}"
|
|
+ "${PATCH_IMPORTED_VALUE}")
|
|
+ message(
|
|
+ STATUS
|
|
+ "Patch: ${TARGET_NAME} ${PATCH_IMPORTED_KEY} will use ${PATCH_IMPORTED_KEY}_${PATCH_IMPORTED_CONFIGURATION}(\"${PATCH_IMPORTED_VALUE}\") by default."
|
|
+ )
|
|
+ endif()
|
|
+ endforeach()
|
|
+ endif()
|
|
+ endforeach()
|
|
+endfunction()
|
|
diff --git a/cmake/tools.cmake b/cmake/tools.cmake
|
|
new file mode 100644
|
|
index 0000000..9787205
|
|
--- /dev/null
|
|
+++ b/cmake/tools.cmake
|
|
@@ -0,0 +1,119 @@
|
|
+# Copyright The OpenTelemetry Authors
|
|
+# SPDX-License-Identifier: Apache-2.0
|
|
+
|
|
+macro(check_append_cxx_compiler_flag OUTPUT_VAR)
|
|
+ foreach(CHECK_FLAG ${ARGN})
|
|
+ check_cxx_compiler_flag(${CHECK_FLAG}
|
|
+ "check_cxx_compiler_flag_${CHECK_FLAG}")
|
|
+ if(check_cxx_compiler_flag_${CHECK_FLAG})
|
|
+ list(APPEND ${OUTPUT_VAR} ${CHECK_FLAG})
|
|
+ endif()
|
|
+ endforeach()
|
|
+endmacro()
|
|
+
|
|
+if(NOT PATCH_PROTOBUF_SOURCES_OPTIONS_SET)
|
|
+ if(MSVC)
|
|
+ unset(PATCH_PROTOBUF_SOURCES_OPTIONS CACHE)
|
|
+ set(PATCH_PROTOBUF_SOURCES_OPTIONS /wd4244 /wd4251 /wd4267 /wd4309)
|
|
+
|
|
+ if(MSVC_VERSION GREATER_EQUAL 1922)
|
|
+ # see
|
|
+ # https://docs.microsoft.com/en-us/cpp/overview/cpp-conformance-improvements?view=vs-2019#improvements_162
|
|
+ # for detail
|
|
+ list(APPEND PATCH_PROTOBUF_SOURCES_OPTIONS /wd5054)
|
|
+ endif()
|
|
+
|
|
+ if(MSVC_VERSION GREATER_EQUAL 1925)
|
|
+ list(APPEND PATCH_PROTOBUF_SOURCES_OPTIONS /wd4996)
|
|
+ endif()
|
|
+
|
|
+ if(MSVC_VERSION LESS 1910)
|
|
+ list(APPEND PATCH_PROTOBUF_SOURCES_OPTIONS /wd4800)
|
|
+ endif()
|
|
+ else()
|
|
+ unset(PATCH_PROTOBUF_SOURCES_OPTIONS CACHE)
|
|
+ include(CheckCXXCompilerFlag)
|
|
+ check_append_cxx_compiler_flag(
|
|
+ PATCH_PROTOBUF_SOURCES_OPTIONS -Wno-type-limits
|
|
+ -Wno-deprecated-declarations -Wno-unused-parameter)
|
|
+ endif()
|
|
+ set(PATCH_PROTOBUF_SOURCES_OPTIONS_SET TRUE)
|
|
+ if(PATCH_PROTOBUF_SOURCES_OPTIONS)
|
|
+ set(PATCH_PROTOBUF_SOURCES_OPTIONS
|
|
+ ${PATCH_PROTOBUF_SOURCES_OPTIONS}
|
|
+ CACHE INTERNAL
|
|
+ "Options to disable warning of generated protobuf sources" FORCE)
|
|
+ endif()
|
|
+endif()
|
|
+
|
|
+function(patch_protobuf_sources)
|
|
+ if(PATCH_PROTOBUF_SOURCES_OPTIONS)
|
|
+ foreach(PROTO_SRC ${ARGN})
|
|
+ unset(PROTO_SRC_OPTIONS)
|
|
+ get_source_file_property(PROTO_SRC_OPTIONS ${PROTO_SRC} COMPILE_OPTIONS)
|
|
+ if(PROTO_SRC_OPTIONS)
|
|
+ list(APPEND PROTO_SRC_OPTIONS ${PATCH_PROTOBUF_SOURCES_OPTIONS})
|
|
+ else()
|
|
+ set(PROTO_SRC_OPTIONS ${PATCH_PROTOBUF_SOURCES_OPTIONS})
|
|
+ endif()
|
|
+
|
|
+ set_source_files_properties(
|
|
+ ${PROTO_SRC} PROPERTIES COMPILE_OPTIONS "${PROTO_SRC_OPTIONS}")
|
|
+ endforeach()
|
|
+ unset(PROTO_SRC)
|
|
+ unset(PROTO_SRC_OPTIONS)
|
|
+ endif()
|
|
+endfunction()
|
|
+
|
|
+function(patch_protobuf_targets)
|
|
+ if(PATCH_PROTOBUF_SOURCES_OPTIONS)
|
|
+ foreach(PROTO_TARGET ${ARGN})
|
|
+ unset(PROTO_TARGET_OPTIONS)
|
|
+ get_target_property(PROTO_TARGET_OPTIONS ${PROTO_TARGET} COMPILE_OPTIONS)
|
|
+ if(PROTO_TARGET_OPTIONS)
|
|
+ list(APPEND PROTO_TARGET_OPTIONS ${PATCH_PROTOBUF_SOURCES_OPTIONS})
|
|
+ else()
|
|
+ set(PROTO_TARGET_OPTIONS ${PATCH_PROTOBUF_SOURCES_OPTIONS})
|
|
+ endif()
|
|
+
|
|
+ set_target_properties(
|
|
+ ${PROTO_TARGET} PROPERTIES COMPILE_OPTIONS "${PROTO_TARGET_OPTIONS}")
|
|
+ endforeach()
|
|
+ unset(PROTO_TARGET)
|
|
+ unset(PROTO_TARGET_OPTIONS)
|
|
+ endif()
|
|
+endfunction()
|
|
+
|
|
+function(project_build_tools_get_imported_location OUTPUT_VAR_NAME TARGET_NAME)
|
|
+ if(CMAKE_BUILD_TYPE)
|
|
+ string(TOUPPER "IMPORTED_LOCATION_${CMAKE_BUILD_TYPE}"
|
|
+ TRY_SPECIFY_IMPORTED_LOCATION)
|
|
+ get_target_property(${OUTPUT_VAR_NAME} ${TARGET_NAME}
|
|
+ ${TRY_SPECIFY_IMPORTED_LOCATION})
|
|
+ endif()
|
|
+ if(NOT ${OUTPUT_VAR_NAME})
|
|
+ get_target_property(${OUTPUT_VAR_NAME} ${TARGET_NAME} IMPORTED_LOCATION)
|
|
+ endif()
|
|
+ if(NOT ${OUTPUT_VAR_NAME})
|
|
+ get_target_property(
|
|
+ project_build_tools_get_imported_location_IMPORTED_CONFIGURATIONS
|
|
+ ${TARGET_NAME} IMPORTED_CONFIGURATIONS)
|
|
+ foreach(
|
|
+ project_build_tools_get_imported_location_IMPORTED_CONFIGURATION IN
|
|
+ LISTS project_build_tools_get_imported_location_IMPORTED_CONFIGURATIONS)
|
|
+ get_target_property(
|
|
+ ${OUTPUT_VAR_NAME}
|
|
+ ${TARGET_NAME}
|
|
+ "IMPORTED_LOCATION_${project_build_tools_get_imported_location_IMPORTED_CONFIGURATION}"
|
|
+ )
|
|
+ if(${OUTPUT_VAR_NAME})
|
|
+ break()
|
|
+ endif()
|
|
+ endforeach()
|
|
+ endif()
|
|
+ if(${OUTPUT_VAR_NAME})
|
|
+ set(${OUTPUT_VAR_NAME}
|
|
+ ${${OUTPUT_VAR_NAME}}
|
|
+ PARENT_SCOPE)
|
|
+ endif()
|
|
+endfunction()
|
|
diff --git a/examples/grpc/CMakeLists.txt b/examples/grpc/CMakeLists.txt
|
|
index 1ea1c9b..938a009 100644
|
|
--- a/examples/grpc/CMakeLists.txt
|
|
+++ b/examples/grpc/CMakeLists.txt
|
|
@@ -23,7 +23,6 @@ add_custom_command(
|
|
add_library(example_grpc_proto ${example_grpc_srcs} ${example_grpc_hdrs}
|
|
${example_proto_srcs} ${example_proto_hdrs})
|
|
|
|
-include(${PROJECT_SOURCE_DIR}/cmake/proto-options-patch.cmake)
|
|
patch_protobuf_targets(example_grpc_proto)
|
|
|
|
include_directories(
|
|
@@ -33,16 +32,20 @@ include_directories(
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
if(TARGET protobuf::libprotobuf)
|
|
- target_link_libraries(example_grpc_proto gRPC::grpc++ protobuf::libprotobuf)
|
|
+ target_link_libraries(example_grpc_proto PUBLIC gRPC::grpc++
|
|
+ protobuf::libprotobuf)
|
|
else()
|
|
- target_include_directories(example_grpc_proto ${Protobuf_INCLUDE_DIRS})
|
|
- target_link_libraries(example_grpc_proto ${Protobuf_LIBRARIES})
|
|
+ target_include_directories(example_grpc_proto PUBLIC ${Protobuf_INCLUDE_DIRS})
|
|
+ target_link_libraries(example_grpc_proto PUBLIC gRPC::grpc++
|
|
+ ${Protobuf_LIBRARIES})
|
|
+endif()
|
|
+if(WITH_ABSEIL)
|
|
+ target_link_libraries(example_grpc_proto PUBLIC absl::bad_variant_access)
|
|
endif()
|
|
|
|
foreach(_target client server)
|
|
add_executable(${_target} "${_target}.cc")
|
|
- target_link_libraries(
|
|
- ${_target} example_grpc_proto protobuf::libprotobuf gRPC::grpc++
|
|
- opentelemetry_trace opentelemetry_exporter_ostream_span)
|
|
+ target_link_libraries(${_target} example_grpc_proto opentelemetry_trace
|
|
+ opentelemetry_exporter_ostream_span)
|
|
patch_protobuf_targets(${_target})
|
|
endforeach()
|
|
diff --git a/exporters/otlp/BUILD b/exporters/otlp/BUILD
|
|
index 98ae13e..844bd5a 100644
|
|
--- a/exporters/otlp/BUILD
|
|
+++ b/exporters/otlp/BUILD
|
|
@@ -128,6 +128,7 @@ cc_library(
|
|
"//ext/src/http/client/curl:http_client_curl",
|
|
"//sdk:headers",
|
|
"@com_github_opentelemetry_proto//:common_proto_cc",
|
|
+ "@com_google_absl//absl/strings",
|
|
"@github_nlohmann_json//:json",
|
|
],
|
|
)
|
|
diff --git a/exporters/otlp/CMakeLists.txt b/exporters/otlp/CMakeLists.txt
|
|
index 585e253..3b42252 100644
|
|
--- a/exporters/otlp/CMakeLists.txt
|
|
+++ b/exporters/otlp/CMakeLists.txt
|
|
@@ -104,6 +104,10 @@ if(WITH_OTLP_HTTP)
|
|
opentelemetry_exporter_otlp_http_client
|
|
PUBLIC opentelemetry_sdk opentelemetry_proto opentelemetry_http_client_curl
|
|
nlohmann_json::nlohmann_json)
|
|
+ if(TARGET absl::strings)
|
|
+ target_link_libraries(opentelemetry_exporter_otlp_http_client
|
|
+ PUBLIC absl::strings)
|
|
+ endif()
|
|
if(nlohmann_json_clone)
|
|
add_dependencies(opentelemetry_exporter_otlp_http_client
|
|
nlohmann_json::nlohmann_json)
|
|
diff --git a/exporters/otlp/src/otlp_http_client.cc b/exporters/otlp/src/otlp_http_client.cc
|
|
index 5cbc659..a9e5777 100644
|
|
--- a/exporters/otlp/src/otlp_http_client.cc
|
|
+++ b/exporters/otlp/src/otlp_http_client.cc
|
|
@@ -17,13 +17,15 @@
|
|
#include "google/protobuf/message.h"
|
|
#include "google/protobuf/reflection.h"
|
|
#include "google/protobuf/stubs/common.h"
|
|
-#include "google/protobuf/stubs/stringpiece.h"
|
|
#include "nlohmann/json.hpp"
|
|
|
|
-#if defined(GOOGLE_PROTOBUF_VERSION) && GOOGLE_PROTOBUF_VERSION >= 3007000
|
|
+#if defined(HAVE_ABSEIL)
|
|
+# include "absl/strings/escaping.h"
|
|
+#elif defined(GOOGLE_PROTOBUF_VERSION) && GOOGLE_PROTOBUF_VERSION >= 3007000
|
|
# include "google/protobuf/stubs/strutil.h"
|
|
#else
|
|
# include "google/protobuf/stubs/port.h"
|
|
+# include "google/protobuf/stubs/stringpiece.h"
|
|
namespace google
|
|
{
|
|
namespace protobuf
|
|
@@ -414,14 +416,22 @@ static std::string BytesMapping(const std::string &bytes,
|
|
else
|
|
{
|
|
std::string base64_value;
|
|
+#if defined(HAVE_ABSEIL)
|
|
+ absl::Base64Escape(bytes, &base64_value);
|
|
+#else
|
|
google::protobuf::Base64Escape(bytes, &base64_value);
|
|
+#endif
|
|
return base64_value;
|
|
}
|
|
}
|
|
case JsonBytesMappingKind::kBase64: {
|
|
// Base64 is the default bytes mapping of protobuf
|
|
std::string base64_value;
|
|
+#if defined(HAVE_ABSEIL)
|
|
+ absl::Base64Escape(bytes, &base64_value);
|
|
+#else
|
|
google::protobuf::Base64Escape(bytes, &base64_value);
|
|
+#endif
|
|
return base64_value;
|
|
}
|
|
case JsonBytesMappingKind::kHex:
|