From b87fbc93a64d9b5dd219396fc5c98e8779c55810 Mon Sep 17 00:00:00 2001 From: Přemysl Eric Janouch Date: Wed, 11 Sep 2024 04:55:48 +0200 Subject: Support musl libc --- CMakeLists.txt | 20 ++++++++++++++------ config.h.in | 2 ++ json-rpc-shell.c | 5 ++--- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6afeaa4..501ea3a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,12 +29,6 @@ set (project_libraries ${dependencies_LIBRARIES} ${LibEV_LIBRARIES}) include_directories (${dependencies_INCLUDE_DIRS} ${LibEV_INCLUDE_DIRS}) link_directories (${dependencies_LIBRARY_DIRS}) -# -liconv may or may not be a part of libc -find_library (iconv_LIBRARIES iconv) -if (iconv_LIBRARIES) - list (APPEND project_libraries ${iconv_LIBRARIES}) -endif () - if ("${CMAKE_SYSTEM_NAME}" MATCHES "BSD") # Need this for SIGWINCH in FreeBSD and OpenBSD respectively; # our POSIX version macros make it undefined @@ -43,6 +37,20 @@ elseif (APPLE) add_definitions (-D_DARWIN_C_SOURCE) endif () +# -liconv may or may not be a part of libc +find_library (iconv_LIBRARIES iconv) +if (iconv_LIBRARIES) + list (APPEND project_libraries ${iconv_LIBRARIES}) +endif () + +include (CheckCSourceRuns) +set (CMAKE_REQUIRED_LIBRARIES ${project_libraries}) +get_property (CMAKE_REQUIRED_INCLUDES + DIRECTORY "${PROJECT_SOURCE_DIR}" PROPERTY INCLUDE_DIRECTORIES) +CHECK_C_SOURCE_RUNS ("#include + int main () { return iconv_open (\"UTF-8//TRANSLIT\", \"ISO-8859-1\") + == (iconv_t) -1; }" ICONV_ACCEPTS_TRANSLIT) + if (Ncursesw_FOUND) list (APPEND project_libraries ${Ncursesw_LIBRARIES}) include_directories (${Ncursesw_INCLUDE_DIRS}) diff --git a/config.h.in b/config.h.in index 87e075c..644d58a 100644 --- a/config.h.in +++ b/config.h.in @@ -7,5 +7,7 @@ #cmakedefine HAVE_READLINE #cmakedefine HAVE_EDITLINE +#cmakedefine01 ICONV_ACCEPTS_TRANSLIT + #endif // ! CONFIG_H diff --git a/json-rpc-shell.c b/json-rpc-shell.c index 86e291d..a80be5d 100644 --- a/json-rpc-shell.c +++ b/json-rpc-shell.c @@ -4076,11 +4076,10 @@ main (int argc, char *argv[]) setlocale (LC_CTYPE, ""); char *encoding = nl_langinfo (CODESET); -#ifdef __linux__ // XXX: not quite sure if this is actually desirable // TODO: instead retry with JSON_ENSURE_ASCII - encoding = xstrdup_printf ("%s//TRANSLIT", encoding); -#endif // __linux__ + if (ICONV_ACCEPTS_TRANSLIT) + encoding = xstrdup_printf ("%s//TRANSLIT", encoding); if ((g_ctx.term_from_utf8 = iconv_open (encoding, "UTF-8")) == (iconv_t) -1 -- cgit v1.2.3-70-g09d2