Check for the presence of _SC_NPROCESSORS_ONLN rather than using a list of OS-specific macros to decide whether to use `sysconf' like elsewhere across GCC sources, fixing a compilation error:
adaint.c: In function '__gnat_number_of_cpus': adaint.c:2398:26: error: '_SC_NPROCESSORS_ONLN' undeclared (first use in this function) 2398 | cores = (int) sysconf (_SC_NPROCESSORS_ONLN); | ^~~~~~~~~~~~~~~~~~~~ adaint.c:2398:26: note: each undeclared identifier is reported only once for each function it appears in at least with with VAX/NetBSD 1.6.2. gcc/ada/ * adaint.c (__gnat_number_of_cpus): Check for the presence of _SC_NPROCESSORS_ONLN rather than a list of OS-specific macros to decide whether to use `sysconf'. --- On Sun, 15 Nov 2020, Arnaud Charlet wrote: > > NB we could probably replace the list of OS #ifdefs with just a check for > > _SC_NPROCESSORS_ONLN, making use of it automagically with any new OS that > > supports it, as from the length of the list has grown up to I gather the > > `sysconf' API for this variable has become a semi-established standard now > > even though not actually listed by the relevant standards. > > Indeed, so a better patch would be to use > > #if defined (_SC_NPROCESSORS_ONLN) > > instead as you noted, so let's do that. This is what I have committed then, thank you for your review. Maciej --- gcc/ada/adaint.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) Index: gcc/gcc/ada/adaint.c =================================================================== --- gcc.orig/gcc/ada/adaint.c +++ gcc/gcc/ada/adaint.c @@ -2483,9 +2483,7 @@ __gnat_number_of_cpus (void) { int cores = 1; -#if defined (__linux__) || defined (__sun__) || defined (_AIX) \ - || defined (__APPLE__) || defined (__FreeBSD__) || defined (__OpenBSD__) \ - || defined (__DragonFly__) || defined (__NetBSD__) +#ifdef _SC_NPROCESSORS_ONLN cores = (int) sysconf (_SC_NPROCESSORS_ONLN); #elif defined (__QNX__)