Skip to content

build(otel): искать opentelemetry-cpp через pkg-config вместо cmake - #3819

Draft
kvirund wants to merge 3 commits into
masterfrom
build/otel-pkgconfig
Draft

kvirund wants to merge 3 commits into
masterfrom
build/otel-pkgconfig

Conversation

@kvirund

@kvirund kvirund commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Зачем

При meson setup ... -Dotel=system сыпалось ~15 предупреждений Unknown generator expression '$<LINK_ONLY:...>', '$<PLATFORM_ID:...>'. Источник — cmake-парсер самого meson (mesonbuild/cmake/generator.py): он не знает этих выражений и раскрывает их в пустоту. Upstream-фикс (mesonbuild/meson#15914) висит с июня и закрывает только LINK_ONLY.

Что сделано

  • opentelemetry-cpp ищется через pkg-config (.pc-файлы ставит сам opentelemetry-cpp), cmake больше не запускается — предупреждениям неоткуда взяться.
  • В Requires у otel-файлов нет protobuf и curl — они подключаются явно. Для opentelemetry_proto и opentelemetry_http_client_curl .pc не генерируется вовсе — они берутся find_library из libdir, полученного от pkg-config.
  • Ручные костыли с utf8_range/utf8_validity убраны: их тянет protobuf.pc.
  • -Dotel=builtin ссылался на отсутствующий subproject — теперь явная ошибка с подсказкой.
  • CI: opentelemetry-cpp 1.24.0 → 1.25.0 (.pc для экспортёров появились только в 1.25), PKG_CONFIG_PATH=/opt/opentelemetry-cpp/lib/pkgconfig вместо CMAKE_PREFIX_PATH.
  • CLAUDE.md: раздел про версию сведён к «VERSION.txt меняется только вручную отдельной веткой».

Проверка

Локально (vcpkg, opentelemetry-cpp 1.25.0, protobuf 33.4, meson 1.11.1):

  • meson setup -Dotel=system — 0 предупреждений, все 14 зависимостей найдены;
  • ninja circle — линкуется, 0 предупреждений компилятора, ~5k символов opentelemetry:: в бинаре;
  • обычная конфигурация без otel — без изменений;
  • -Dotel=builtin — понятная ошибка.

Внешние зависимости

Требуется opentelemetry-cpp ≥ 1.25: .pc-файлы для экспортёров появились только в этой версии. С 1.24 meson setup честно падает на opentelemetry_exporter_otlp_http not found (tried pkg-config).

Проверено на bylins.su: системный otel там 1.24.0 (не подходит), собран 1.25.0 в ~/opt/opentelemetry-cpp без sudo. С PKG_CONFIG_PATH на него: setup без предупреждений, полная сборка без предупреждений компилятора, 683 теста прошли. meson на машине не было, поставлен через pipx.

Поиск через cmake-конфиги заставлял meson разбирать generator expressions
($<LINK_ONLY:...>, $<PLATFORM_ID:...>), которые его cmake-парсер не знает:
на каждом setup сыпалось полтора десятка «Unknown generator expression»,
а выброшенные LINK_ONLY-зависимости приходилось добирать вручную
(libcurl, utf8_range/utf8_validity).

Теперь все компоненты берутся из .pc-файлов, которые ставит сам
opentelemetry-cpp; protobuf и libcurl подключаются явно (в Requires у
otel-файлов их нет), а opentelemetry_proto и opentelemetry_http_client_curl,
для которых .pc не генерируется, ищутся find_library в libdir из pkg-config.
Порядок зависимостей выстроен под статическую линковку.

-Dotel=builtin ссылался на несуществующий subproject -- теперь это явная
ошибка с подсказкой использовать -Dotel=system.

В CI вместо CMAKE_PREFIX_PATH выставляется PKG_CONFIG_PATH на
/opt/opentelemetry-cpp/lib/pkgconfig.
.pc-файлы для экспортёров (opentelemetry_exporter_otlp_http и др.)
upstream начал ставить только в 1.25, а поиск через pkg-config на них
опирается. Ключ кэша меняется вместе с версией, /opt/opentelemetry-cpp
пересоберётся.
Откат бампа 0.2.28 -> 0.2.27. Правило про бамп patch на каждый фикс/merge
из CLAUDE.md убрано: версия меняется вручную тем, кому нужно, в отдельной
ветке, иначе VERSION.txt конфликтует во всех PR.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant