mirror of https://git.tukaani.org/xz.git
Windows: Make NLS require UCRT and gettext-runtime >= 0.23.1
Also remove the recently-added workaround from tuklib_gettext.h. Requiring a new enough gettext-runtime is cleaner. I guess it's mostly MSYS2 where xz is built with translation support, so once MSYS2 has Gettext >= 0.23.1, this requirement shouldn't be a problem in practice.
This commit is contained in:
parent
aa1807ed94
commit
16821252c5
|
@ -360,6 +360,35 @@ if(XZ_NLS)
|
||||||
"Install gettext tools or set XZ_NLS=OFF.")
|
"Install gettext tools or set XZ_NLS=OFF.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
# The command line tools use UTF-8 on native Windows.
|
||||||
|
# Non-ASCII characters display correctly only when
|
||||||
|
# using UCRT and gettext-runtime >= 0.23.1.
|
||||||
|
check_c_source_compiles(
|
||||||
|
"#define WIN32_LEAN_AND_MEAN
|
||||||
|
#include <windows.h>
|
||||||
|
#include <libintl.h>
|
||||||
|
|
||||||
|
#ifndef _UCRT
|
||||||
|
#error \"Not UCRT\"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if LIBINTL_VERSION < 0x001701
|
||||||
|
#error \"gettext-runtime < 0.23.1\"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int main(void) { return 0; }
|
||||||
|
"
|
||||||
|
USING_UCRT_AND_RECENT_GETTEXT)
|
||||||
|
if(NOT USING_UCRT_AND_RECENT_GETTEXT)
|
||||||
|
message(FATAL_ERROR "Native language support (NLS) was enabled "
|
||||||
|
"but it requires UCRT and "
|
||||||
|
"gettext-runtime >= 0.23.1. To build with "
|
||||||
|
"MSVCRT or old gettext-runtime, "
|
||||||
|
"set XZ_NLS=OFF.")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# Warn if translated man pages are missing.
|
# Warn if translated man pages are missing.
|
||||||
if(UNIX AND NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/po4a/man")
|
if(UNIX AND NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/po4a/man")
|
||||||
message(WARNING "Native language support (NLS) was enabled "
|
message(WARNING "Native language support (NLS) was enabled "
|
||||||
|
|
29
configure.ac
29
configure.ac
|
@ -826,6 +826,35 @@ AM_GNU_GETTEXT_REQUIRE_VERSION([0.19.6])
|
||||||
AM_GNU_GETTEXT_VERSION([0.19.6])
|
AM_GNU_GETTEXT_VERSION([0.19.6])
|
||||||
AM_GNU_GETTEXT([external])
|
AM_GNU_GETTEXT([external])
|
||||||
|
|
||||||
|
# The command line tools use UTF-8 on native Windows. Non-ASCII characters
|
||||||
|
# display correctly only when using UCRT and gettext-runtime >= 0.23.1.
|
||||||
|
AS_CASE([$USE_NLS-$host_os],
|
||||||
|
[yes-mingw*], [
|
||||||
|
AC_MSG_CHECKING([for UCRT and gettext-runtime >= 0.23.1])
|
||||||
|
AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#include <windows.h>
|
||||||
|
#include <libintl.h>
|
||||||
|
|
||||||
|
#ifndef _UCRT
|
||||||
|
#error "Not UCRT"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if LIBINTL_VERSION < 0x001701
|
||||||
|
#error "gettext-runtime < 0.23.1"
|
||||||
|
#endif
|
||||||
|
]])], [
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
], [
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
AC_MSG_ERROR([
|
||||||
|
Translation support (--enable-nls) on native Windows requires
|
||||||
|
UCRT and gettext-runtime >= 0.23.1. Use --disable-nls to build
|
||||||
|
with MSVCRT or old gettext-runtime.])
|
||||||
|
])
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Checks for header files.
|
# Checks for header files.
|
||||||
|
|
|
@ -24,57 +24,6 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if TUKLIB_GETTEXT
|
#if TUKLIB_GETTEXT
|
||||||
# if defined(_WIN32) && !defined(__CYGWIN__)
|
|
||||||
// <libintl.h> from gettext-runtime redirects setlocale()
|
|
||||||
// to libintl_setlocale(). As of gettext 0.22.5 (and probably
|
|
||||||
// 0.23), libintl_setlocale(LC_ALL, "") doesn't set the locale
|
|
||||||
// to UTF-8 if UTF-8 code page has been set in the application
|
|
||||||
// manifest. For example, one may get "fi_FI" when native
|
|
||||||
// setlocale() would result in "Finnish_Finland.utf8". The
|
|
||||||
// lack of ".utf8" (or equivalent) suffix results in garbled
|
|
||||||
// non-ASCII chars in translatated messages and also affects
|
|
||||||
// functions like mbrtowc() which depend on LC_CTYPE.
|
|
||||||
//
|
|
||||||
// Workaround the problem by not using libintl_setlocale()
|
|
||||||
// for now. Notes:
|
|
||||||
//
|
|
||||||
// (1) libintl_setlocale() reads LC_* environment variables
|
|
||||||
// but native setlocale() doesn't. The loss of this
|
|
||||||
// feature doesn't matter too much because, on Windows,
|
|
||||||
// libintl still reads the env vars LANGUAGE, LC_ALL,
|
|
||||||
// LC_MESSAGES, and LANG when translating messages in
|
|
||||||
// the LC_MESSAGES category (other categories are very
|
|
||||||
// rarely used for translations). As of Gettext commit
|
|
||||||
// e18edc579 and Gnulib commit 9e301775ff:
|
|
||||||
//
|
|
||||||
// libintl_gettext()
|
|
||||||
// `-- libintl_dcgettext()
|
|
||||||
// `-- libintl_dcigettext()
|
|
||||||
// `-- guess_category_value()
|
|
||||||
// |-- gl_locale_name_posix()
|
|
||||||
// | `-- gl_locale_name_posix_unsafe()
|
|
||||||
// | `-- gl_locale_name_environ()
|
|
||||||
// | |-- getenv("LC_ALL")
|
|
||||||
// | |-- getenv("LC_MESSAGES")
|
|
||||||
// | `-- getenv("LANG")
|
|
||||||
// `-- getenv("LANGUAGE")
|
|
||||||
//
|
|
||||||
// (2) If locale is changed, libintl_setlocale() marks cached
|
|
||||||
// translations as invalid. bindtextdomain(), which we
|
|
||||||
// call immediately after setlocale(), does the same
|
|
||||||
// invalidation too. Thus it doesn't matter in the
|
|
||||||
// tuklib_gettext_init() macro. It could matter if the
|
|
||||||
// application calls setlocale() elsewhere though (but
|
|
||||||
// then it's not guaranteed that such code even includes
|
|
||||||
// <libint.h> in addition to <locale.h>).
|
|
||||||
//
|
|
||||||
// This macro is checked by <libintl.h> since Gettext 0.18.2
|
|
||||||
// (2012-12-08). When this is defined, setlocale() isn't
|
|
||||||
// overridden.
|
|
||||||
//
|
|
||||||
// FIXME: Remove this hack when it's no longer needed.
|
|
||||||
# define GNULIB_defined_setlocale 1
|
|
||||||
# endif
|
|
||||||
# include <libintl.h>
|
# include <libintl.h>
|
||||||
# define tuklib_gettext_init(package, localedir) \
|
# define tuklib_gettext_init(package, localedir) \
|
||||||
do { \
|
do { \
|
||||||
|
|
Loading…
Reference in New Issue