nginx-otel icon indicating copy to clipboard operation
nginx-otel copied to clipboard

Build failed if nginx build with pcre from sources

Open timansky opened this issue 1 year ago • 8 comments

Describe the bug

I'm trying to build module from source with nginx with pcre2 from sources. Build is failing because it is trying to find pcre2.h inside nginx directory

[100%] Generating opentelemetry/proto/common/v1/common.pb.cc, opentelemetry/proto/resource/v1/resource.pb.cc, opentelemetry/proto/trace/v1/trace.pb.cc, opentelemetry/proto/collector/trace/v1/trace_service.pb.cc, opentelemetry/proto/collector/trace/v1/trace_service.grpc.pb.cc
[100%] Building CXX object CMakeFiles/ngx_otel_module.dir/src/http_module.cpp.o
In file included from /workdir/deb-nginx/.build/nginx/objs/../src/core/ngx_core.h:74,
                 from /workdir/deb-nginx/.build/modules/otel/otel/src/http_module.cpp:3:
/workdir/deb-nginx/.build/nginx/objs/../src/core/ngx_regex.h:19:10: fatal error: pcre2.h: No such file or directory
   19 | #include <pcre2.h>
      |          ^~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/ngx_otel_module.dir/build.make:98: CMakeFiles/ngx_otel_module.dir/src/http_module.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:971: CMakeFiles/ngx_otel_module.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

To reproduce

Steps to reproduce the behavior:

  1. Configure nginx with option --with-pcre=${PATH_TO_PCRE2_SRC}
  2. make module
  3. See error

timansky avatar Sep 05 '24 20:09 timansky

Also this happens with all custom libs (zlib ssl ...)

timansky avatar Sep 05 '24 20:09 timansky

SSL fixes with adding variable -DOPENSSL_ROOT_DIR=${SSL_SRC_PATH}

timansky avatar Sep 06 '24 17:09 timansky

Something like this -DCMAKE_CXX_FLAGS=-I${PATH_TO_PCRE2_SRC}/src could fix PCRE error.

Could you elaborate a bit on why do you need custom libs?

p-pautov avatar Sep 06 '24 19:09 p-pautov

zlib is fixed by specifying -DZLIB_ROOT=${ZLIB_SRC_PATH}

timansky avatar Sep 06 '24 20:09 timansky

-DCMAKE_CXX_FLAGS=-I${PATH_TO_PCRE2_SRC}/src

Already tried with no success. Also tried:

-DCMAKE_PREFIX_PATH=${PCRE2_SRC}/src
-DPCRE2_ROOT=${PCRE2_SRC}/src
-DPCRE2_LIBRARY=${PCRE2_SRC}/src
-DCMAKE_INCLUDE_PATH=${PCRE2_SRC}/src

timansky avatar Sep 06 '24 22:09 timansky

I have this in my build file for pcre2:

sed -i '/target_include/a \ \ \ \ /usr/local/openresty/pcre2/include' CMakeLists.txt

willthames avatar Nov 11 '24 08:11 willthames

manually fixing CMakeLists.txt helped

timansky avatar Dec 10 '24 06:12 timansky

Apparently, both -DCMAKE_C_FLAGS=-I${PATH_TO_PCRE2}/src and -DCMAKE_CXX_FLAGS=-I${PATH_TO_PCRE2}/src are required to build without CMakeLists.txt modification.

p-pautov avatar Dec 11 '24 01:12 p-pautov