meson: port ncpmc iconv solution

Properly deals with iconv, unlike the current solution. have_iconv fails
when libiconv CFLAGS are passed to the compiler. Tested under OpenWrt
with its CONFIG_BUILD_NLS, which adds libiconv include flags.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
This commit is contained in:
Rosen Penev 2022-07-19 15:11:59 -07:00 committed by Max Kellermann
parent 956c5faebb
commit cc557c4d60
2 changed files with 19 additions and 10 deletions

1
NEWS
View File

@ -1,6 +1,7 @@
ver 0.23.9 (not yet released) ver 0.23.9 (not yet released)
* output * output
- pipewire: set app icon - pipewire: set app icon
* improve iconv detection
ver 0.23.8 (2022/07/09) ver 0.23.8 (2022/07/09)
* storage * storage

View File

@ -18,18 +18,26 @@ if icu_dep.found()
'Util.cxx', 'Util.cxx',
'Init.cxx', 'Init.cxx',
] ]
else
if meson.version().version_compare('>= 0.60')
iconv_dep = dependency('iconv', required: get_option('iconv'))
conf.set('HAVE_ICONV', iconv_dep.found())
elif not get_option('iconv').disabled() elif not get_option('iconv').disabled()
# an installed iconv library will make the builtin iconv() unavailable, iconv_open_snippet = '''#include <iconv.h>
# so search for the library first and pass it as (possible) dependency int main() {
iconv_dep = compiler.find_library('libiconv', required: false) iconv_open("","");
have_iconv = compiler.has_function('iconv', }'''
dependencies: iconv_dep, have_iconv = compiler.links(iconv_open_snippet, name: 'iconv_open')
prefix : '#include <iconv.h>') if not have_iconv
iconv_dep = compiler.find_library('iconv', required: false)
have_iconv = compiler.links(iconv_open_snippet, dependencies: iconv_dep, name: 'iconv_open')
endif
if not have_iconv and get_option('iconv').enabled() if not have_iconv and get_option('iconv').enabled()
error('iconv() not available') error('iconv() not available')
endif endif
conf.set('HAVE_ICONV', have_iconv) conf.set('HAVE_ICONV', have_iconv)
endif endif
endif
icu = static_library( icu = static_library(
'icu', 'icu',