aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Hinz <mh.codebro+github@gmail.com>2019-03-26 11:42:25 +0100
committerGitHub <noreply@github.com>2019-03-26 11:42:25 +0100
commit2d50bf349883958bff1bb584fb3ad5cb97990993 (patch)
tree1e087562124fbfcecc7d760575e0deb3b4662c6f
parent3441423481b7b2e7f127555633b62220aeca500b (diff)
downloadrneovim-2d50bf349883958bff1bb584fb3ad5cb97990993.tar.gz
rneovim-2d50bf349883958bff1bb584fb3ad5cb97990993.tar.bz2
rneovim-2d50bf349883958bff1bb584fb3ad5cb97990993.zip
mac: do not use libintl_setlocale() (#9789)
gettext contains libintl.h. That header file defines a macro that replaces `setlocale` by `libintl_setlocale`. That function eventually calls the original `setlocale()` from Apple's libc, but is known to make it fail. Mac users with gettext from Homebrew can easily reproduce this: #include <stdio.h> #include <locale.h> #include <libintl.h> int main(void) { setlocale(LC_ALL, ""); printf("locale: %s\n", setlocale(LC_CTYPE, NULL)); } Compile and run it: cc -I/usr/local/opt/gettext/include -L/usr/local/opt/gettext/lib -lintl -o test test.c && ./test When $LC_CTYPE is set to a valid value like UTF-8, it should output: locale: UTF-8 But it does not. It returns C anyway. Remove libintl.h and recompile and you get the expected UTF-8. Fixes https://github.com/neovim/neovim/issues/9787
-rw-r--r--src/nvim/gettext.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/nvim/gettext.h b/src/nvim/gettext.h
index acc7e3a92c..629301e8fe 100644
--- a/src/nvim/gettext.h
+++ b/src/nvim/gettext.h
@@ -11,6 +11,11 @@
# define N_(x) x
# endif
# define NGETTEXT(x, xs, n) ngettext(x, xs, n)
+// On a Mac, gettext's libintl.h defines "setlocale" to be replaced by
+// "libintl_setlocal" which leads to wrong return values. #9789
+# if defined(__APPLE__) && defined(setlocale)
+# undef setlocale
+# endif
#else
# define _(x) ((char *)(x))
# define N_(x) x