Description of problem: httpd isn't rebuildable against Rawhide, fails with this error messages: --- snipp --- [...] /usr/lib/apr/build/libtool --silent --mode=compile gcc -pthread -O2 -Wall -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -m32 -march=i386 -mtune=pentium4 -DLINUX=2 - D_REENTRANT -D_GNU_SOURCE -DAP_HAVE_DESIGNATED_INITIALIZER - DSSL_EXPERIMENTAL_ENGINE -I/usr/include/apr-0 -I. - I/usr/src/redhat/BUILD/httpd-2.0.53/prefork/include - I/usr/src/redhat/BUILD/httpd-2.0.53/os/unix -I/usr/src/redhat/BUILD/httpd- 2.0.53/server/mpm/prefork -I/usr/src/redhat/BUILD/httpd-2.0.53/modules/http - I/usr/src/redhat/BUILD/httpd-2.0.53/modules/filters - I/usr/src/redhat/BUILD/httpd-2.0.53/modules/proxy - I/usr/src/redhat/BUILD/httpd-2.0.53/include -I/usr/src/redhat/BUILD/httpd- 2.0.53/modules/generators -I/usr/src/redhat/BUILD/httpd-2.0.53/prefork/server - I/usr/include/openssl -I/usr/kerberos/include -I/usr/src/redhat/BUILD/httpd- 2.0.53/modules/ssl -I/usr/src/redhat/BUILD/httpd-2.0.53/modules/dav/main - DAP_FNAME=\"core.c\" -fPIE -prefer-non-pic -static -c /usr/src/redhat/BUILD/httpd-2.0.53/server/core.c && touch core.lo /usr/src/redhat/BUILD/httpd-2.0.53/server/protocol.c:237:59: error: macro "read" passed 4 arguments, but takes just 3 /usr/src/redhat/BUILD/httpd-2.0.53/server/protocol.c: In function 'ap_rgetline_core': /usr/src/redhat/BUILD/httpd-2.0.53/server/protocol.c:237: warning: assignment makes integer from pointer without a cast /usr/src/redhat/BUILD/httpd-2.0.53/server/protocol.c:349:59: error: macro "read" passed 4 arguments, but takes just 3 /usr/src/redhat/BUILD/httpd-2.0.53/server/protocol.c:349: warning: assignment makes integer from pointer without a cast /usr/src/redhat/BUILD/httpd-2.0.53/server/protocol.c:324: warning: unused variable 'len' /usr/src/redhat/BUILD/httpd-2.0.53/server/protocol.c:1181:59: error: macro "read" passed 4 arguments, but takes just 3 /usr/src/redhat/BUILD/httpd-2.0.53/server/protocol.c: In function 'ap_content_length_filter': /usr/src/redhat/BUILD/httpd-2.0.53/server/protocol.c:1181: warning: assignment makes integer from pointer without a cast /usr/src/redhat/BUILD/httpd-2.0.53/server/protocol.c:1175: warning: unused variable 'ignored' make[2]: *** [protocol.lo] Error 1 make[2]: *** Waiting for unfinished jobs.... make[2]: Leaving directory `/usr/src/redhat/BUILD/httpd-2.0.53/prefork/server' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/usr/src/redhat/BUILD/httpd-2.0.53/prefork/server' make: *** [all-recursive] Error 1 Fehler: Bad exit status from /var/tmp/rpm-tmp.49220 (%build) --- snapp --- Version-Release number of selected component (if applicable): httpd-2.0.53-5 How reproducible: Everytime, try to rebuild httpd Actual results / Expected results: Should be rebuildable.
Jakub, are these read() macros going to stay in the libc headers with _FORTIFY_SOURCE defined? I can't fix this problem without completely changing the API, which is just not going to happen.
Oh, actually I see there is an easy workaround to avoid the macro being expanded, so probably it *can* be fixed non-intrusively. But still, the question above stands: are the macros going to stay?
glibc-2.3.4-15 (currently building) will stop using function-like macros for fgets, fgets_unlocked, recv, recvfrom, read, pread, pread64, readlink, getcwd and getwd. Macros for memcpy/memset/mempcpy/memmove/strcpy/stpcpy/bcopy/bzero/strcat/strncat/strncpy/strncat/gets and a bunch of others are going to stay. Still, no guarantees it will not be introduced again when needed, or some other libc will define them as macros. Better fix it in upstream package.
Even the simple fix to avoid the macro-expansion of a parameterized read() macro is not sufficient to be POSIXly-correct, I guess; I don't see a good argument that it's worth breaking the API for this any time soon. Marking as WONTFIX since glibc has been fixed.