Den sön 6 juli 2025 kl 03:13 skrev Branko Čibej <br...@apache.org>:

> On 5. 7. 25 19:44, Daniel Sahlberg wrote:
> > Den tis 1 juli 2025 kl 00:37 skrev Branko Čibej <br...@apache.org>:
> >
> >     On 30. 6. 25 23:53, Graham Leggett wrote:
> >     > On 30 Jun 2025, at 09:31, br...@apache.org wrote:
> >     >
> >     >> Author: brane
> >     >> Date: Mon Jun 30 08:31:43 2025
> >     >> New Revision: 1926869
> >     >>
> >     >> URL: http://svn.apache.org/viewvc?rev=1926869&view=rev
> >     <http://svn.apache.org/viewvc?rev=1926869&view=rev>
> >     >> Log:
> >     >> In the CMake build, make MockHTTPinC a separats static library
> >     and change
> >     >> flags to use C99 and silence all warnings only for that target.
> >     >>
> >     >> * test/CMakeLists.txt: Include the MockHTTPinC subdirectory and
> >     don't
> >     >>   fiddle with the CMAKE_C_FLAGS.
> >     >>  (TEST_ALL_SOURCES): Remove the MockHTTPinC source files.
> >     >>  (test_all): Depend on an link the mockhttpinc library.
> >     >>
> >     >> * test/MockHTTPinC/CMakeLists.txt: New. Build the mockhttpinc
> >     library.
> >     >
> >     > I'm getting this sudden build failure on RHEL9, looks like some
> >     header
> >     > files are being included in the wrong order if google is to be
> >     > believed. Do you see anything like this?
> >     >
> >     > [ 88%] Building C object
> >     > test/MockHTTPinC/CMakeFiles/mockhttpinc.dir/MockHTTP.c.o
> >     >
> >     > In file included from /usr/include/apr-1/apr.h:19,
> >     >
> >     >             from /usr/include/apr-1/apr_pools.h:43,
> >     >
> >     >             from
> >     >
> >
>  /home/minfrin/src/apache/sandbox/serf/test/MockHTTPinC/MockHTTP_private.h:19,
> >     >
> >     >             from
> >     >
> >     /home/minfrin/src/apache/sandbox/serf/test/MockHTTPinC/MockHTTP.c:16:
> >     >
> >     > /usr/include/apr-1/apr-x86_64.h:632:2: error: #error no decision
> >     has
> >     > been made on APR_PATH_MAX for your platform
> >     >
> >     > 632 | #errorno decision has been made on APR_PATH_MAX for your
> >     platform
> >     >
> >     >   | ^~~~~
> >     >
> >
> >
> > I get the same problem on Rocky Linux 9.
> >
> > $ rm -rf out; svn up -r1926868 && cmake -B out && cmake --build out
> > [... succeeds ...]
> > $ rm -rf out; svn up -r1926869 && cmake -B out && cmake --build out
> > [... fails ...]
> >
> >
> >     No, I'm not seeing that, and I tested on macOS, Debian 12 and
> >     Windows.
> >     Looking at the include trace, the headers are included are in the
> >     correct order. APR_PATH_MAX should be defined in apr.h, based on
> >     PATH_MAX from <limits.h>.
> >
> >     apr-x86_64.h is not an APR header, so I can't even begin to guess
> >     what
> >     was patched on RHEL, sorry. I can't imagine in which universe it
> >     wouldn't have a standard <limits.h> header.
> >
> >
> > On RHEL it seems like apr.h is only a stub to include an architecture
> > specific header, a comment in the beginning says "This file is here to
> > prevent a file conflict on multiarch systems. A conflict will occur
> > because apr.h has arch-specific definitions." and it then goes on to
> > #if defined(__i386__)
> > #include "apr-i386.h"
> > [...]
> > #elif defined(__x86_64__)
> > #include "apr-x86_64.h"
> > [...]
> > #endif
> >
> > apr-x86_64.h seems to be the "normal" generated apr.h from APR, with
> > the suitable arch-dependent defines, such as the substitution of
> > #define APR_SIZEOF_VOIDP @voidp_size@
> > I don't think RedHat's special-handling of the header is to blame here.
> >
> >     By the way, all I did was restrict the -std=c99 to the MockHTTP
> >     sources;
> >     before this change, all the tests, including MockHTTP, used C99. So
> >     there's really no change in the context of that source file.
> >
> >     -- Brane
> >
> >
> > I exported the compile commands (-DCMAKE_EXPORT_COMPILE_COMMANDS=ON)
> > and compared the command lines and there are differences in the
> > command line:
> >
> > [[[
> > --- compile_commands_r1926868.txt
> > +++ compile_commands_r1926869.txt
> > [...]
> > -  "command": "/usr/bin/cc -DHAVE_STDBOOL_H=1 -DMOCKHTTP_OPENSSL
> > -DOPENSSL_NO_STDIO -DSERF_HAVE_BROTLI
> > -DSERF_HAVE_BROTLI_DECODER_RESULT -DSERF_HAVE_GSSAPI
> > -DSERF_HAVE_OPENSSL_ALPN -DSERF_HAVE_OPENSSL_MALLOC_INIT
> > -DSERF_HAVE_OPENSSL_SSL_LIBRARY_INIT -DSERF_HAVE_OPENSSL_VERSION_NUM
> > -DSERF_HAVE_OSSL_HANDSHAKE_STATE -DSERF_HAVE_SSL_LOCKING_CALLBACKS
> > -I/home/dsg/serf_PR-8 -isystem /usr/include/apr-1.0  -Wall
> > -Wdeclaration-after-statement -Wmissing-prototypes -std=c99 -O3
> > -DNDEBUG -DLINUX -D_REENTRANT -D_GNU_SOURCE -o
> > CMakeFiles/test_all.dir/MockHTTPinC/MockHTTP.c.o -c
> > /home/dsg/serf_PR-8/test/MockHTTPinC/MockHTTP.c",
> > [...]
> > +  "command": "/usr/bin/cc -DHAVE_STDBOOL_H=1 -DMOCKHTTP_OPENSSL
> > -DOPENSSL_NO_STDIO -DSERF_HAVE_BROTLI
> > -DSERF_HAVE_BROTLI_DECODER_RESULT -DSERF_HAVE_GSSAPI
> > -DSERF_HAVE_OPENSSL_ALPN -DSERF_HAVE_OPENSSL_MALLOC_INIT
> > -DSERF_HAVE_OPENSSL_SSL_LIBRARY_INIT -DSERF_HAVE_OPENSSL_VERSION_NUM
> > -DSERF_HAVE_OSSL_HANDSHAKE_STATE -DSERF_HAVE_SSL_LOCKING_CALLBACKS
> > -isystem /usr/include/apr-1.0 -std=c99 -w -O3 -DNDEBUG -o
> > CMakeFiles/mockhttpinc.dir/MockHTTP.c.o -c
> > /home/dsg/serf_PR-8/test/MockHTTPinC/MockHTTP.c",
> > [...]
> > ]]]
> >
> > In the RockyLinux instance, it seems like adding -D_REENTRANT to the
> > command line helps.
> >
> > $ rm -rf out; svn up -r1926869 && CFLAGS=-D_REENTRANT cmake -B out &&
> > cmake --build out
> > [... succeeds ...]
> >
> > I'm usually testing on Ubuntu 25.04 (under WSL) and after this
> > revision, I get the following error:
> >
> > [[[
> > [ 88%] Built target serf_bwtp
> > [ 88%] Building C object
> > test/MockHTTPinC/CMakeFiles/mockhttpinc.dir/MockHTTP.c.o
> > /home/dsg/serf_PR-8/test/MockHTTPinC/MockHTTP.c: In function
> > ‘methodToCode’:
> > /home/dsg/serf_PR-8/test/MockHTTPinC/MockHTTP.c:562:23: error:
> > implicit declaration of function ‘strcasecmp’; did you mean ‘strncmp’?
> > [-Wimplicit-function-declaration]
> >   562 |     if (ch1 == 'G' && strcasecmp(code, "GET") == 0)
> >       |    ^~~~~~~~~~
> >       |    strncmp
> > gmake[2]: ***
> > [test/MockHTTPinC/CMakeFiles/mockhttpinc.dir/build.make:79:
> > test/MockHTTPinC/CMakeFiles/mockhttpinc.dir/MockHTTP.c.o] Error 1
> > gmake[1]: *** [CMakeFiles/Makefile2:475:
> > test/MockHTTPinC/CMakeFiles/mockhttpinc.dir/all] Error 2
> > gmake: *** [Makefile:146: all] Error 2
> > ]]]
> >
> > With the same checks as above, it seems like -D_GNU_SOURCE makes the
> > trick for me:
> >
> > $ rm -rf out; svn up -r1926869 && cmake -B out && cmake --build out
> > [...fails...]
> > $ rm -rf out; svn up -r1926869 && CFLAGS=-D_GNU_SOURCE cmake -B out &&
> > cmake --build out
> > [...succeeds...]
> >
> > The same issue still exists in trunk@1926976.
> >
> > I don't know CMake well enough to understand why _REENTRANT and
> > _GNU_SOURCE are added in the main CMakeLists.txt but not in the one in
> > test/MockHTTPinC - I don't seen anything obvious in Brane's change.
> >
> > The failure in Ubuntu 25.04 is also possible to rectify by including
> > <strings.h> in MockHTTP.c.
>
>
> Right, I see the problem now. Having changed MockHTTP to a static
> library, it didn't seem necessary to make it depend on the apr and
> apr-util imported targets, only to use their include paths. And so we
> missed APR's --cpppflags and --cflags.
>
> Does r1926983 help?
>

> -- Brane
>


Yes, it does! r1926982 fail and r1926983 succeeds. Thanks!

Cheers,
Daniel

Reply via email to