| omniorb/thread: use proper autoconf macros for header inclusion |
| |
| src/lib/omnithread/posix.cc uses sleep() and usleep(), defined in |
| <unistd.h> on numerous platforms, and struct timeval/gettimeofday(), |
| defined in <sys/time.h> on various platforms. |
| |
| Since those header files are not available on all platforms, posix.cc |
| currently uses the following condition: |
| |
| #if (defined(__GLIBC__) && __GLIBC__ >= 2) || defined(__SCO_VERSION__) || defined(__aix__) || defined (__cygwin__) || defined(__darwin__) || defined(__macos__) |
| |
| Unfortunately, this falls short on Linux systems based on the musl C |
| library. Indeed, the musl C library does not define the __GLIBC__ |
| symbol, but does have the sleep()/usleep() definitions in <unistd.h>, |
| and the struct timeval/gettimeofday() definitions in <sys/time.h>, |
| like any Linux system. Also, the musl C library does not define any |
| constant like __MUSL__ to distinguish it. |
| |
| Due to this, on musl based systems, <unistd.h> and <sys/time.h> are |
| not included, causing a build failure: |
| |
| posix.cc:864:22: error: '::sleep' has not been declared |
| while ((secs = ::sleep(secs))) ; |
| ^ |
| posix.cc:866:43: error: 'usleep' was not declared in this scope |
| usleep(secs * 1000000 + (nanosecs / 1000)); |
| ^ |
| posix.cc: In static member function 'static void omni_thread::get_time(long unsigned int*, long unsigned int*, long unsigned int, long unsigned int)': |
| posix.cc:904:20: error: aggregate 'omni_thread::get_time(long unsigned int*, long unsigned int*, long unsigned int, long unsigned int)::timeval tv' has incomplete type and cannot be defined |
| struct timeval tv; |
| ^ |
| posix.cc:905:24: error: 'gettimeofday' was not declared in this scope |
| gettimeofday(&tv, 0); |
| |
| It turns out that the configure.ac already checks for the availability |
| of <unistd.h> and <sys/time.h>. So all what this patch does is use the |
| C defines generated by the configure script to decide whether |
| <unistd.h> and <sys/time.h> can be included or not. |
| |
| Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> |
| |
| Index: b/src/lib/omnithread/posix.cc |
| =================================================================== |
| --- a/src/lib/omnithread/posix.cc |
| +++ b/src/lib/omnithread/posix.cc |
| @@ -78,10 +78,14 @@ |
| #include <errno.h> |
| #include <time.h> |
| #include <omnithread.h> |
| +#include <omniORB4/acconfig.h> |
| |
| -#if (defined(__GLIBC__) && __GLIBC__ >= 2) || defined(__SCO_VERSION__) || defined(__aix__) || defined (__cygwin__) || defined(__darwin__) || defined(__macos__) |
| // typedef of struct timeval and gettimeofday(); |
| +#if defined(HAVE_SYS_TIME_H) |
| #include <sys/time.h> |
| +#endif |
| + |
| +#if defined(HAVE_UNISTD_H) |
| #include <unistd.h> |
| #endif |
| |