I tried to build diffutils 3.11 and 3.12 with GCC 14.2, both fail here:
/opt/local/bin/gcc-mp-14 -std=gnu23 -I. -I/opt/local/include
-Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef
-Wno-unused-function -Wno-unused-parameter -Wno-float-conversion
-Wimplicit-fallthrough -Wno-pedantic -Wno-sign-conversion -Wno-type-limits
-Wno-unused-const-variable -Wno-unsuffixed-float-constants -Wno-error -pipe -Os
-arch ppc -MT libdiffutils_a-sigsegv.o -MD -MP -MF
.deps/libdiffutils_a-sigsegv.Tpo -c -o libdiffutils_a-sigsegv.o `test -f
'sigsegv.c' || echo './'`sigsegv.c
sigsegv.c: In function 'sigsegv_handler':
sigsegv.c:1169:11: error: passing argument 2 of 'signal' from
incompatible pointer type [-Wincompatible-pointer-types]
1169 | SIGSEGV_FOR_ALL_SIGNALS (signo, signal (signo,
SIG_DFL);)
| ^~~~~~~~~~~~~~~~~~~~~~~
| |
| void (*)(void)
In file included from /usr/include/signal.h:63,
from ./signal.h:52,
from sigsegv.h:48,
from sigsegv.c:23:
/usr/include/sys/signal.h:419:23: note: expected 'void (*)(int)' but
argument is of type 'void (*)(void)'
419 | void (*signal(int, void (*)(int)))(int);
| ^~~~~~~~~~~~~
sigsegv.c:1169:11: error: passing argument 2 of 'signal' from
incompatible pointer type [-Wincompatible-pointer-types]
1169 | SIGSEGV_FOR_ALL_SIGNALS (signo, signal (signo,
SIG_DFL);)
| ^~~~~~~~~~~~~~~~~~~~~~~
| |
| void (*)(void)
/usr/include/sys/signal.h:419:23: note: expected 'void (*)(int)' but
argument is of type 'void (*)(void)'
419 | void (*signal(int, void (*)(int)))(int);
| ^~~~~~~~~~~~~
sigsegv.c: In function 'sigsegv_deinstall_handler':
sigsegv.c:1395:7: error: passing argument 2 of 'signal' from
incompatible pointer type [-Wincompatible-pointer-types]
1395 | SIGSEGV_FOR_ALL_SIGNALS (sig, signal (sig, SIG_DFL);)
| ^~~~~~~~~~~~~~~~~~~~~~~
| |
| void (*)(void)
/usr/include/sys/signal.h:419:23: note: expected 'void (*)(int)' but
argument is of type 'void (*)(void)'
419 | void (*signal(int, void (*)(int)))(int);
| ^~~~~~~~~~~~~
sigsegv.c:1395:7: error: passing argument 2 of 'signal' from
incompatible pointer type [-Wincompatible-pointer-types]
1395 | SIGSEGV_FOR_ALL_SIGNALS (sig, signal (sig, SIG_DFL);)
| ^~~~~~~~~~~~~~~~~~~~~~~
| |
| void (*)(void)
/usr/include/sys/signal.h:419:23: note: expected 'void (*)(int)' but
argument is of type 'void (*)(void)'
419 | void (*signal(int, void (*)(int)))(int);
| ^~~~~~~~~~~~~
sigsegv.c: In function 'stackoverflow_deinstall_handler':
sigsegv.c:1472:7: error: passing argument 2 of 'signal' from
incompatible pointer type [-Wincompatible-pointer-types]
1472 | SIGSEGV_FOR_ALL_SIGNALS (sig, signal (sig, SIG_DFL);)
| ^~~~~~~~~~~~~~~~~~~~~~~
| |
| void (*)(void)
/usr/include/sys/signal.h:419:23: note: expected 'void (*)(int)' but
argument is of type 'void (*)(void)'
419 | void (*signal(int, void (*)(int)))(int);
| ^~~~~~~~~~~~~
sigsegv.c:1472:7: error: passing argument 2 of 'signal' from
incompatible pointer type [-Wincompatible-pointer-types]
1472 | SIGSEGV_FOR_ALL_SIGNALS (sig, signal (sig, SIG_DFL);)
| ^~~~~~~~~~~~~~~~~~~~~~~
| |
| void (*)(void)
/usr/include/sys/signal.h:419:23: note: expected 'void (*)(int)' but
argument is of type 'void (*)(void)'
419 | void (*signal(int, void (*)(int)))(int);
| ^~~~~~~~~~~~~
make[2]: *** [libdiffutils_a-sigsegv.o] Error 1
make[2]: Leaving directory
`/opt/local/var/macports/build/_Volumes_BSD-Linux_macports-ports_sysutils_diffutils/diffutils/work/diffutils-3.12/lib'
Adding -Wincompatible-pointer-types to turn errors into warning does change the
failure. SIG_DFL is #define'd in sgnal.h:
116 #if defined(_ANSI_SOURCE) || defined(_POSIX_C_SOURCE) ||
defined(__cplusplus)
117 /*
118 * Language spec sez we must list exactly one parameter, even
though we
119 * actually supply three. Ugh!
120 * SIG_HOLD is chosen to avoid KERN_SIG_* values in
<sys/signalvar.h>
121 */
122 #define SIG_DFL (void (*)(int))0
123 #define SIG_IGN (void (*)(int))1
124 #define SIG_HOLD (void (*)(int))5
125 #define SIG_ERR ((void (*)(int))-1)
126 #else
127 /* DO NOT REMOVE THE COMMENTED OUT int: fixincludes needs to
see them */
128 #define SIG_DFL (void (*)(/*int*/))0
129 #define SIG_IGN (void (*)(/*int*/))1
130 #define SIG_HOLD (void (*)(/*int*/))5
131 #define SIG_ERR ((void (*)(/*int*/))-1)
132 #endif
None of _ANSI_SOURCE, _POSIX_C_SOURCE, or __cplusplus are defined by GCC 14.2
here. As an amateur I have no idea how to solve this, so I'm going to live with
the Apple supplied tools.
--
Greetings
Pete
One cannot live by television, video games, top ten CDs, and dumb movies alone.
– Amiri Baraka, 1999