aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt5
-rw-r--r--OpenAL32/Include/alMain.h12
2 files changed, 16 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 533daa30..b11a20d4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -234,6 +234,11 @@ IF(NOT HAVE_WINDOWS_H)
IF(HAVE_LIBPTHREAD)
SET(EXTRA_LIBS pthread ${EXTRA_LIBS})
ENDIF()
+
+ CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_LIBRT)
+ IF(HAVE_LIBRT)
+ SET(EXTRA_LIBS rt ${EXTRA_LIBS})
+ ENDIF()
ENDIF()
# Check for a 64-bit type
diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h
index 2fa79574..bc6c6d8b 100644
--- a/OpenAL32/Include/alMain.h
+++ b/OpenAL32/Include/alMain.h
@@ -28,6 +28,7 @@ typedef DWORD tls_type;
#else
+#include <unistd.h>
#include <assert.h>
#include <pthread.h>
#ifdef HAVE_PTHREAD_NP_H
@@ -91,13 +92,22 @@ static inline void DeleteCriticalSection(CRITICAL_SECTION *cs)
* as opposed to the actual time. */
static inline ALuint timeGetTime(void)
{
- struct timeval tv;
int ret;
+#ifdef _POSIX_TIMERS
+ struct timespec ts;
+
+ ret = clock_gettime(CLOCK_REALTIME, &ts);
+ assert(ret == 0);
+
+ return ts.tv_nsec/1000000 + ts.tv_sec*1000;
+#else
+ struct timeval tv;
ret = gettimeofday(&tv, NULL);
assert(ret == 0);
return tv.tv_usec/1000 + tv.tv_sec*1000;
+#endif
}
static inline void Sleep(ALuint t)