fig2dev: incompatible with GCC 15 C23 standard
Xfig is a diagramming tool
Brought to you by:
tklxfiguser
Debian bug report #1096628 reports that current fig2dev does not compile with GCC 15, which uses to C23 standard.
According to the bug report http://gcc.gnu.org/gcc-15/porting_to.html should give some hints for porting to GCC 15 / C23.
The build log at http://qa-logs.debian.net/2025/02/16/amd64exp/fig2dev_3.2.9a-2_unstable_gccexp.log.gz shows the following errors:
mkfile.c:55:17: error: too many arguments to function ‘putfig’; expected 0, have 9
55 | putfig(mk, box, altfonts, NULL, NULL, a->m, NULL, i, "tex");
| ^~~~~~ ~~
mkfile.c:21:6: note: declared here
21 | void putfig();
| ^~~~~~
mkfile.c:84:17: error: too many arguments to function ‘putfig’; expected 0, have 9
84 | putfig(mk, to, altfonts, a->f, a->s, a->m, a->o, i, lname[(int)to]);
| ^~~~~~ ~~
mkfile.c:21:6: note: declared here
21 | void putfig();
| ^~~~~~
mkfile.c:93:17: error: too many arguments to function ‘putfig’; expected 0, have 9
93 | putfig(mk, to, altfonts, a->f, a->s, a->m, a->o, i, "tex");
| ^~~~~~ ~~
mkfile.c:21:6: note: declared here
21 | void putfig();
| ^~~~~~
mkfile.c:98:17: error: too many arguments to function ‘putfig’; expected 0, have 9
98 | putfig(mk, latex, altfonts, a->f, a->s, a->m, a->o, i, "tex");
| ^~~~~~ ~~
mkfile.c:21:6: note: declared here
21 | void putfig();
| ^~~~~~
mkfile.c:111:17: error: too many arguments to function ‘puttarget’; expected 0, have 4
111 | puttarget(mk, i, "tex", "pdf");
| ^~~~~~~~~ ~~
mkfile.c:20:6: note: declared here
20 | void puttarget();
| ^~~~~~~~~
mkfile.c:113:17: error: too many arguments to function ‘putoptions’; expected 0, have 8
113 | putoptions(mk, altfonts, a->f, a->s, a->m, a->o, i, "tex");
| ^~~~~~~~~~ ~~
mkfile.c:22:6: note: declared here
22 | void putoptions();
| ^~~~~~~~~~
mkfile.c:118:17: error: too many arguments to function ‘putfig’; expected 0, have 9
118 | putfig(mk, pictex, altfonts, a->f, a->s, a->m, a->o, i, "tex");
| ^~~~~~ ~~
mkfile.c:21:6: note: declared here
21 | void putfig();
| ^~~~~~
mkfile.c:123:17: error: too many arguments to function ‘puttarget’; expected 0, have 4
123 | puttarget(mk, i, "tex", "ps");
| ^~~~~~~~~ ~~
mkfile.c:20:6: note: declared here
20 | void puttarget();
| ^~~~~~~~~
mkfile.c:129:17: error: too many arguments to function ‘puttarget’; expected 0, have 4
129 | puttarget(mk, i, "tex", "eps");
| ^~~~~~~~~ ~~
mkfile.c:20:6: note: declared here
20 | void puttarget();
| ^~~~~~~~~
mkfile.c:135:17: error: too many arguments to function ‘puttarget’; expected 0, have 4
135 | puttarget(mk, i, "tex", "ps");
| ^~~~~~~~~ ~~
mkfile.c:20:6: note: declared here
20 | void puttarget();
| ^~~~~~~~~
mkfile.c:150:17: error: too many arguments to function ‘puttarget’; expected 0, have 4
150 | puttarget(mk, i, "tex", "eps");
| ^~~~~~~~~ ~~
mkfile.c:20:6: note: declared here
20 | void puttarget();
| ^~~~~~~~~
mkfile.c:152:17: error: too many arguments to function ‘putoptions’; expected 0, have 8
152 | putoptions(mk, altfonts, a->f, a->s, a->m, a->o, i, "tex");
| ^~~~~~~~~~ ~~
mkfile.c:22:6: note: declared here
22 | void putoptions();
| ^~~~~~~~~~
mkfile.c:158:17: error: too many arguments to function ‘puttarget’; expected 0, have 4
158 | puttarget(mk, i, "tex", "pic");
| ^~~~~~~~~ ~~
mkfile.c:20:6: note: declared here
20 | void puttarget();
| ^~~~~~~~~
mkfile.c:167:9: error: too many arguments to function ‘putclean’; expected 0, have 3
167 | putclean(mk, i, lname[a->tolang] );
| ^~~~~~~~ ~~
mkfile.c:23:6: note: declared here
23 | void putclean();
| ^~~~~~~~
mkfile.c:172:21: error: too many arguments to function ‘puttarget’; expected 0, have 4
172 | puttarget(mk, i, "ps", iname[(int)a->type]);
| ^~~~~~~~~ ~~
mkfile.c:20:6: note: declared here
20 | void puttarget();
| ^~~~~~~~~
mkfile.c:176:21: error: too many arguments to function ‘putfig’; expected 0, have 9
176 | putfig(mk, (to == pstex ? pstex : ps),
| ^~~~~~ ~~
mkfile.c:21:6: note: declared here
21 | void putfig();
| ^~~~~~
mkfile.c:178:33: error: too many arguments to function ‘mksuff’; expected 0, have 2
178 | a->interm = mksuff(i, ".ps");
| ^~~~~~ ~
In file included from mkfile.c:18:
transfig.h:67:24: note: declared here
67 | extern char *sysls(), *mksuff();
| ^~~~~~
mkfile.c:181:17: error: too many arguments to function ‘putclean’; expected 0, have 3
181 | putclean(mk, i, "ps" );
| ^~~~~~~~ ~~
mkfile.c:23:6: note: declared here
23 | void putclean();
| ^~~~~~~~
mkfile.c:187:21: error: too many arguments to function ‘puttarget’; expected 0, have 4
187 | puttarget(mk, i, "pdf", iname[(int)a->type]);
| ^~~~~~~~~ ~~
mkfile.c:20:6: note: declared here
20 | void puttarget();
| ^~~~~~~~~
mkfile.c:191:21: error: too many arguments to function ‘putfig’; expected 0, have 9
191 | putfig(mk, (to == pdftex ? pdftex : pdf),
| ^~~~~~ ~~
mkfile.c:21:6: note: declared here
21 | void putfig();
| ^~~~~~
mkfile.c:193:33: error: too many arguments to function ‘mksuff’; expected 0, have 2
193 | a->interm = mksuff(i, ".pdf");
| ^~~~~~ ~
transfig.h:67:24: note: declared here
67 | extern char *sysls(), *mksuff();
| ^~~~~~
mkfile.c:196:17: error: too many arguments to function ‘putclean’; expected 0, have 3
196 | putclean(mk, i, "pdf" );
| ^~~~~~~~ ~~
mkfile.c:23:6: note: declared here
23 | void putclean();
| ^~~~~~~~
mkfile.c:202:21: error: too many arguments to function ‘puttarget’; expected 0, have 4
202 | puttarget(mk, i, "eps", iname[(int)a->type]);
| ^~~~~~~~~ ~~
mkfile.c:20:6: note: declared here
20 | void puttarget();
| ^~~~~~~~~
mkfile.c:206:21: error: too many arguments to function ‘putfig’; expected 0, have 9
206 | putfig(mk, (to == pstex ? pstex : eps),
| ^~~~~~ ~~
mkfile.c:21:6: note: declared here
21 | void putfig();
| ^~~~~~
mkfile.c:208:33: error: too many arguments to function ‘mksuff’; expected 0, have 2
208 | a->interm = mksuff(i, ".eps");
| ^~~~~~ ~
transfig.h:67:24: note: declared here
67 | extern char *sysls(), *mksuff();
| ^~~~~~
mkfile.c:211:17: error: too many arguments to function ‘putclean’; expected 0, have 3
211 | putclean(mk, i, "eps" );
| ^~~~~~~~ ~~
mkfile.c:23:6: note: declared here
23 | void putclean();
| ^~~~~~~~
mkfile.c:217:21: error: too many arguments to function ‘puttarget’; expected 0, have 4
217 | puttarget(mk, i, "pic", iname[(int)a->type]);
| ^~~~~~~~~ ~~
mkfile.c:20:6: note: declared here
20 | void puttarget();
| ^~~~~~~~~
mkfile.c:221:21: error: too many arguments to function ‘putfig’; expected 0, have 9
221 | putfig(mk, tpic, altfonts, a->f, a->s, a->m, a->o, i, "pic");
| ^~~~~~ ~~
mkfile.c:21:6: note: declared here
21 | void putfig();
| ^~~~~~
mkfile.c:225:17: error: too many arguments to function ‘putclean’; expected 0, have 3
225 | putclean(mk, i, "pic" );
| ^~~~~~~~ ~~
mkfile.c:23:6: note: declared here
23 | void putclean();
| ^~~~~~~~
mkfile.c:231:21: error: too many arguments to function ‘puttarget’; expected 0, have 4
231 | puttarget(mk, i, "fig", iname[(int)a->type]);
| ^~~~~~~~~ ~~
mkfile.c:20:6: note: declared here
20 | void puttarget();
| ^~~~~~~~~
mkfile.c:233:33: error: too many arguments to function ‘mksuff’; expected 0, have 2
233 | a->interm = mksuff(i, ".fig");
| ^~~~~~ ~
transfig.h:67:24: note: declared here
67 | extern char *sysls(), *mksuff();
| ^~~~~~
mkfile.c:236:86: error: too many arguments to function ‘mksuff’; expected 0, have 2
236 | fprintf(stderr, "transfig: warning: don't now how to make %s\n", mksuff(i, ".fig") );
| ^~~~~~ ~
transfig.h:67:24: note: declared here
67 | extern char *sysls(), *mksuff();
| ^~~~~~
mkfile.c:238:17: error: too many arguments to function ‘putclean’; expected 0, have 3
238 | putclean(mk, i, "fig" );
| ^~~~~~~~ ~~
mkfile.c:23:6: note: declared here
23 | void putclean();
| ^~~~~~~~
mkfile.c: At top level:
mkfile.c:244:1: error: conflicting types for ‘puttarget’; have ‘void(FILE *, char *, char *, char *)’
244 | puttarget(FILE *mk, char *i, char *suf1, char *suf2)
| ^~~~~~~~~
mkfile.c:20:6: note: previous declaration of ‘puttarget’ with type ‘void(void)’
20 | void puttarget();
| ^~~~~~~~~
mkfile.c:250:1: error: conflicting types for ‘putfig’; have ‘void(FILE *, enum language, int, char *, char *, char *, char *, char *, char *)’
250 | putfig(FILE *mk, enum language to, int altfonts,
| ^~~~~~
mkfile.c:21:6: note: previous declaration of ‘putfig’ with type ‘void(void)’
21 | void putfig();
| ^~~~~~
mkfile.c: In function ‘putfig’:
mkfile.c:261:3: error: too many arguments to function ‘putoptions’; expected 0, have 8
261 | putoptions(mk, altfonts, f, s, m, o, i, suf);
| ^~~~~~~~~~ ~~
mkfile.c:22:6: note: declared here
22 | void putoptions();
| ^~~~~~~~~~
mkfile.c: At top level:
mkfile.c:265:1: error: conflicting types for ‘putoptions’; have ‘void(FILE *, int, char *, char *, char *, char *, char *, char *)’
265 | putoptions(FILE *mk, int altfonts, char *f, char *s, char *m, char *o,
| ^~~~~~~~~~
mkfile.c:22:6: note: previous declaration of ‘putoptions’ with type ‘void(void)’
22 | void putoptions();
| ^~~~~~~~~~
mkfile.c:278:1: error: conflicting types for ‘putclean’; have ‘void(FILE *, char *, char *)’
278 | putclean(FILE *mk, char *i, char *suf)
| ^~~~~~~~
mkfile.c:23:6: note: previous declaration of ‘putclean’ with type ‘void(void)’
23 | void putclean();
| ^~~~~~~~
make[4]: *** [Makefile:399: mkfile.o] Error 1
make[4]: *** Waiting for unfinished jobs....
sys.c:85:1: error: conflicting types for ‘mksuff’; have ‘char *(char *, char *)’
85 | mksuff(char *name, char *suff)
| ^~~~~~
In file included from sys.c:29:
transfig.h:67:24: note: previous declaration of ‘mksuff’ with type ‘char *(void)’
67 | extern char *sysls(), *mksuff();
| ^~~~~~
make[4]: *** [Makefile:399: sys.o] Error 1
transfig.c: In function ‘main’:
transfig.c:140:26: error: too many arguments to function ‘str2lang’; expected 0, have 1
140 | tolang = str2lang(optarg);
| ^~~~~~~~ ~~~~~~
In file included from transfig.c:29:
transfig.h:63:22: note: declared here
63 | extern enum language str2lang();
| ^~~~~~~~
transfig.c:171:13: error: too many arguments to function ‘parse_arg’; expected 0, have 6
171 | a = parse_arg(tolang, arg_f, arg_s, arg_m, arg_o, argv[optind]);
| ^~~~~~~~~ ~~~~~~
transfig.c:36:11: note: declared here
36 | argument *parse_arg(), *arglist = NULL, *lastarg = NULL;
| ^~~~~~~~~
transfig.c:188:21: error: too many arguments to function ‘parse_arg’; expected 0, have 6
188 | a = parse_arg(tolang, arg_f, arg_s, arg_m, arg_o, argbuf);
| ^~~~~~~~~ ~~~~~~
transfig.c:36:11: note: declared here
36 | argument *parse_arg(), *arglist = NULL, *lastarg = NULL;
| ^~~~~~~~~
transfig.c: At top level:
transfig.c:221:15: error: conflicting types for ‘str2lang’; have ‘enum language(char *)’
221 | enum language str2lang(char *s)
| ^~~~~~~~
transfig.h:63:22: note: previous declaration of ‘str2lang’ with type ‘enum language(void)’
63 | extern enum language str2lang();
| ^~~~~~~~
transfig.c:241:1: error: conflicting types for ‘parse_arg’; have ‘argument *(enum language, char *, char *, char *, char *, char *)’
241 | parse_arg(enum language tolang, char *arg_f, char *arg_s,
| ^~~~~~~~~
transfig.c:36:11: note: previous declaration of ‘parse_arg’ with type ‘argument *(void)’
36 | argument *parse_arg(), *arglist = NULL, *lastarg = NULL;
| ^~~~~~~~~
transfig.c: In function ‘parse_arg’:
transfig.c:259:7: error: too many arguments to function ‘strip’; expected 0, have 2
259 | if (strip(arg, ".pic"))
| ^~~~~ ~~~
transfig.c:37:7: note: declared here
37 | char *strip();
| ^~~~~
transfig.c:261:19: error: too many arguments to function ‘mksuff’; expected 0, have 2
261 | a->name = mksuff(arg, "");
| ^~~~~~ ~~~
transfig.h:67:24: note: declared here
67 | extern char *sysls(), *mksuff();
| ^~~~~~
transfig.c:268:7: error: too many arguments to function ‘strip’; expected 0, have 2
268 | if (strip(arg, ".ps"))
| ^~~~~ ~~~
transfig.c:37:7: note: declared here
37 | char *strip();
| ^~~~~
transfig.c:270:19: error: too many arguments to function ‘mksuff’; expected 0, have 2
270 | a->name = mksuff(arg, "");
| ^~~~~~ ~~~
transfig.h:67:24: note: declared here
67 | extern char *sysls(), *mksuff();
| ^~~~~~
transfig.c:276:7: error: too many arguments to function ‘strip’; expected 0, have 2
276 | if (strip(arg, ".pdf"))
| ^~~~~ ~~~
transfig.c:37:7: note: declared here
37 | char *strip();
| ^~~~~
transfig.c:278:19: error: too many arguments to function ‘mksuff’; expected 0, have 2
278 | a->name = mksuff(arg, "");
| ^~~~~~ ~~~
transfig.h:67:24: note: declared here
67 | extern char *sysls(), *mksuff();
| ^~~~~~
transfig.c:284:7: error: too many arguments to function ‘strip’; expected 0, have 2
284 | if (strip(arg, ".eps"))
| ^~~~~ ~~~
transfig.c:37:7: note: declared here
37 | char *strip();
| ^~~~~
transfig.c:286:19: error: too many arguments to function ‘mksuff’; expected 0, have 2
286 | a->name = mksuff(arg, "");
| ^~~~~~ ~~~
transfig.h:67:24: note: declared here
67 | extern char *sysls(), *mksuff();
| ^~~~~~
transfig.c:292:7: error: too many arguments to function ‘strip’; expected 0, have 2
292 | if (strip(arg, ".apg"))
| ^~~~~ ~~~
transfig.c:37:7: note: declared here
37 | char *strip();
| ^~~~~
transfig.c:294:19: error: too many arguments to function ‘mksuff’; expected 0, have 2
294 | a->name = mksuff(arg, "");
| ^~~~~~ ~~~
transfig.h:67:24: note: declared here
67 | extern char *sysls(), *mksuff();
| ^~~~~~
transfig.c:301:3: error: too many arguments to function ‘strip’; expected 0, have 2
301 | strip(arg, ".fig");
| ^~~~~ ~~~
transfig.c:37:7: note: declared here
37 | char *strip();
| ^~~~~
transfig.c:302:13: error: too many arguments to function ‘mksuff’; expected 0, have 2
302 | a->name = mksuff(arg, "");
| ^~~~~~ ~~~
transfig.h:67:24: note: declared here
67 | extern char *sysls(), *mksuff();
| ^~~~~~
Fixing this isn't time critical for Debian, since the upcoming Debian 13 (trixi) will use GCC 14. But fixing these issues should be on the roadmap, that's why I report it here.
I just noted, that https://sourceforge.net/p/mcj/fig2dev/ci/ab4eee3cf0d0c1d861d64b9569a5d1497800cae2/ already fixes this issue.