Removes liconv LDFLAG and fixes ICONV_FULL. Signed-off-by: Rosen Penev <rosenp@gmail.com>lilik-openwrt-22.03
@ -1,11 +1,46 @@ | |||
From 90fcdb5b02e08b3faf2e321b081798cc18d35b15 Mon Sep 17 00:00:00 2001 | |||
From: Rosen Penev <rosenp@gmail.com> | |||
Date: Thu, 30 Jul 2020 14:34:07 -0700 | |||
Subject: [PATCH] icu/meson: link against iconv when used externally | |||
This basically adds -liconv to LDFLAGS, fixing a linking issue when | |||
iconv is missing in the libc. | |||
The previous commit fixed finding iconv but did not fix linking. | |||
Switched to using c_compiler for iconv. It seems compiler does not work | |||
properly. | |||
Signed-off-by: Rosen Penev <rosenp@gmail.com> | |||
--- | |||
src/lib/icu/meson.build | 14 ++++++++++++-- | |||
1 file changed, 12 insertions(+), 2 deletions(-) | |||
diff --git a/src/lib/icu/meson.build b/src/lib/icu/meson.build | |||
index bd6e30944..132e15b89 100644 | |||
--- a/src/lib/icu/meson.build | |||
+++ b/src/lib/icu/meson.build | |||
@@ -18,7 +18,7 @@ if icu_dep.found() | |||
@@ -18,8 +18,18 @@ if icu_dep.found() | |||
'Init.cxx', | |||
] | |||
elif not get_option('iconv').disabled() | |||
- have_iconv = compiler.has_function('iconv') | |||
+ have_iconv = compiler.has_function('iconv', prefix : '#include <iconv.h>') | |||
conf.set('HAVE_ICONV', have_iconv) | |||
- conf.set('HAVE_ICONV', have_iconv) | |||
+ have_iconv = c_compiler.has_header_symbol('iconv.h', 'iconv') | |||
+ if have_iconv | |||
+ libiconv = c_compiler.find_library('iconv') | |||
+ conf.set('HAVE_ICONV', have_iconv) | |||
+ libiconv_dep = static_library('iconv', icu_sources, include_directories: inc, dependencies: libiconv) | |||
+ icu_dep = declare_dependency(link_with: libiconv_dep, dependencies: util_dep) | |||
+ endif | |||
+ if not have_iconv and c_compiler.has_function('iconv') | |||
+ libiconv = [] | |||
+ have_iconv = true | |||
+ conf.set('HAVE_ICONV', have_iconv) | |||
+ endif | |||
if not have_iconv and get_option('iconv').enabled() | |||
error('iconv() not available') | |||
endif | |||
-- | |||
2.17.1 | |||
@ -0,0 +1,51 @@ | |||
From c2da1d47eeaf83d3683555b965a16654561f14b3 Mon Sep 17 00:00:00 2001 | |||
From: Rosen Penev <rosenp@gmail.com> | |||
Date: Thu, 30 Jul 2020 16:27:02 -0700 | |||
Subject: [PATCH] icu: fix compilation with const char iconv | |||
libiconv uses const char. Test for it and use it properly to fix | |||
compilation. | |||
Signed-off-by: Rosen Penev <rosenp@gmail.com> | |||
--- | |||
src/lib/icu/Converter.cxx | 2 +- | |||
src/lib/icu/meson.build | 10 ++++++++++ | |||
2 files changed, 11 insertions(+), 1 deletion(-) | |||
diff --git a/src/lib/icu/Converter.cxx b/src/lib/icu/Converter.cxx | |||
index b03543a82..4c459e57e 100644 | |||
--- a/src/lib/icu/Converter.cxx | |||
+++ b/src/lib/icu/Converter.cxx | |||
@@ -83,7 +83,7 @@ DoConvert(iconv_t conv, const char *src) | |||
{ | |||
// TODO: dynamic buffer? | |||
char buffer[4096]; | |||
- char *in = const_cast<char *>(src); | |||
+ ICONV_CONST char *in = (ICONV_CONST char *)(src); | |||
char *out = buffer; | |||
size_t in_left = strlen(src); | |||
size_t out_left = sizeof(buffer); | |||
diff --git a/src/lib/icu/meson.build b/src/lib/icu/meson.build | |||
index 132e15b89..ac7d1b72a 100644 | |||
--- a/src/lib/icu/meson.build | |||
+++ b/src/lib/icu/meson.build | |||
@@ -30,6 +30,16 @@ elif not get_option('iconv').disabled() | |||
have_iconv = true | |||
conf.set('HAVE_ICONV', have_iconv) | |||
endif | |||
+ if have_iconv | |||
+ iconvconsttest = '''#include <iconv.h> | |||
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); | |||
+''' | |||
+ if c_compiler.compiles(iconvconsttest, dependencies : libiconv) | |||
+ conf.set('ICONV_CONST', '') | |||
+ else | |||
+ conf.set('ICONV_CONST', 'const') | |||
+ endif | |||
+ endif | |||
if not have_iconv and get_option('iconv').enabled() | |||
error('iconv() not available') | |||
endif | |||
-- | |||
2.17.1 | |||