From fad9c6dc5432dd393affa5025eda509062f5b743 Mon Sep 17 00:00:00 2001 From: Filip Stenstrom Date: Tue, 27 Apr 2021 10:17:01 +0200 Subject: [PATCH] Remove _GNU_SOURCE flag from APPLE builds _GNU_SOURCE should not have been defined in the first place for OSX, and then it should have defaulted to using non-thread-specific locale. This fixes future such problems. In this case the Linux and apple interface to thread-specific locale seems to be the same, why I keep the xlocale header instead of defaulting to process-specific. --- CMakeLists.txt | 2 +- Config.cmake/jmutil.cmake | 5 ++++- src/Util/src/JM/jm_portability.c | 12 +++++++++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6fb6362a..9efaa709 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -284,7 +284,7 @@ endif() if(FMILIB_BUILD_SHARED_LIB) add_library(fmilib_shared SHARED ${FMILIB_SHARED_SRC}) - if (UNIX) + if (UNIX AND NOT APPLE) target_compile_definitions(fmilib_shared PRIVATE -D_GNU_SOURCE) endif() diff --git a/Config.cmake/jmutil.cmake b/Config.cmake/jmutil.cmake index 0cce2f7c..1d2a8bd2 100644 --- a/Config.cmake/jmutil.cmake +++ b/Config.cmake/jmutil.cmake @@ -62,8 +62,11 @@ endif(CYGWIN) target_link_libraries(jmutils c99snprintf) -if(UNIX) +if(UNIX AND NOT APPLE) target_compile_definitions(jmutils PRIVATE -D_GNU_SOURCE) +endif() + +if(UNIX) target_link_libraries(jmutils dl) endif(UNIX) if(WIN32) diff --git a/src/Util/src/JM/jm_portability.c b/src/Util/src/JM/jm_portability.c index 969658cd..7608b5a6 100644 --- a/src/Util/src/JM/jm_portability.c +++ b/src/Util/src/JM/jm_portability.c @@ -18,7 +18,13 @@ #include #include + +#if defined(_GNU_SOURCE) || defined(__APPLE__) +#define UNIX_THREAD_LOCALE +#endif + #ifdef __APPLE__ +/* Include thread-specific locale functions for OSX. */ #include #endif @@ -361,7 +367,7 @@ int jm_snprintf(char * str, size_t size, const char * fmt, ...) { } struct jm_locale_t { -#ifdef _GNU_SOURCE +#ifdef UNIX_THREAD_LOCALE locale_t locale_old; #else char* locale_old; @@ -379,7 +385,7 @@ jm_locale_t* jm_setlocale_numeric(jm_callbacks* cb, const char* value) { return NULL; } -#ifdef _GNU_SOURCE +#ifdef UNIX_THREAD_LOCALE { locale_t nloc = NULL; @@ -450,7 +456,7 @@ int jm_resetlocale_numeric(jm_callbacks* cb, jm_locale_t* jmloc) { return 1; /* impl. error */ } -#ifdef _GNU_SOURCE +#ifdef UNIX_THREAD_LOCALE { /* Get current locale, which is expected to have been set with a previous * call to 'jm_setlocale_numeric'. */