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 093d6959..7608b5a6 100644 --- a/src/Util/src/JM/jm_portability.c +++ b/src/Util/src/JM/jm_portability.c @@ -15,8 +15,18 @@ #include #include -#include #include + +#include + +#if defined(_GNU_SOURCE) || defined(__APPLE__) +#define UNIX_THREAD_LOCALE +#endif + +#ifdef __APPLE__ +/* Include thread-specific locale functions for OSX. */ +#include +#endif #include @@ -357,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; @@ -375,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; @@ -446,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'. */