Commit 7450a8b3 authored by NeroBurner's avatar NeroBurner Committed by NeroBurner

mingw-w64: check if localtime_r exists

- check in cmake if localtime_r exists
- if localtime_r is missing (MSVC, mingw-w64 on linux) redefine it using
  localtime_s
parent 0797f738
...@@ -386,6 +386,18 @@ elseif (UNIX OR (APPLE AND HAVE_DLADDR)) ...@@ -386,6 +386,18 @@ elseif (UNIX OR (APPLE AND HAVE_DLADDR))
set (HAVE_SYMBOLIZE 1) set (HAVE_SYMBOLIZE 1)
endif (WIN32 OR CYGWIN) endif (WIN32 OR CYGWIN)
check_cxx_source_compiles ("
#include <cstdlib>
#include <time.h>
int main()
{
time_t timep;
struct tm result;
localtime_r(&timep, &result);
return EXIT_SUCCESS;
}
" HAVE_LOCALTIME_R)
set (SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P}) set (SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
if (WITH_THREADS AND Threads_FOUND) if (WITH_THREADS AND Threads_FOUND)
......
...@@ -136,6 +136,9 @@ ...@@ -136,6 +136,9 @@
/* define if symbolize support is available */ /* define if symbolize support is available */
#cmakedefine HAVE_SYMBOLIZE #cmakedefine HAVE_SYMBOLIZE
/* define if localtime_r is available in time.h */
#cmakedefine HAVE_LOCALTIME_R
/* Define to the sub-directory in which libtool stores uninstalled libraries. /* Define to the sub-directory in which libtool stores uninstalled libraries.
*/ */
#cmakedefine LT_OBJDIR #cmakedefine LT_OBJDIR
......
...@@ -147,10 +147,12 @@ enum { PTHREAD_ONCE_INIT = 0 }; // important that this be 0! for SpinLock ...@@ -147,10 +147,12 @@ enum { PTHREAD_ONCE_INIT = 0 }; // important that this be 0! for SpinLock
#define pthread_equal(pthread_t_1, pthread_t_2) ((pthread_t_1)==(pthread_t_2)) #define pthread_equal(pthread_t_1, pthread_t_2) ((pthread_t_1)==(pthread_t_2))
#endif // HAVE_PTHREAD #endif // HAVE_PTHREAD
#ifndef HAVE_LOCALTIME_R
inline struct tm* localtime_r(const time_t* timep, struct tm* result) { inline struct tm* localtime_r(const time_t* timep, struct tm* result) {
localtime_s(result, timep); localtime_s(result, timep);
return result; return result;
} }
#endif
inline char* strerror_r(int errnum, char* buf, size_t buflen) { inline char* strerror_r(int errnum, char* buf, size_t buflen) {
strerror_s(buf, buflen, errnum); strerror_s(buf, buflen, errnum);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment