Blame m4/locale-zh.m4

Packit aea12f
# locale-zh.m4 serial 14
Packit Service 991b93
dnl Copyright (C) 2003, 2005-2020 Free Software Foundation, Inc.
Packit aea12f
dnl This file is free software; the Free Software Foundation
Packit aea12f
dnl gives unlimited permission to copy and/or distribute it,
Packit aea12f
dnl with or without modifications, as long as this notice is preserved.
Packit aea12f
Packit aea12f
dnl From Bruno Haible.
Packit aea12f
Packit aea12f
dnl Determine the name of a chinese locale with GB18030 encoding.
Packit aea12f
AC_DEFUN([gt_LOCALE_ZH_CN],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([AC_CANONICAL_HOST])
Packit aea12f
  AC_REQUIRE([AM_LANGINFO_CODESET])
Packit aea12f
  AC_CACHE_CHECK([for a transitional chinese locale], [gt_cv_locale_zh_CN], [
Packit aea12f
    AC_LANG_CONFTEST([AC_LANG_SOURCE([
Packit aea12f
changequote(,)dnl
Packit aea12f
#include <locale.h>
Packit aea12f
#include <stdlib.h>
Packit aea12f
#include <time.h>
Packit aea12f
#if HAVE_LANGINFO_CODESET
Packit aea12f
# include <langinfo.h>
Packit aea12f
#endif
Packit aea12f
#include <stdlib.h>
Packit aea12f
#include <string.h>
Packit aea12f
struct tm t;
Packit aea12f
char buf[16];
Packit aea12f
int main ()
Packit aea12f
{
Packit aea12f
  /* On BeOS and Haiku, locales are not implemented in libc.  Rather, libintl
Packit aea12f
     imitates locale dependent behaviour by looking at the environment
Packit aea12f
     variables, and all locales use the UTF-8 encoding.  */
Packit aea12f
#if defined __BEOS__ || defined __HAIKU__
Packit aea12f
  return 1;
Packit aea12f
#else
Packit aea12f
  /* Check whether the given locale name is recognized by the system.  */
Packit aea12f
# if defined _WIN32 && !defined __CYGWIN__
Packit aea12f
  /* On native Windows, setlocale(category, "") looks at the system settings,
Packit aea12f
     not at the environment variables.  Also, when an encoding suffix such
Packit aea12f
     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
Packit aea12f
     category of the locale to "C".  */
Packit aea12f
  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
Packit aea12f
      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
Packit aea12f
    return 1;
Packit aea12f
# else
Packit aea12f
  if (setlocale (LC_ALL, "") == NULL) return 1;
Packit aea12f
# endif
Packit aea12f
  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
Packit aea12f
     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
Packit aea12f
     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
Packit aea12f
     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
Packit aea12f
     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
Packit aea12f
     some unit tests fail.
Packit aea12f
     On MirBSD 10, when an unsupported locale is specified, setlocale()
Packit aea12f
     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
Packit aea12f
# if HAVE_LANGINFO_CODESET
Packit aea12f
  {
Packit aea12f
    const char *cs = nl_langinfo (CODESET);
Packit aea12f
    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
Packit aea12f
        || strcmp (cs, "UTF-8") == 0)
Packit aea12f
      return 1;
Packit aea12f
  }
Packit aea12f
# endif
Packit aea12f
# ifdef __CYGWIN__
Packit aea12f
  /* On Cygwin, avoid locale names without encoding suffix, because the
Packit aea12f
     locale_charset() function relies on the encoding suffix.  Note that
Packit aea12f
     LC_ALL is set on the command line.  */
Packit aea12f
  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
Packit aea12f
# endif
Packit aea12f
  /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
Packit aea12f
     This excludes the UTF-8 encoding (except on MirBSD).  */
Packit aea12f
  {
Packit aea12f
    const char *p;
Packit aea12f
    t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
Packit aea12f
    if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
Packit aea12f
    for (p = buf; *p != '\0'; p++)
Packit aea12f
      if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
Packit aea12f
        return 1;
Packit aea12f
  }
Packit aea12f
  /* Check whether a typical GB18030 multibyte sequence is recognized as a
Packit aea12f
     single wide character.  This excludes the GB2312 and GBK encodings.  */
Packit aea12f
  if (mblen ("\203\062\332\066", 5) != 4)
Packit aea12f
    return 1;
Packit aea12f
  return 0;
Packit aea12f
#endif
Packit aea12f
}
Packit aea12f
changequote([,])dnl
Packit aea12f
      ])])
Packit aea12f
    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
Packit aea12f
      case "$host_os" in
Packit aea12f
        # Handle native Windows specially, because there setlocale() interprets
Packit aea12f
        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
Packit aea12f
        # "fr" or "fra" as "French" or "French_France.1252",
Packit aea12f
        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
Packit aea12f
        # "ja" as "Japanese" or "Japanese_Japan.932",
Packit aea12f
        # and similar.
Packit aea12f
        mingw*)
Packit aea12f
          # Test for the hypothetical native Windows locale name.
Packit aea12f
          if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit aea12f
            gt_cv_locale_zh_CN=Chinese_China.54936
Packit aea12f
          else
Packit aea12f
            # None found.
Packit aea12f
            gt_cv_locale_zh_CN=none
Packit aea12f
          fi
Packit aea12f
          ;;
Packit aea12f
        solaris2.8)
Packit aea12f
          # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are
Packit aea12f
          # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK.
Packit aea12f
          # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core.
Packit aea12f
          gt_cv_locale_zh_CN=none
Packit aea12f
          ;;
Packit aea12f
        *)
Packit aea12f
          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
Packit aea12f
          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
Packit aea12f
          # configure script would override the LC_ALL setting. Likewise for
Packit aea12f
          # LC_CTYPE, which is also set at the beginning of the configure script.
Packit aea12f
          # Test for the locale name without encoding suffix.
Packit aea12f
          if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit aea12f
            gt_cv_locale_zh_CN=zh_CN
Packit aea12f
          else
Packit aea12f
            # Test for the locale name with explicit encoding suffix.
Packit aea12f
            if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit aea12f
              gt_cv_locale_zh_CN=zh_CN.GB18030
Packit aea12f
            else
Packit aea12f
              # None found.
Packit aea12f
              gt_cv_locale_zh_CN=none
Packit aea12f
            fi
Packit aea12f
          fi
Packit aea12f
          ;;
Packit aea12f
      esac
Packit aea12f
    else
Packit aea12f
      # If there was a link error, due to mblen(), the system is so old that
Packit aea12f
      # it certainly doesn't have a chinese locale.
Packit aea12f
      gt_cv_locale_zh_CN=none
Packit aea12f
    fi
Packit aea12f
    rm -fr conftest*
Packit aea12f
  ])
Packit aea12f
  LOCALE_ZH_CN=$gt_cv_locale_zh_CN
Packit aea12f
  AC_SUBST([LOCALE_ZH_CN])
Packit aea12f
])