Blame m4/locale-zh.m4

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