A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/nginxinc/nginx-otel/issues/16 below:

Fails to build with Protobuf v22+ · Issue #16 · nginxinc/nginx-otel · GitHub

Describe the bug

Protobuf v22 has a breaking change in logging that breaks how nginx-otel uses it.
https://github.com/protocolbuffers/protobuf/releases/tag/v22.0

protobuf-dev no longer includes a logging.h, and no longer provides google::protobuf::LogLevel or google::protobuf::SetLogHandler.

Error when building with protobuf v23.4:

/opt/nginx-otel-main/src/http_module.cpp:510:6: error: variable or field 'protobufLogHandler' declared void
  510 | void protobufLogHandler(google::protobuf::LogLevel logLevel,
      |      ^~~~~~~~~~~~~~~~~~
/opt/nginx-otel-main/src/http_module.cpp:510:43: error: 'LogLevel' is not a member of 'google::protobuf'
  510 | void protobufLogHandler(google::protobuf::LogLevel logLevel,
      |                                           ^~~~~~~~
/opt/nginx-otel-main/src/http_module.cpp:511:5: error: expected primary-expression before 'const'
  511 |     const char* filename, int line, const std::string& msg)
      |     ^~~~~
/opt/nginx-otel-main/src/http_module.cpp:511:27: error: expected primary-expression before 'int'
  511 |     const char* filename, int line, const std::string& msg)
      |                           ^~~
/opt/nginx-otel-main/src/http_module.cpp:511:37: error: expected primary-expression before 'const'
  511 |     const char* filename, int line, const std::string& msg)
      |                                     ^~~~~
/opt/nginx-otel-main/src/http_module.cpp: In function 'ngx_int_t {anonymous}::initModule(ngx_conf_t*)':
/opt/nginx-otel-main/src/http_module.cpp:545:23: error: 'SetLogHandler' is not a member of 'google::protobuf'
  545 |     google::protobuf::SetLogHandler(protobufLogHandler);
      |                       ^~~~~~~~~~~~~
/opt/nginx-otel-main/src/http_module.cpp:545:37: error: 'protobufLogHandler' was not declared in this scope
  545 |     google::protobuf::SetLogHandler(protobufLogHandler);
      |                                     ^~~~~~~~~~~~~~~~~~
make[2]: *** [CMakeFiles/ngx_otel_module.dir/build.make:76: CMakeFiles/ngx_otel_module.dir/src/http_module.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/ngx_otel_module.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
Your environment

Building from source with Alpine edge in docker.

FROM docker.io/library/alpine:20230901 as otel-module-builder
# Build nginx OpenTelemetry module
# https://github.com/nginxinc/nginx-otel
WORKDIR /opt

RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && apk update
RUN apk add \
    cmake build-base openssl-dev zlib-dev pcre-dev \
    pkgconfig c-ares-dev re2-dev \
    opentelemetry-cpp-dev grpc-dev protobuf-dev \
    unzip

RUN wget https://github.com/nginx/nginx/archive/refs/tags/release-1.25.2.zip; unzip release-1.25.2.zip; mv nginx-release-1.25.2 nginx
WORKDIR /opt/nginx
RUN auto/configure --with-compat

WORKDIR /opt
RUN wget https://github.com/nginxinc/nginx-otel/archive/refs/heads/main.zip; unzip main.zip
COPY configs/nginx-otel-CMakeLists.txt /opt/nginx-otel-main/CMakeLists.txt
RUN sed -i \
    's!#include <google/protobuf/stubs/logging.h>!#include <google/protobuf/stubs/common.h>!' \
    /opt/nginx-otel-main/src/http_module.cpp # Fix link to old version of protobuf?
WORKDIR /opt/nginx-otel-main/build
RUN cmake -DNGX_OTEL_NGINX_BUILD_DIR=/opt/nginx/objs ..
RUN make -j 8

I overrode CMakeLists manually because building opentelemetry-cpp from source was slow.

# nginx-otel-CMakeLists.txt
cmake_minimum_required(VERSION 3.24.0)
project(nginx-otel)

set(NGX_OTEL_NGINX_BUILD_DIR ""
    CACHE PATH "Nginx build (objs) dir")
set(NGX_OTEL_NGINX_DIR "${NGX_OTEL_NGINX_BUILD_DIR}/.."
    CACHE PATH "Nginx source dir")

set(NGX_OTEL_FETCH_DEPS ON CACHE BOOL "Download dependencies")
set(NGX_OTEL_PROTO_DIR  "" CACHE PATH "OTel proto files root")

if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE RelWithDebInfo)
endif()

set(CMAKE_CXX_VISIBILITY_PRESET hidden)

find_package(opentelemetry-cpp REQUIRED)
find_package(protobuf REQUIRED)
find_package(gRPC REQUIRED)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_EXTENSIONS OFF)

add_compile_options(-Wall -Wtype-limits -Werror)

add_library(ngx_otel_module MODULE
    src/http_module.cpp
    src/modules.c)

# avoid 'lib' prefix in binary name
set_target_properties(ngx_otel_module PROPERTIES PREFIX "")

target_include_directories(ngx_otel_module PRIVATE
    ${NGX_OTEL_NGINX_BUILD_DIR}
    ${NGX_OTEL_NGINX_DIR}/src/core
    ${NGX_OTEL_NGINX_DIR}/src/event
    ${NGX_OTEL_NGINX_DIR}/src/event/modules
    ${NGX_OTEL_NGINX_DIR}/src/event/quic
    ${NGX_OTEL_NGINX_DIR}/src/os/unix
    ${NGX_OTEL_NGINX_DIR}/src/http
    ${NGX_OTEL_NGINX_DIR}/src/http/modules
    ${NGX_OTEL_NGINX_DIR}/src/http/v2
    ${NGX_OTEL_NGINX_DIR}/src/http/v3
    /usr/include/opentelemetry/proto/)

target_link_libraries(ngx_otel_module
    opentelemetry-cpp::trace
    gRPC::grpc++)

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4