meson: fix str[n]casecmp detection on clang-cl

Meson incorrectly detects strcasecmp, strncasecmp on clang-cl if 'prefix:'
is not specified for cc.has_function().

See https://github.com/mesonbuild/meson/issues/5628

Fixes https://gitlab.gnome.org/GNOME/glib/-/issues/2337

Before this change:
msvc was using _stricmp()
gcc on mingw was using strcasecmp()
gcc on linux was using strcasecmp()
clang-cl was trying to use strcasecmp()

After this change:
msvc is using _stricmp()
gcc on mingw is using strcasecmp()
gcc on linux is using strcasecmp()
clang-cl is using _stricmp()

Tests are still failing to build with clang-cl, but that's a separate issue.
This commit is contained in:
Aleksandr Mezin 2021-02-28 02:27:13 +06:00
parent 47a949d74f
commit 1eac0c39f9

View File

@ -662,7 +662,7 @@ elif cc.has_function('_snprintf') or cc.has_header_symbol('stdio.h', '_snprintf'
glib_conf_prefix = glib_conf_prefix + '#define HAVE_SNPRINTF ' + hack_define
endif
if cc.has_function('strcasecmp')
if cc.has_function('strcasecmp', prefix: '#include <strings.h>')
glib_conf.set('HAVE_STRCASECMP', 1)
glib_conf_prefix = glib_conf_prefix + '#define HAVE_STRCASECMP 1\n'
elif cc.has_function('_stricmp')
@ -671,7 +671,7 @@ elif cc.has_function('_stricmp')
glib_conf_prefix = glib_conf_prefix + '#define HAVE_STRCASECMP ' + hack_define
endif
if cc.has_function('strncasecmp')
if cc.has_function('strncasecmp', prefix: '#include <strings.h>')
glib_conf.set('HAVE_STRNCASECMP', 1)
glib_conf_prefix = glib_conf_prefix + '#define HAVE_STRNCASECMP 1\n'
elif cc.has_function('_strnicmp')