From d21ccd4d088d3cacfdb8ca6e65c5d675773e92f8 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Tue, 29 Jun 2010 23:20:18 -0600 Subject: Add some functionality checks to configure.ac for platform.c. --- libdimension/platform.c | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) (limited to 'libdimension') diff --git a/libdimension/platform.c b/libdimension/platform.c index be7e7a8..372dbb5 100644 --- a/libdimension/platform.c +++ b/libdimension/platform.c @@ -19,26 +19,35 @@ *************************************************************************/ #include "dimension_impl.h" -#include /* For sysconf() */ -#include /* For htonl() */ -#include /* For backtrace() etc. */ -#include /* For gettid() where supported */ -#include /* For sched_getaffinity() */ +#if HAVE_UNISTD_H + #include +#endif +#if DMNSN_BACKTRACE + #include /* For backtrace() etc. */ +#endif +#if DMNSN_GETTID + #include /* For gettid() where supported */ +#endif +#if DMNSN_SCHED_GETAFFINITY + #include /* For sched_getaffinity() */ +#endif void dmnsn_backtrace(FILE *file) { +#if DMNSN_BACKTRACE const size_t size = 128; void *buffer[size]; int nptrs = backtrace(buffer, size); backtrace_symbols_fd(buffer, nptrs, fileno(file)); +#endif } bool dmnsn_is_main_thread() { -#ifdef SYS_gettid +#if DMNSN_GETTID return getpid() == syscall(SYS_gettid); #else return true; @@ -48,12 +57,18 @@ dmnsn_is_main_thread() bool dmnsn_is_little_endian() { - return htonl(1) != 1; + /* Undefined behaviour, but quite portable */ + union { + unsigned int i; + unsigned char c; + } u = { .i = 1 }; + return u.c == 1; } size_t dmnsn_ncpus() { +#if DMNSN_SCHED_GETAFFINITY cpu_set_t cpuset; if (sched_getaffinity(0, sizeof(cpuset), &cpuset) == 0) { return CPU_COUNT(&cpuset); @@ -61,4 +76,15 @@ dmnsn_ncpus() dmnsn_error(DMNSN_SEVERITY_MEDIUM, "sched_getaffinity() failed."); return 1; } +#elif DMNSN_SC_NPROCESSORS_ONLN + long nprocs = sysconf(_SC_NPROCESSORS_ONLN); + if (nprocs > 0) { + return nprocs; + } else { + dmnsn_error(DMNSN_SEVERITY_MEDIUM, "sysconf(_SC_NPROCESSORS_ONLN) failed."); + return 1; + } +#else + return 1; +#endif } -- cgit v1.2.3