Skip to content
31 changes: 31 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,37 @@ Increment the:
* MINOR version when you add functionality in a backwards compatible manner, and
* PATCH version when you make backwards compatible bug fixes.

## [2.0.0] TBD

### Breaking Changes

* [BUILD] Narrow ext:headers Bazel target to match CMake install manifest
[#4625](https://github.com/open-telemetry/opentelemetry-cpp/pull/4625)
* The `ext` Bazel target now exposes only 4 public headers, matching
CMakeLists.txt behavior (unchanged for 2+ years). These 6 headers are
no longer part of the public API:
* `opentelemetry/ext/http/client/curl/http_client_curl.h`
* `opentelemetry/ext/http/client/curl/http_operation_curl.h`
* `opentelemetry/ext/http/client/curl/http_time_util.h`
* `opentelemetry/ext/http/client/detail/default_factory.h`
* `opentelemetry/ext/http/server/http_server.h`
* `opentelemetry/ext/http/server/socket_tools.h`
* Code that included any of these headers must migrate to new internal
targets:
* Curl implementation details: depend on `//ext/src/http/client/curl:implementation_headers`
* Factory helper: depend on `//ext:http_client_detail`
* Server headers: depend on `//ext:server_headers`
* The public API (4 stable headers) remains unchanged:
* `opentelemetry/ext/http/client/http_client.h`
* `opentelemetry/ext/http/client/http_client_factory.h`
* `opentelemetry/ext/http/client/curl/http_client_factory_curl.h`
* `opentelemetry/ext/http/common/url_parser.h`
* Reason for change: Bazel target was using glob pattern that exposed
implementation details. CMake build has maintained explicit header list
for production use. This change aligns both build systems and prevents
accidental exposure of internal APIs.
* Related: #4327 (CMake narrowing), #4332 (server header relocation to test_common)

## [Unreleased]

* [LOGS] Fix undefined behavior in `Logger::EmitLogRecord()` when a logger is
Expand Down
1 change: 1 addition & 0 deletions examples/http/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ cc_binary(
"//api",
"//exporters/ostream:ostream_span_exporter",
"//ext:headers",
"//ext:server_headers",
"//sdk/src/trace",
],
)
1 change: 1 addition & 0 deletions exporters/elasticsearch/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ cc_library(
tags = ["es"],
deps = [
"//ext:headers",
"//ext:http_client_detail",
"//ext/src/http/client/curl:http_client_curl",
"//sdk/src/logs",
"@curl",
Expand Down
5 changes: 5 additions & 0 deletions exporters/otlp/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ cc_library(
deps = [
":otlp_common",
"//ext:headers",
"//ext:http_client_detail",
"//sdk:headers",
"//sdk/src/common:global_log_handler",
"@com_github_grpc_grpc//:grpc++",
Expand Down Expand Up @@ -166,6 +167,7 @@ cc_library(
":otlp_recordable",
":otlp_grpc_client",
"//ext:headers",
"//ext:http_client_detail",
"//sdk/src/trace",

# For gRPC
Expand Down Expand Up @@ -392,6 +394,7 @@ cc_library(
":otlp_recordable",
":otlp_grpc_client",
"//ext:headers",
"//ext:http_client_detail",
"//sdk/src/metrics",

# For gRPC
Expand Down Expand Up @@ -650,6 +653,7 @@ cc_library(
":otlp_recordable",
":otlp_grpc_client",
"//ext:headers",
"//ext:http_client_detail",
"//sdk/src/logs",
# For gRPC
"@com_github_opentelemetry_proto//:logs_service_grpc_cc",
Expand Down Expand Up @@ -805,6 +809,7 @@ cc_test(
deps = [
":otlp_http_exporter",
"//api",
"//ext:server_headers",
"//sdk/src/metrics",
"//test_common/src/http/client/nosend:http_client_nosend",
"@com_google_googletest//:gtest_main",
Expand Down
75 changes: 73 additions & 2 deletions ext/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,84 @@ load("@rules_cc//cc:cc_library.bzl", "cc_library")

package(default_visibility = ["//visibility:public"])

# Public API: 4 stable headers forming the interface for HTTP clients
cc_library(
name = "headers",
hdrs = glob(["include/**/*.h"]),
hdrs = [
"include/opentelemetry/ext/http/client/curl/http_client_factory_curl.h",
"include/opentelemetry/ext/http/client/http_client.h",
"include/opentelemetry/ext/http/client/http_client_factory.h",
"include/opentelemetry/ext/http/common/url_parser.h",
],
strip_include_prefix = "include",
deps = [
"//api",
],
)

# Internal: curl implementation headers
# Used by: the curl client itself, its tests, and the w3c test server
# These are implementation details and are not installed by CMake
cc_library(
name = "curl_implementation_headers",
hdrs = [
"include/opentelemetry/ext/http/client/curl/http_client_curl.h",
"include/opentelemetry/ext/http/client/curl/http_operation_curl.h",
"include/opentelemetry/ext/http/client/curl/http_time_util.h",
],
strip_include_prefix = "include",
visibility = [
"//ext/src/http/client/curl:__pkg__",
"//ext/test/http:__pkg__",
"//ext/test/w3c_tracecontext_http_test_server:__pkg__",
],
deps = [
":headers",
"@curl",
],
)

# Internal: Detail headers for factory implementations
# Used by: exporters/otlp, exporters/elasticsearch, exporters/zipkin
# Breaking change in v2.0.0: moved from public to internal target
cc_library(
name = "http_client_detail",
hdrs = [
"include/opentelemetry/ext/http/client/detail/default_factory.h",
],
strip_include_prefix = "include",
visibility = [
"//exporters/elasticsearch:__pkg__",
"//exporters/otlp:__pkg__",
"//exporters/zipkin:__pkg__",
"//ext/src/http/client/curl:__pkg__",
],
deps = [
":headers",
],
)

# Internal: Embedded HTTP server headers (test and example use only)
# TODO: Move to test_common per issue #4332
# These are test infrastructure, not part of the public API
cc_library(
name = "server_headers",
hdrs = [
"include/opentelemetry/ext/http/server/http_server.h",
"include/opentelemetry/ext/http/server/socket_tools.h",
],
linkopts = select({
# socket_tools.h calls Winsock; declare it on the interface so consumers link it too.
"//bazel:windows": ["-DEFAULTLIB:Ws2_32.lib"],
"//conditions:default": [],
}),
strip_include_prefix = "include",
visibility = [
"//examples/http:__pkg__",
"//exporters/otlp:__pkg__",
"//ext/test/http:__pkg__",
"//ext/test/w3c_tracecontext_http_test_server:__pkg__",
],
deps = [
"//api",
],
)
2 changes: 2 additions & 0 deletions ext/src/http/client/curl/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ cc_library(
linkstatic = True,
deps = [
"//api",
"//ext:curl_implementation_headers",
"//ext:headers",
"//ext:http_client_detail",
"//sdk:headers",
"//sdk/src/common:random",
"@curl",
Expand Down
5 changes: 3 additions & 2 deletions ext/test/http/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,10 @@ cc_test(
srcs = [
"socket_tools_test.cc",
],
# ws2_32 is an interface linkopt of //ext:headers, so it is inherited here rather than
# relinked, which also lets the test verify the public target's usage requirements.
tags = ["test"],
deps = [
"//ext:headers",
"//ext:server_headers",
"@com_google_googletest//:gtest_main",
],
)
Expand All @@ -25,7 +24,9 @@ cc_test(
defines = ["ENABLE_OTLP_RETRY_PREVIEW"],
tags = ["test"],
deps = [
"//ext:curl_implementation_headers",
"//ext:headers",
"//ext:server_headers",
"//ext/src/http/client/curl:http_client_curl",
"//sdk/src/trace",
"@com_google_googletest//:gtest_main",
Expand Down
2 changes: 2 additions & 0 deletions ext/test/w3c_tracecontext_http_test_server/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ cc_binary(
deps = [
"//api",
"//exporters/ostream:ostream_span_exporter",
"//ext:curl_implementation_headers",
"//ext:headers",
"//ext:server_headers",
"//ext/src/http/client/curl:http_client_curl",
"//sdk/src/trace",
"@curl",
Expand Down
Loading