Hi,
thank you for authoring eukleides!

I am maintaining eukleides as a Debian package, and chances are that I
will no longer be able to maintain it, when the compiler gcc-15 will
enter debian/testing (it is currently part of debian/experimental),
which should occur in a few months.

Here is a recipe to test eukleides' source conformance with gcc-15:

- install gcc-15
- modify build/Makefile : replace the line "CC = gcc" by "CC ?= gcc"
- set the environment variable CC to gcc-15: in a bash shell that means:
  "export CC=gcc-15"
- run the command "make"

I tried to fix eukleides' source, in order to comply with the stricter
requirements which come with gcc-15 : this compiler checks the profile
of functions in a very picky way, and raises errors when extra arguments
are used during a call.

Here is a typical error:

----------------------8<---------------------------------
../src/common/core.c: In function ‘exec_itable’:
../src/common/core.c:215:20: error: too many arguments to function 
‘itable.cur->func’; expected 0, have 1
  215 |         (itable.cur->func)(itable.cur->param);
      |         ~~~~~~~~~~~^~~~~~~ ~~~~~~~~~~~~~~~~~
In file included from ../src/common/core.c:23:
../src/common/core.h:44:12: note: declared here
   44 |     void (*func)();
      |            ^~~~
----------------------8<---------------------------------

I could not fix all the errors, by a naive replacement of function
declarations with a void sequence of parameter, by replacing () or (void)
by (_param). Such a naive replacement works in some places, but in other
places, it causes circular incoherences, which I could not understand
easily.

Please can you give a try? There is no hurry, but gcc-15 will replace
former versions of the compiler some day.

Thank you in advance.

Best regards,                   Georges.

Matthias Klose a écrit :
> Package: src:eukleides
> Version: 1.5.4-5
> Severity: important
> Tags: sid forky
> User: [email protected]
> 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/eukleides_1.5.4-5_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
> 
> [...]
> ../src/common/function.c:135:23: note: in expansion of macro ‘XEQ’
>   135 |         case _LINE:   XEQ(lift_lin, call[ind]->arg);
>       |                       ^~~
> ../src/common/compiler.h:28:23: note: expected ‘void (*)(void)’ but argument 
> is of type ‘void (*)(_param)’
>    28 | void add_instr(void (*f)(), _param p);
>       |                ~~~~~~~^~~~
> ../src/common/variable.h:68:6: note: ‘lift_lin’ declared here
>    68 | void lift_lin(_param p);
>       |      ^~~~~~~~
> ../src/common/function.c:137:27: error: passing argument 1 of ‘add_instr’ 
> from incompatible pointer type [-Wincompatible-pointer-types]
>   137 |         case _CIRCLE: XEQ(lift_cir, call[ind]->arg);
>       |                           ^~~~~~~~
>       |                           |
>       |                           void (*)(_param)
> ../src/common/compiler.h:30:48: note: in definition of macro ‘instruction’
>    30 | #define instruction(arg, fct, param) add_instr(fct, param)
>       |                                                ^~~
> ../src/common/function.c:137:23: note: in expansion of macro ‘XEQ’
>   137 |         case _CIRCLE: XEQ(lift_cir, call[ind]->arg);
>       |                       ^~~
> ../src/common/compiler.h:28:23: note: expected ‘void (*)(void)’ but argument 
> is of type ‘void (*)(_param)’
>    28 | void add_instr(void (*f)(), _param p);
>       |                ~~~~~~~^~~~
> ../src/common/variable.h:70:6: note: ‘lift_cir’ declared here
>    70 | void lift_cir(_param p);
>       |      ^~~~~~~~
> ../src/common/function.c:139:27: error: passing argument 1 of ‘add_instr’ 
> from incompatible pointer type [-Wincompatible-pointer-types]
>   139 |         case _CONIC:  XEQ(lift_con, call[ind]->arg);
>       |                           ^~~~~~~~
>       |                           |
>       |                           void (*)(_param)
> ../src/common/compiler.h:30:48: note: in definition of macro ‘instruction’
>    30 | #define instruction(arg, fct, param) add_instr(fct, param)
>       |                                                ^~~
> ../src/common/function.c:139:23: note: in expansion of macro ‘XEQ’
>   139 |         case _CONIC:  XEQ(lift_con, call[ind]->arg);
>       |                       ^~~
> ../src/common/compiler.h:28:23: note: expected ‘void (*)(void)’ but argument 
> is of type ‘void (*)(_param)’
>    28 | void add_instr(void (*f)(), _param p);
>       |                ~~~~~~~^~~~
> ../src/common/variable.h:72:6: note: ‘lift_con’ declared here
>    72 | void lift_con(_param p);
>       |      ^~~~~~~~
> ../src/common/function.c:141:27: error: passing argument 1 of ‘add_instr’ 
> from incompatible pointer type [-Wincompatible-pointer-types]
>   141 |         case _STRING: XEQ(lift_str, call[ind]->arg);
>       |                           ^~~~~~~~
>       |                           |
>       |                           void (*)(_param)
> ../src/common/compiler.h:30:48: note: in definition of macro ‘instruction’
>    30 | #define instruction(arg, fct, param) add_instr(fct, param)
>       |                                                ^~~
> ../src/common/function.c:141:23: note: in expansion of macro ‘XEQ’
>   141 |         case _STRING: XEQ(lift_str, call[ind]->arg);
>       |                       ^~~
> ../src/common/compiler.h:28:23: note: expected ‘void (*)(void)’ but argument 
> is of type ‘void (*)(_param)’
>    28 | void add_instr(void (*f)(), _param p);
>       |                ~~~~~~~^~~~
> ../src/common/variable.h:74:6: note: ‘lift_str’ declared here
>    74 | void lift_str(_param p);
>       |      ^~~~~~~~
> make[3]: *** [Makefile:47: euktopst_build/function.o] Error 1
> make[2]: *** [Makefile:16: euktopst] Error 2
> make[2]: *** Waiting for unfinished jobs....
> make[2]: *** [Makefile:16: eukleides] Error 2
> make[2]: Leaving directory '/build/reproducible-path/eukleides-1.5.4'
> dh_auto_build: error: make -j8 "INSTALL=install --strip-program=true" 
> returned exit code 2
> make[1]: *** [debian/rules:13: override_dh_auto_build] Error 25
> make[1]: Leaving directory '/build/reproducible-path/eukleides-1.5.4'
> make: *** [debian/rules:4: binary] Error 2
> dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 
> 2
> 

-- 
Georges KHAZNADAR et Jocelyne FOURNIER
22 rue des mouettes, 59240 Dunkerque France.
Téléphone +33 (0)3 28 29 17 70

Attachment: signature.asc
Description: PGP signature

Reply via email to