set(NEWLIB ON)
elseif(${M68K_CRT} STREQUAL "clib2")
set(CLIB2 ON)
+ elseif(${M68K_CRT} STREQUAL "ixemul")
+ set(IXEMUL ON)
elseif(${M68K_CRT} STREQUAL "nix20")
set(NIX20 ON)
elseif(${M68K_CRT} STREQUAL "nix13")
if (HAVE_LOCALE_H)
check_symbol_exists(setlocale "locale.h" HAVE_SETLOCALE)
check_symbol_exists(uselocale "locale.h" HAVE_USELOCALE)
+ if (NOT NIX20 AND NOT NIX13)
+ # libnix does not fully support this yet
+ check_symbol_exists(duplocale "locale.h" HAVE_DUPLOCALE)
+ endif()
endif()
# uClibc *intentionally* crashes in duplocale(), at least as of:
# OSX Mach-O doesn't support linking with '-Bsymbolic-functions'.
# Others may not support it, too.
- list(APPEND CMAKE_REQUIRED_LIBRARIES "-Wl,-Bsymbolic-functions")
+ list(APPEND CMAKE_REQUIRED_LIBRARIES "-Wl,-Bsymbolic-functions,-lamiga,-lc")
check_c_source_compiles(
"
int main (void)
libjson-c.a will get created in the build directory.
-You can change newlib to nix20, nix13 or clib2 if you would like to build the library suited for libnix or clib2 instead. Newlib is default.
+You can change newlib to nix20, nix13, ixemul or clib2 if you would like to build the library suited for libnix or clib2 instead. Newlib is default.
### To build for PowerPC Amiga:
/* Define to 1 if you have the `uselocale' function. */
#cmakedefine HAVE_USELOCALE
+/* Define to 1 if you have the `duplocale' function. */
+#cmakedefine HAVE_DUPLOCALE
+
/* Define to 1 if newlocale() needs freelocale() called on it's `base` argument */
#cmakedefine NEWLOCALE_NEEDS_FREELOCALE
#ifdef HAVE_USELOCALE
{
+#ifdef HAVE_DUPLOCALE
locale_t duploc = duplocale(oldlocale);
if (duploc == NULL && errno == ENOMEM)
{
return NULL;
}
newloc = newlocale(LC_NUMERIC_MASK, "C", duploc);
+#else
+ newloc = newlocale(LC_NUMERIC_MASK, "C", oldlocale);
+#endif
if (newloc == NULL)
{
tok->err = json_tokener_error_memory;
+#ifdef HAVE_DUPLOCALE
freelocale(duploc);
+#endif
return NULL;
}
#ifdef NEWLOCALE_NEEDS_FREELOCALE
+#ifdef HAVE_DUPLOCALE
// Older versions of FreeBSD (<12.4) don't free the locale
// passed to newlocale(), so do it here
freelocale(duploc);
+#endif
#endif
uselocale(newloc);
}