Fix CPU core count detection on QNX.

It tried to use sysctl() on QNX but
  - it broke the build because sysctl() needs -lsocket on QNX;
  - sysctl() doesn't work for detecting the core count on QNX
    even if it compiled.

sysconf() works. An alternative would have been to use
QNX-specific SYSPAGE_ENTRY(num_cpu) from <sys/syspage.h>.

Thanks to Ole André Vadla Ravnås.
This commit is contained in:
Lasse Collin 2015-03-27 22:39:07 +02:00
parent e0ea6737b0
commit 4c544d2410
1 changed files with 11 additions and 4 deletions

View File

@ -11,7 +11,7 @@
# Supported methods: # Supported methods:
# - GetSystemInfo(): Windows (including Cygwin) # - GetSystemInfo(): Windows (including Cygwin)
# - sysctl(): BSDs, OS/2 # - sysctl(): BSDs, OS/2
# - sysconf(): GNU/Linux, Solaris, Tru64, IRIX, AIX, Cygwin (but # - sysconf(): GNU/Linux, Solaris, Tru64, IRIX, AIX, QNX, Cygwin (but
# GetSystemInfo() is used on Cygwin) # GetSystemInfo() is used on Cygwin)
# - pstat_getdynamic(): HP-UX # - pstat_getdynamic(): HP-UX
# #
@ -61,10 +61,17 @@ main(void)
} }
]])], [tuklib_cv_cpucores_method=cpuset], [ ]])], [tuklib_cv_cpucores_method=cpuset], [
# Look for sysctl() solution first, because on OS/2, both sysconf() # On OS/2, both sysconf() and sysctl() pass the tests in this file,
# and sysctl() pass the tests in this file, but only sysctl() # but only sysctl() works. On QNX it's the opposite: only sysconf() works
# actually works. # (although it assumes that _POSIX_SOURCE, _XOPEN_SOURCE, and _POSIX_C_SOURCE
# are undefined or alternatively _QNX_SOURCE is defined).
#
# We test sysctl() first and intentionally break the sysctl() test on QNX
# so that sysctl() is never used on QNX.
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#ifdef __QNX__
compile error
#endif
#include <sys/types.h> #include <sys/types.h>
#ifdef HAVE_SYS_PARAM_H #ifdef HAVE_SYS_PARAM_H
# include <sys/param.h> # include <sys/param.h>