Subject: runit: ftbfs with GCC-15

From: Matthias Klose <[email-masked]>
Date: Mon, 17 Feb 2025 17:51:36 +0000

Package: src:runit
Version: 2.1.2-61
Severity: important
Tags: sid forky
User: [email-masked]
Usertags: ftbfs-gcc-15

[This bug is NOT targeted to the upcoming trixie release]

Please keep this issue open in the bug tracker for the package it
was filed for.  If a fix in another package is required, please
file a bug for the other package (or clone), and add a block in this
package. Please keep the issue open until the package can be built in
a follow-up test rebuild.

The package fails to build in a test rebuild on at least amd64 with
gcc-15/g++-15, but succeeds to build with gcc-14/g++-14. The
severity of this report will be raised before the forky release.

The full build log can be found at:
http://qa-logs.debian.net/2025/02/16/amd64exp/runit_2.1.2-61_unstable_gccexp.log.gz
The last lines of the build log are at the end of this report.

To build with GCC 15, either set CC=gcc-15 CXX=g++-15 explicitly,
or install the gcc, g++, gfortran, ... packages from experimental.

  apt-get -t=experimental install g++ 

GCC 15 now defaults to the C23/C++23 standards, exposing many FTBFS.
Other Common build failures are new warnings resulting in build failures
with -Werror turned on, or new/dropped symbols in Debian symbols files.
For other C/C++ related build failures see the porting guide at
http://gcc.gnu.org/gcc-15/porting_to.html

[...]
    8 | extern void byte_copy();
      |             ^~~~~~~~~
alloc_re.c:16:3: error: too many arguments to function ‘alloc_free’; expected 0, have 1
   16 |   alloc_free(*x);
      |   ^~~~~~~~~~ ~~
alloc.h:7:13: note: declared here
    7 | extern void alloc_free();
      |             ^~~~~~~~~~
./compile buffer_1.c
+ exec cc -g -O2 -Werror=implicit-function-declaration -D__DEB_CANARY_CFLAGS_d5cfead94f5350c12c322b5b664544c1__ -ffile-prefix-map=/build/reproducible-path/runit-2.1.2=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -D__DEB_CANARY_CPPFLAGS_01e00f2f4bfcbb7505cb641066f2859b__ -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -Werror=implicit-function-declaration -D__DEB_CANARY_CFLAGS_4a47d2983c8bd392b120b627e0e1cab4__ -ffile-prefix-map=/build/reproducible-path/runit-2.1.2=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c buffer_1.c
make[2]: *** [Makefile:126: alloc_re.o] Error 1
make[2]: *** Waiting for unfinished jobs....
buffer_0.c: In function ‘buffer_0_read’:
buffer_0.c:5:5: warning: old-style function definition [-Wold-style-definition]
    5 | int buffer_0_read(fd,buf,len) int fd; char *buf; int len;
      |     ^~~~~~~~~~~~~
( ./load trysocketlib >/dev/null 2>&1 || \
  ( ./load trysocketlib -lxnet >/dev/null 2>&1 && echo '-lxnet' ) || \
  ( ./load trysocketlib -lsocket -lnsl >/dev/null 2>&1 && \
    echo '-lsocket -lnsl' ) \
) >socket.lib
In file included from buffer_1.c:3:
buffer.h:14:61: error: initialization of ‘int (*)(void)’ from incompatible pointer type ‘int (*)(int,  const char *, unsigned int)’ [-Wincompatible-pointer-types]
   14 | #define BUFFER_INIT(op,fd,buf,len) { (buf), 0, (len), (fd), (op) }
      |                                                             ^
buffer_1.c:6:20: note: in expansion of macro ‘BUFFER_INIT’
    6 | static buffer it = BUFFER_INIT(buffer_unixwrite,1,buffer_1_space,sizeof buffer_1_space);
      |                    ^~~~~~~~~~~
buffer.h:14:61: note: (near initialization for ‘it.op’)
   14 | #define BUFFER_INIT(op,fd,buf,len) { (buf), 0, (len), (fd), (op) }
      |                                                             ^
buffer_1.c:6:20: note: in expansion of macro ‘BUFFER_INIT’
    6 | static buffer it = BUFFER_INIT(buffer_unixwrite,1,buffer_1_space,sizeof buffer_1_space);
      |                    ^~~~~~~~~~~
buffer.h:53:12: note: ‘buffer_unixwrite’ declared here
   53 | extern int buffer_unixwrite(int,const char *,unsigned int);
      |            ^~~~~~~~~~~~~~~~
alloc.c: In function ‘alloc’:
alloc.c:15:26: warning: old-style function definition [-Wold-style-definition]
   15 | /*@null@*//*@out@*/char *alloc(n)
      |                          ^~~~~
alloc.c:17:1: error: number of arguments doesn’t match prototype
   17 | {
      | ^
In file included from alloc.c:4:
alloc.h:6:33: error: prototype declaration
    6 | extern /*@null@*//*@out@*/char *alloc();
      |                                 ^~~~~
make[2]: *** [Makefile:135: buffer_1.o] Error 1
alloc.c: In function ‘alloc_free’:
alloc.c:26:6: warning: old-style function definition [-Wold-style-definition]
   26 | void alloc_free(x)
      |      ^~~~~~~~~~
alloc.c:28:1: error: number of arguments doesn’t match prototype
   28 | {
      | ^
alloc.h:7:13: error: prototype declaration
    7 | extern void alloc_free();
      |             ^~~~~~~~~~
make[2]: *** [Makefile:123: alloc.o] Error 1
+ ./tryulong64
+ rm -f tryulong64.o tryulong64
+ exec cat uint64.h2
rm -f trysocketlib.o trysocketlib
make[2]: Leaving directory '/build/reproducible-path/runit-2.1.2/runit-2.1.2/src'
dh_auto_build: error: cd runit-2.1.2/src && make -j8 "INSTALL=install --strip-program=true" returned exit code 2
make[1]: *** [debian/rules:28: override_dh_auto_build] Error 25
make[1]: Leaving directory '/build/reproducible-path/runit-2.1.2'
make: *** [debian/rules:12: binary] Error 2
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2