From 47dafe59b8598b772bb1b9fca67cee5124473ae2 Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Wed, 26 Aug 2026 14:42:37 -0400 Subject: [PATCH 1/6] Update CMake and Bazel build files to add the configuration_yaml target and update opentelemetry_configuration to be an interface target to all config libraries --- sdk/CMakeLists.txt | 1 + sdk/src/configuration/BUILD | 14 ++++- sdk/src/configuration/CMakeLists.txt | 89 ++++++++++++++++++++++++--- sdk/test/configuration/BUILD | 14 ++--- sdk/test/configuration/CMakeLists.txt | 2 +- 5 files changed, 102 insertions(+), 18 deletions(-) diff --git a/sdk/CMakeLists.txt b/sdk/CMakeLists.txt index 3c2b5f913..5580f4f98 100644 --- a/sdk/CMakeLists.txt +++ b/sdk/CMakeLists.txt @@ -55,6 +55,7 @@ if(OTELCPP_WITH_CONFIGURATION) COMPONENT configuration TARGETS + opentelemetry_configuration_yaml opentelemetry_configuration FILES_DIRECTORY "include/opentelemetry/" diff --git a/sdk/src/configuration/BUILD b/sdk/src/configuration/BUILD index d02484305..390c3cfef 100644 --- a/sdk/src/configuration/BUILD +++ b/sdk/src/configuration/BUILD @@ -82,7 +82,7 @@ cc_library( ) cc_library( - name = "configuration", + name = "configuration_yaml", srcs = [ "configuration_parser.cc", "ryml_document.cc", @@ -97,3 +97,15 @@ cc_library( "@rapidyaml", ], ) + +cc_library( + name = "configuration", + deps = [ + ":configuration_core", + ":configuration_logs_builders", + ":configuration_metrics_builders", + ":configuration_registry_factory", + ":configuration_trace_builders", + ":configuration_yaml", + ], +) diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt index e3254f9e4..f7e8c357f 100644 --- a/sdk/src/configuration/CMakeLists.txt +++ b/sdk/src/configuration/CMakeLists.txt @@ -99,33 +99,104 @@ target_link_libraries( opentelemetry_configuration_metrics_builders opentelemetry_configuration_logs_builders) +if(OPENTELEMETRY_INSTALL) + opentelemetry_add_pkgconfig( + configuration_core + "OpenTelemetry SDK - Configuration Core" + "Programmatic configuration model, registry, and SDK builder." + "opentelemetry_api" + "opentelemetry_common" + "opentelemetry_trace" + "opentelemetry_metrics" + "opentelemetry_logs" + "opentelemetry_resources") + + opentelemetry_add_pkgconfig( + configuration_trace_builders + "OpenTelemetry SDK - Configuration Trace Builders" + "Default trace SDK component builders for programmatic configuration." + "opentelemetry_trace" + "opentelemetry_configuration_core") + + opentelemetry_add_pkgconfig( + configuration_logs_builders + "OpenTelemetry SDK - Configuration Logs Builders" + "Default logs SDK component builders for programmatic configuration." + "opentelemetry_logs" + "opentelemetry_configuration_core") + + opentelemetry_add_pkgconfig( + configuration_metrics_builders + "OpenTelemetry SDK - Configuration Metrics Builders" + "Default metrics SDK component builders for programmatic configuration." + "opentelemetry_metrics" + "opentelemetry_configuration_core") + + opentelemetry_add_pkgconfig( + configuration_registry_factory + "OpenTelemetry SDK - Configuration Registry Factory" + "Registry factory pre-populated with default SDK component builders." + "opentelemetry_configuration_core" + "opentelemetry_configuration_trace_builders" + "opentelemetry_configuration_metrics_builders" + "opentelemetry_configuration_logs_builders") +endif() + if(OTELCPP_WITH_CONFIGURATION) # YAML configuration parser add_library( - opentelemetry_configuration + opentelemetry_configuration_yaml configuration_parser.cc yaml_configuration_parser.cc ryml_document.cc ryml_document_node.cc) - set_target_properties(opentelemetry_configuration PROPERTIES EXPORT_NAME - configuration) - set_target_version(opentelemetry_configuration) + set_target_properties(opentelemetry_configuration_yaml + PROPERTIES EXPORT_NAME configuration_yaml) + set_target_version(opentelemetry_configuration_yaml) target_include_directories( - opentelemetry_configuration + opentelemetry_configuration_yaml PUBLIC "$" "$") target_link_libraries( - opentelemetry_configuration + opentelemetry_configuration_yaml PUBLIC opentelemetry_configuration_core PRIVATE ryml::ryml) + # Full configuration interface target (links to all configuration libraries) + # Link to this for all SDK default built-in component builders and YAML + # parsing + add_library(opentelemetry_configuration INTERFACE) + set_target_properties(opentelemetry_configuration PROPERTIES EXPORT_NAME + configuration) + + set_target_version(opentelemetry_configuration) + target_link_libraries( + opentelemetry_configuration + INTERFACE opentelemetry_configuration_core + opentelemetry_configuration_yaml + opentelemetry_configuration_registry_factory + opentelemetry_configuration_trace_builders + opentelemetry_configuration_metrics_builders + opentelemetry_configuration_logs_builders) + if(OPENTELEMETRY_INSTALL) opentelemetry_add_pkgconfig( - configuration "OpenTelemetry SDK - Configuration" - "Components for exporting traces in the OpenTelemetry SDK." - "opentelemetry_configuration") + configuration_yaml "OpenTelemetry SDK - Configuration YAML" + "YAML configuration parser for the OpenTelemetry SDK." + "opentelemetry_configuration_core") + + opentelemetry_add_pkgconfig( + configuration + "OpenTelemetry SDK - Configuration" + "Full YAML configuration interface: parser, registry, and all default builders." + "opentelemetry_configuration_core" + "opentelemetry_configuration_yaml" + "opentelemetry_configuration_registry_factory" + "opentelemetry_configuration_trace_builders" + "opentelemetry_configuration_metrics_builders" + "opentelemetry_configuration_logs_builders") endif() endif(OTELCPP_WITH_CONFIGURATION) diff --git a/sdk/test/configuration/BUILD b/sdk/test/configuration/BUILD index 67fa143c3..ad7470943 100644 --- a/sdk/test/configuration/BUILD +++ b/sdk/test/configuration/BUILD @@ -150,7 +150,7 @@ cc_test( deps = [ "//api", "//sdk:headers", - "//sdk/src/configuration", + "//sdk/src/configuration:configuration_yaml", "//sdk/src/logs", "//sdk/src/metrics", "//sdk/src/trace", @@ -170,7 +170,7 @@ cc_test( deps = [ "//api", "//sdk:headers", - "//sdk/src/configuration", + "//sdk/src/configuration:configuration_yaml", "//sdk/src/logs", "//sdk/src/metrics", "//sdk/src/trace", @@ -190,7 +190,7 @@ cc_test( deps = [ "//api", "//sdk:headers", - "//sdk/src/configuration", + "//sdk/src/configuration:configuration_yaml", "//sdk/src/logs", "//sdk/src/metrics", "//sdk/src/trace", @@ -210,7 +210,7 @@ cc_test( deps = [ "//api", "//sdk:headers", - "//sdk/src/configuration", + "//sdk/src/configuration:configuration_yaml", "//sdk/src/logs", "//sdk/src/metrics", "//sdk/src/trace", @@ -230,7 +230,7 @@ cc_test( deps = [ "//api", "//sdk:headers", - "//sdk/src/configuration", + "//sdk/src/configuration:configuration_yaml", "//sdk/src/logs", "//sdk/src/metrics", "//sdk/src/trace", @@ -250,7 +250,7 @@ cc_test( deps = [ "//api", "//sdk:headers", - "//sdk/src/configuration", + "//sdk/src/configuration:configuration_yaml", "//sdk/src/logs", "//sdk/src/metrics", "//sdk/src/trace", @@ -270,7 +270,7 @@ cc_test( deps = [ "//api", "//sdk:headers", - "//sdk/src/configuration", + "//sdk/src/configuration:configuration_yaml", "//sdk/src/logs", "//sdk/src/metrics", "//sdk/src/trace", diff --git a/sdk/test/configuration/CMakeLists.txt b/sdk/test/configuration/CMakeLists.txt index 51db62486..fc6b4739b 100644 --- a/sdk/test/configuration/CMakeLists.txt +++ b/sdk/test/configuration/CMakeLists.txt @@ -70,7 +70,7 @@ if(WITH_CONFIGURATION) add_executable(${testname} "${testname}.cc") target_link_libraries( ${testname} PRIVATE ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} - opentelemetry_configuration) + opentelemetry_configuration_yaml) gtest_add_tests( TARGET ${testname} TEST_PREFIX yaml. From f333a315fec1d280038cd9ec32a8dc6663ccf2f5 Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Wed, 26 Aug 2026 14:43:20 -0400 Subject: [PATCH 2/6] Update the config example to link to the main config interface target only --- examples/configuration/BUILD | 3 --- examples/configuration/CMakeLists.txt | 1 - 2 files changed, 4 deletions(-) diff --git a/examples/configuration/BUILD b/examples/configuration/BUILD index 4f1810c48..2001bf2f8 100644 --- a/examples/configuration/BUILD +++ b/examples/configuration/BUILD @@ -44,7 +44,6 @@ cc_test( "//resource_detectors:resource_detectors_builders", "//sdk:headers", "//sdk/src/configuration", - "//sdk/src/configuration:configuration_registry_factory", "//sdk/src/logs", "//sdk/src/metrics", "//sdk/src/trace", @@ -75,7 +74,6 @@ cc_test( "//exporters/ostream:ostream_span_exporter_builder", "//sdk:headers", "//sdk/src/configuration", - "//sdk/src/configuration:configuration_registry_factory", "//sdk/src/logs", "//sdk/src/metrics", "//sdk/src/trace", @@ -106,7 +104,6 @@ cc_test( "//exporters/ostream:ostream_span_exporter_builder", "//sdk:headers", "//sdk/src/configuration", - "//sdk/src/configuration:configuration_registry_factory", "//sdk/src/logs", "//sdk/src/metrics", "//sdk/src/trace", diff --git a/examples/configuration/CMakeLists.txt b/examples/configuration/CMakeLists.txt index 06ed31386..495ec1db6 100644 --- a/examples/configuration/CMakeLists.txt +++ b/examples/configuration/CMakeLists.txt @@ -24,7 +24,6 @@ add_executable( target_link_libraries( example_yaml PRIVATE ${CMAKE_THREAD_LIBS_INIT} - opentelemetry-cpp::configuration_registry_factory opentelemetry-cpp::configuration common_metrics_foo_library common_logs_foo_library From 5ff52ed7f1d8f9920c580089fc7513d615059b2f Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Wed, 26 Aug 2026 14:44:06 -0400 Subject: [PATCH 3/6] update install testing scripts and cmake files --- ci/verify_packages.sh | 8 +++++++- .../cmake/component_tests/configuration/CMakeLists.txt | 3 +-- install/test/cmake/fetch_content_test/CMakeLists.txt | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ci/verify_packages.sh b/ci/verify_packages.sh index a8f34b56b..576e81335 100755 --- a/ci/verify_packages.sh +++ b/ci/verify_packages.sh @@ -47,5 +47,11 @@ for exporter in prometheus prometheus_builder zipkin_trace elasticsearch_logs in validate_package "opentelemetry_exporter_${exporter}" done -# Optional features +# SDK configuration core and builders +for pkg in configuration_core configuration_trace_builders configuration_logs_builders configuration_metrics_builders configuration_registry_factory; do + pkg-config --validate "opentelemetry_${pkg}" --print-errors +done + +# Optional features (YAML parser and full interface) +validate_package "opentelemetry_configuration_yaml" validate_package "opentelemetry_configuration" diff --git a/install/test/cmake/component_tests/configuration/CMakeLists.txt b/install/test/cmake/component_tests/configuration/CMakeLists.txt index 7600814c8..058abc488 100644 --- a/install/test/cmake/component_tests/configuration/CMakeLists.txt +++ b/install/test/cmake/component_tests/configuration/CMakeLists.txt @@ -17,8 +17,7 @@ include(GoogleTest) add_executable(configuration_test ${INSTALL_TEST_SRC_DIR}/test_configuration.cc) target_link_libraries( configuration_test - PRIVATE opentelemetry-cpp::configuration_registry_factory - opentelemetry-cpp::configuration + PRIVATE opentelemetry-cpp::configuration opentelemetry-cpp::ostream_log_record_exporter_builder opentelemetry-cpp::ostream_metrics_exporter_builder opentelemetry-cpp::ostream_span_exporter_builder diff --git a/install/test/cmake/fetch_content_test/CMakeLists.txt b/install/test/cmake/fetch_content_test/CMakeLists.txt index 432523d96..4d4f87ece 100644 --- a/install/test/cmake/fetch_content_test/CMakeLists.txt +++ b/install/test/cmake/fetch_content_test/CMakeLists.txt @@ -102,6 +102,7 @@ target_link_libraries( opentelemetry-cpp::configuration_metrics_builders opentelemetry-cpp::configuration_logs_builders opentelemetry-cpp::configuration_registry_factory + opentelemetry-cpp::configuration_yaml opentelemetry-cpp::configuration opentelemetry-cpp::resource_detectors opentelemetry-cpp::resource_detectors_builders From 564780b00d13929741609356806e02467d109e69 Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Wed, 26 Aug 2026 14:49:16 -0400 Subject: [PATCH 4/6] update cmake target documentation --- INSTALL.md | 9 +++++++-- cmake/templates/opentelemetry-cpp-config.cmake.in | 5 +++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 97cb5bb41..546be8f9b 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -242,8 +242,13 @@ build configuration. | | opentelemetry-cpp::trace | | | opentelemetry-cpp::metrics | | | opentelemetry-cpp::logs | -| | opentelemetry-cpp::configuration_core (EXPERIMENTAL: Programmatic configuration) | -| **configuration** | opentelemetry-cpp::configuration (EXPERIMENTAL: YAML configuration) | +| | opentelemetry-cpp::configuration_core (EXPERIMENTAL: Model, Builder and Interfaces) | +| | opentelemetry-cpp::configuration_trace_builders (EXPERIMENTAL: Trace SDK default builders) | +| | opentelemetry-cpp::configuration_metrics_builders (EXPERIMENTAL: Metrics SDK default builders) | +| | opentelemetry-cpp::configuration_logs_builders (EXPERIMENTAL: Logs SDK default builders) | +| | opentelemetry-cpp::configuration_registry_factory (EXPERIMENTAL: Built-in registry creator) | +| **configuration** | opentelemetry-cpp::configuration_yaml (EXPERIMENTAL: YAML configuration) | +| | opentelemetry-cpp::configuration (EXPERIMENTAL: All config targets interface) | | **ext_common** | opentelemetry-cpp::ext | | **ext_http_curl** | opentelemetry-cpp::http_client_curl | | **ext_dll** | opentelemetry-cpp::opentelemetry_cpp | diff --git a/cmake/templates/opentelemetry-cpp-config.cmake.in b/cmake/templates/opentelemetry-cpp-config.cmake.in index 5fde329ce..196ba74d1 100644 --- a/cmake/templates/opentelemetry-cpp-config.cmake.in +++ b/cmake/templates/opentelemetry-cpp-config.cmake.in @@ -109,6 +109,11 @@ # opentelemetry-cpp::metrics - Imported target of COMPONENT sdk # opentelemetry-cpp::logs - Imported target of COMPONENT sdk # opentelemetry-cpp::configuration_core - Imported target of COMPONENT sdk +# opentelemetry-cpp::configuration_trace_builders - Imported target of COMPONENT sdk +# opentelemetry-cpp::configuration_metrics_builders - Imported target of COMPONENT sdk +# opentelemetry-cpp::configuration_logs_builders - Imported target of COMPONENT sdk +# opentelemetry-cpp::configuration_registry_factory - Imported target of COMPONENT sdk +# opentelemetry-cpp::configuration_yaml - Imported target of COMPONENT configuration # opentelemetry-cpp::configuration - Imported target of COMPONENT configuration # opentelemetry-cpp::ext - Imported target of COMPONENT ext_common # opentelemetry-cpp::http_client_curl - Imported target of COMPONENT ext_http_curl From 8c7bc93072a7343e9aa838b8926529c11f077004 Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Wed, 26 Aug 2026 15:06:26 -0400 Subject: [PATCH 5/6] cleanup cmake target link scope --- sdk/src/configuration/CMakeLists.txt | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/sdk/src/configuration/CMakeLists.txt b/sdk/src/configuration/CMakeLists.txt index f7e8c357f..eb34598a9 100644 --- a/sdk/src/configuration/CMakeLists.txt +++ b/sdk/src/configuration/CMakeLists.txt @@ -23,11 +23,12 @@ target_include_directories( PUBLIC "$" "$") +# TODO: Remove trace, metrics and logs library links from config core. See: +# https://github.com/open-telemetry/opentelemetry-cpp/issues/4352 target_link_libraries( opentelemetry_configuration_core - PUBLIC opentelemetry_api opentelemetry_common opentelemetry_trace - opentelemetry_metrics opentelemetry_logs opentelemetry_resources - PRIVATE) + PUBLIC opentelemetry_api opentelemetry_common opentelemetry_resources + opentelemetry_trace opentelemetry_metrics opentelemetry_logs) # Trace SDK component builders add_library(opentelemetry_configuration_trace_builders trace_builders.cc) @@ -43,8 +44,7 @@ target_include_directories( target_link_libraries( opentelemetry_configuration_trace_builders - PUBLIC opentelemetry_trace - PRIVATE opentelemetry_configuration_core) + PUBLIC opentelemetry_trace opentelemetry_configuration_core) # Logs SDK component builders add_library(opentelemetry_configuration_logs_builders logs_builders.cc) @@ -60,8 +60,7 @@ target_include_directories( target_link_libraries( opentelemetry_configuration_logs_builders - PUBLIC opentelemetry_logs - PRIVATE opentelemetry_configuration_core) + PUBLIC opentelemetry_logs opentelemetry_configuration_core) # Metrics SDK component builders add_library(opentelemetry_configuration_metrics_builders metrics_builders.cc) @@ -77,8 +76,7 @@ target_include_directories( target_link_libraries( opentelemetry_configuration_metrics_builders - PUBLIC opentelemetry_metrics - PRIVATE opentelemetry_configuration_core) + PUBLIC opentelemetry_metrics opentelemetry_configuration_core) # Registry factory for to register all SDK component builders add_library(opentelemetry_configuration_registry_factory registry_factory.cc) @@ -95,9 +93,9 @@ target_include_directories( target_link_libraries( opentelemetry_configuration_registry_factory PUBLIC opentelemetry_configuration_core - opentelemetry_configuration_trace_builders - opentelemetry_configuration_metrics_builders - opentelemetry_configuration_logs_builders) + PRIVATE opentelemetry_configuration_trace_builders + opentelemetry_configuration_metrics_builders + opentelemetry_configuration_logs_builders) if(OPENTELEMETRY_INSTALL) opentelemetry_add_pkgconfig( From f754b068bd1e7a835b8a563ed9d966f22cde4629 Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Wed, 26 Aug 2026 15:50:45 -0400 Subject: [PATCH 6/6] add changelog entry --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 462236afa..2979d4d44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,10 @@ Increment the: * [CONFIGURATION] Add a configuration builder for the host resource detector [#4451](https://github.com/open-telemetry/opentelemetry-cpp/issues/4451) + +* [CONFIGURATION] Cleanup build targets and docs + [#4486](https://github.com/open-telemetry/opentelemetry-cpp/pull/4486) + * [CONFIGURATION] Build the configured resource detectors in SdkBuilder, apply the `detection.attributes` include/exclude filter to the detected attributes, and merge the resource per the resource SDK specification.