mirror of
https://github.com/glfw/glfw.git
synced 2024-11-26 06:14:35 +00:00
POSIX: Remove use of deprecated gettimeofday
POSIX.1-2008 deprecated gettimeofday, which we used as a fallback if the monotonic clock was unavailable. This replaces that fallback with the non-monotonic real-time clock. Because of the Gordian knot of feature test macros across Unices, this also includes the shift from some platform source files defining _POSIX_C_SOURCE to various values to _DEFAULT_SOURCE being defined for all source files on Linux. This is because -std=c99 on Linux disables _DEFAULT_SOURCE (POSIX 2008 and extensions). Once runtime platform selection comes in, this kind of platform-specific preprocessor logic can be moved into the platform glue files and won't need to be replicated by third-party build setups, but for now, sorry.
This commit is contained in:
parent
58b48a3a00
commit
111c02d74e
@ -236,6 +236,7 @@ information on what to include when reporting a bug.
|
|||||||
- [Wayland] Bugfix: Client-Side Decorations were destroyed in the wrong worder
|
- [Wayland] Bugfix: Client-Side Decorations were destroyed in the wrong worder
|
||||||
(#1798)
|
(#1798)
|
||||||
- [Wayland] Bugfix: Monitors physical size could report zero (#1784,#1792)
|
- [Wayland] Bugfix: Monitors physical size could report zero (#1784,#1792)
|
||||||
|
- [POSIX] Removed use of deprecated function `gettimeofday`
|
||||||
- [POSIX] Bugfix: `CLOCK_MONOTONIC` was not correctly tested for or enabled
|
- [POSIX] Bugfix: `CLOCK_MONOTONIC` was not correctly tested for or enabled
|
||||||
- [NSGL] Removed enforcement of forward-compatible flag for core contexts
|
- [NSGL] Removed enforcement of forward-compatible flag for core contexts
|
||||||
- [NSGL] Bugfix: `GLFW_COCOA_RETINA_FRAMEBUFFER` had no effect on newer
|
- [NSGL] Bugfix: `GLFW_COCOA_RETINA_FRAMEBUFFER` had no effect on newer
|
||||||
|
@ -190,6 +190,13 @@ if (MSVC90)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Workaround for -std=c99 on Linux disabling _DEFAULT_SOURCE (POSIX 2008 and more)
|
||||||
|
if (_GLFW_X11 OR _GLFW_WAYLAND OR _GLFW_OSMESA)
|
||||||
|
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
|
target_compile_definitions(glfw PRIVATE _DEFAULT_SOURCE)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if (BUILD_SHARED_LIBS)
|
if (BUILD_SHARED_LIBS)
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
if (MINGW)
|
if (MINGW)
|
||||||
|
@ -27,13 +27,10 @@
|
|||||||
// It is fine to use C99 in this file because it will not be built with VS
|
// It is fine to use C99 in this file because it will not be built with VS
|
||||||
//========================================================================
|
//========================================================================
|
||||||
|
|
||||||
#define _POSIX_C_SOURCE 199309L
|
|
||||||
|
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
@ -44,20 +41,14 @@
|
|||||||
//
|
//
|
||||||
void _glfwInitTimerPOSIX(void)
|
void _glfwInitTimerPOSIX(void)
|
||||||
{
|
{
|
||||||
#if defined(_POSIX_TIMERS) && defined(_POSIX_MONOTONIC_CLOCK)
|
_glfw.timer.posix.clock = CLOCK_REALTIME;
|
||||||
struct timespec ts;
|
|
||||||
|
|
||||||
if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0)
|
|
||||||
{
|
|
||||||
_glfw.timer.posix.monotonic = GLFW_TRUE;
|
|
||||||
_glfw.timer.posix.frequency = 1000000000;
|
_glfw.timer.posix.frequency = 1000000000;
|
||||||
}
|
|
||||||
else
|
#if defined(_POSIX_MONOTONIC_CLOCK)
|
||||||
|
struct timespec ts;
|
||||||
|
if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0)
|
||||||
|
_glfw.timer.posix.clock = CLOCK_MONOTONIC;
|
||||||
#endif
|
#endif
|
||||||
{
|
|
||||||
_glfw.timer.posix.monotonic = GLFW_FALSE;
|
|
||||||
_glfw.timer.posix.frequency = 1000000;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -67,20 +58,9 @@ void _glfwInitTimerPOSIX(void)
|
|||||||
|
|
||||||
uint64_t _glfwPlatformGetTimerValue(void)
|
uint64_t _glfwPlatformGetTimerValue(void)
|
||||||
{
|
{
|
||||||
#if defined(_POSIX_TIMERS) && defined(_POSIX_MONOTONIC_CLOCK)
|
|
||||||
if (_glfw.timer.posix.monotonic)
|
|
||||||
{
|
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
clock_gettime(_glfw.timer.posix.clock, &ts);
|
||||||
return (uint64_t) ts.tv_sec * (uint64_t) 1000000000 + (uint64_t) ts.tv_nsec;
|
return (uint64_t) ts.tv_sec * (uint64_t) 1000000000 + (uint64_t) ts.tv_nsec;
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
struct timeval tv;
|
|
||||||
gettimeofday(&tv, NULL);
|
|
||||||
return (uint64_t) tv.tv_sec * (uint64_t) 1000000 + (uint64_t) tv.tv_usec;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t _glfwPlatformGetTimerFrequency(void)
|
uint64_t _glfwPlatformGetTimerFrequency(void)
|
||||||
|
@ -28,13 +28,14 @@
|
|||||||
#define _GLFW_PLATFORM_LIBRARY_TIMER_STATE _GLFWtimerPOSIX posix
|
#define _GLFW_PLATFORM_LIBRARY_TIMER_STATE _GLFWtimerPOSIX posix
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
|
||||||
// POSIX-specific global timer data
|
// POSIX-specific global timer data
|
||||||
//
|
//
|
||||||
typedef struct _GLFWtimerPOSIX
|
typedef struct _GLFWtimerPOSIX
|
||||||
{
|
{
|
||||||
GLFWbool monotonic;
|
clockid_t clock;
|
||||||
uint64_t frequency;
|
uint64_t frequency;
|
||||||
|
|
||||||
} _GLFWtimerPOSIX;
|
} _GLFWtimerPOSIX;
|
||||||
|
@ -26,8 +26,6 @@
|
|||||||
// It is fine to use C99 in this file because it will not be built with VS
|
// It is fine to use C99 in this file because it will not be built with VS
|
||||||
//========================================================================
|
//========================================================================
|
||||||
|
|
||||||
#define _POSIX_C_SOURCE 200809L
|
|
||||||
|
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@ -1297,10 +1295,8 @@ void _glfwPlatformTerminate(void)
|
|||||||
const char* _glfwPlatformGetVersionString(void)
|
const char* _glfwPlatformGetVersionString(void)
|
||||||
{
|
{
|
||||||
return _GLFW_VERSION_NUMBER " Wayland EGL OSMesa"
|
return _GLFW_VERSION_NUMBER " Wayland EGL OSMesa"
|
||||||
#if defined(_POSIX_TIMERS) && defined(_POSIX_MONOTONIC_CLOCK)
|
#if defined(_POSIX_MONOTONIC_CLOCK)
|
||||||
" clock_gettime"
|
" monotonic"
|
||||||
#else
|
|
||||||
" gettimeofday"
|
|
||||||
#endif
|
#endif
|
||||||
" evdev"
|
" evdev"
|
||||||
#if defined(_GLFW_BUILD_DLL)
|
#if defined(_GLFW_BUILD_DLL)
|
||||||
|
@ -1484,10 +1484,8 @@ void _glfwPlatformTerminate(void)
|
|||||||
const char* _glfwPlatformGetVersionString(void)
|
const char* _glfwPlatformGetVersionString(void)
|
||||||
{
|
{
|
||||||
return _GLFW_VERSION_NUMBER " X11 GLX EGL OSMesa"
|
return _GLFW_VERSION_NUMBER " X11 GLX EGL OSMesa"
|
||||||
#if defined(_POSIX_TIMERS) && defined(_POSIX_MONOTONIC_CLOCK)
|
#if defined(_POSIX_MONOTONIC_CLOCK)
|
||||||
" clock_gettime"
|
" monotonic"
|
||||||
#else
|
|
||||||
" gettimeofday"
|
|
||||||
#endif
|
#endif
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
" evdev"
|
" evdev"
|
||||||
|
Loading…
Reference in New Issue
Block a user