#1097695 qiv: ftbfs with GCC-15

#1097695#5
Date:
2025-02-17 17:47:23 UTC
From:
To:
[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/qiv_2.3.3-1.1_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

[...]
                 from /usr/include/glib-2.0/gio/gioenums.h:30,
                 from /usr/include/glib-2.0/gio/giotypes.h:30,
                 from /usr/include/glib-2.0/gio/gio.h:28,
                 from /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:30,
                 from /usr/include/gtk-2.0/gdk/gdk.h:32,
                 from /usr/include/gtk-2.0/gdk/gdkprivate.h:30,
                 from /usr/include/gtk-2.0/gdk/gdkx.h:30,
                 from main.c:10:
/usr/include/signal.h:88:57: note: expected ‘__sighandler_t’ {aka ‘void (*)(int)’} but argument is of type ‘void (*)(void)’
   88 | extern __sighandler_t signal (int __sig, __sighandler_t __handler)
      |                                          ~~~~~~~~~~~~~~~^~~~~~~~~
main.c:28:13: note: ‘qiv_signal_usr1’ declared here
   28 | static void qiv_signal_usr1();
      |             ^~~~~~~~~~~~~~~
/usr/include/signal.h:72:16: note: ‘__sighandler_t’ declared here
   72 | typedef void (*__sighandler_t) (int);
      |                ^~~~~~~~~~~~~~
main.c:211:19: error: passing argument 2 of ‘signal’ from incompatible pointer type [-Wincompatible-pointer-types]
  211 |   signal(SIGUSR2, qiv_signal_usr2);
      |                   ^~~~~~~~~~~~~~~
      |                   |
      |                   void (*)(void)
/usr/include/signal.h:88:57: note: expected ‘__sighandler_t’ {aka ‘void (*)(int)’} but argument is of type ‘void (*)(void)’
   88 | extern __sighandler_t signal (int __sig, __sighandler_t __handler)
      |                                          ~~~~~~~~~~~~~~~^~~~~~~~~
main.c:29:13: note: ‘qiv_signal_usr2’ declared here
   29 | static void qiv_signal_usr2();
      |             ^~~~~~~~~~~~~~~
/usr/include/signal.h:72:16: note: ‘__sighandler_t’ declared here
   72 | typedef void (*__sighandler_t) (int);
      |                ^~~~~~~~~~~~~~
make[2]: *** [Makefile:126: main.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [Makefile:126: event.o] Error 1
In file included from image.c:17:
qiv.h:205:13: error: conflicting types for ‘qiv_load_image’; have ‘void(qiv_image *)’ {aka ‘void(struct _qiv_image *)’}
  205 | extern void qiv_load_image(qiv_image *);
      |             ^~~~~~~~~~~~~~
qiv.h:193:13: note: previous declaration of ‘qiv_load_image’ with type ‘void(void)’
  193 | extern void qiv_load_image();
      |             ^~~~~~~~~~~~~~
image.c:228:6: error: conflicting types for ‘qiv_load_image’; have ‘void(qiv_image *)’ {aka ‘void(struct _qiv_image *)’}
  228 | void qiv_load_image(qiv_image *q)
      |      ^~~~~~~~~~~~~~
qiv.h:193:13: note: previous declaration of ‘qiv_load_image’ with type ‘void(void)’
  193 | extern void qiv_load_image();
      |             ^~~~~~~~~~~~~~
make[2]: *** [Makefile:126: image.o] Error 1
In file included from options.c:9:
qiv.h:205:13: error: conflicting types for ‘qiv_load_image’; have ‘void(qiv_image *)’ {aka ‘void(struct _qiv_image *)’}
  205 | extern void qiv_load_image(qiv_image *);
      |             ^~~~~~~~~~~~~~
qiv.h:193:13: note: previous declaration of ‘qiv_load_image’ with type ‘void(void)’
  193 | extern void qiv_load_image();
      |             ^~~~~~~~~~~~~~
In file included from utils.c:25:
qiv.h:205:13: error: conflicting types for ‘qiv_load_image’; have ‘void(qiv_image *)’ {aka ‘void(struct _qiv_image *)’}
  205 | extern void qiv_load_image(qiv_image *);
      |             ^~~~~~~~~~~~~~
qiv.h:193:13: note: previous declaration of ‘qiv_load_image’ with type ‘void(void)’
  193 | extern void qiv_load_image();
      |             ^~~~~~~~~~~~~~
make[2]: *** [Makefile:126: options.o] Error 1
make[2]: *** [Makefile:126: utils.o] Error 1
make[2]: Leaving directory '/build/reproducible-path/qiv-2.3.3'
dh_auto_build: error: make -j8 "INSTALL=install --strip-program=true" "EXTNS=GIF TIFF XPM PNG PPM PNM PGM PCX BMP EIM JPEG SVG ICO WEBP HEIF" returned exit code 2
make[1]: *** [debian/rules:7: override_dh_auto_build] Error 25
make[1]: Leaving directory '/build/reproducible-path/qiv-2.3.3'
make: *** [debian/rules:4: binary] Error 2
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2

#1097695#10
Date:
2025-02-19 17:52:21 UTC
From:
To:
Hi.

* Matthias Klose (doko@debian.org) wrote [Mon, 250217 17:47 +0000]:

[ ... ]

Could you check if it works out with the latest version from the
repository?

https://codeberg.org/ciberandy/qiv/commits/branch/master

I think this should fix it. I don't have a gcc-15 at hand, but with
a "gcc-14 -std=c23" the latest version compiles, while the previous
version did not.

If it works we will release it as qiv-2.3.4.

This will be the last version 2 of qiv, the next version will be 3
and will use gdk3 (finally)

 Thomas