Blame gnulib/m4/locale-ja.m4

Packit 06dd63
# locale-ja.m4 serial 14
Packit 06dd63
dnl Copyright (C) 2003, 2005-2019 Free Software Foundation, Inc.
Packit 06dd63
dnl This file is free software; the Free Software Foundation
Packit 06dd63
dnl gives unlimited permission to copy and/or distribute it,
Packit 06dd63
dnl with or without modifications, as long as this notice is preserved.
Packit 06dd63
Packit 06dd63
dnl From Bruno Haible.
Packit 06dd63
Packit 06dd63
dnl Determine the name of a japanese locale with EUC-JP encoding.
Packit 06dd63
AC_DEFUN([gt_LOCALE_JA],
Packit 06dd63
[
Packit 06dd63
  AC_REQUIRE([AC_CANONICAL_HOST])
Packit 06dd63
  AC_REQUIRE([AM_LANGINFO_CODESET])
Packit 06dd63
  AC_CACHE_CHECK([for a traditional japanese locale], [gt_cv_locale_ja], [
Packit 06dd63
    AC_LANG_CONFTEST([AC_LANG_SOURCE([
Packit 06dd63
changequote(,)dnl
Packit 06dd63
#include <locale.h>
Packit 06dd63
#include <time.h>
Packit 06dd63
#if HAVE_LANGINFO_CODESET
Packit 06dd63
# include <langinfo.h>
Packit 06dd63
#endif
Packit 06dd63
#include <stdlib.h>
Packit 06dd63
#include <string.h>
Packit 06dd63
struct tm t;
Packit 06dd63
char buf[16];
Packit 06dd63
int main ()
Packit 06dd63
{
Packit 06dd63
  /* On BeOS and Haiku, locales are not implemented in libc.  Rather, libintl
Packit 06dd63
     imitates locale dependent behaviour by looking at the environment
Packit 06dd63
     variables, and all locales use the UTF-8 encoding.  */
Packit 06dd63
#if defined __BEOS__ || defined __HAIKU__
Packit 06dd63
  return 1;
Packit 06dd63
#else
Packit 06dd63
  /* Check whether the given locale name is recognized by the system.  */
Packit 06dd63
# if defined _WIN32 && !defined __CYGWIN__
Packit 06dd63
  /* On native Windows, setlocale(category, "") looks at the system settings,
Packit 06dd63
     not at the environment variables.  Also, when an encoding suffix such
Packit 06dd63
     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
Packit 06dd63
     category of the locale to "C".  */
Packit 06dd63
  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
Packit 06dd63
      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
Packit 06dd63
    return 1;
Packit 06dd63
# else
Packit 06dd63
  if (setlocale (LC_ALL, "") == NULL) return 1;
Packit 06dd63
# endif
Packit 06dd63
  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
Packit 06dd63
     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
Packit 06dd63
     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
Packit 06dd63
     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
Packit 06dd63
     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
Packit 06dd63
     some unit tests fail.
Packit 06dd63
     On MirBSD 10, when an unsupported locale is specified, setlocale()
Packit 06dd63
     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
Packit 06dd63
# if HAVE_LANGINFO_CODESET
Packit 06dd63
  {
Packit 06dd63
    const char *cs = nl_langinfo (CODESET);
Packit 06dd63
    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
Packit 06dd63
        || strcmp (cs, "UTF-8") == 0)
Packit 06dd63
      return 1;
Packit 06dd63
  }
Packit 06dd63
# endif
Packit 06dd63
# ifdef __CYGWIN__
Packit 06dd63
  /* On Cygwin, avoid locale names without encoding suffix, because the
Packit 06dd63
     locale_charset() function relies on the encoding suffix.  Note that
Packit 06dd63
     LC_ALL is set on the command line.  */
Packit 06dd63
  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
Packit 06dd63
# endif
Packit 06dd63
  /* Check whether MB_CUR_MAX is > 1.  This excludes the dysfunctional locales
Packit 06dd63
     on Cygwin 1.5.x.  */
Packit 06dd63
  if (MB_CUR_MAX == 1)
Packit 06dd63
    return 1;
Packit 06dd63
  /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
Packit 06dd63
     This excludes the UTF-8 encoding (except on MirBSD).  */
Packit 06dd63
  {
Packit 06dd63
    const char *p;
Packit 06dd63
    t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
Packit 06dd63
    if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
Packit 06dd63
    for (p = buf; *p != '\0'; p++)
Packit 06dd63
      if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
Packit 06dd63
        return 1;
Packit 06dd63
  }
Packit 06dd63
  return 0;
Packit 06dd63
#endif
Packit 06dd63
}
Packit 06dd63
changequote([,])dnl
Packit 06dd63
      ])])
Packit 06dd63
    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
Packit 06dd63
      case "$host_os" in
Packit 06dd63
        # Handle native Windows specially, because there setlocale() interprets
Packit 06dd63
        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
Packit 06dd63
        # "fr" or "fra" as "French" or "French_France.1252",
Packit 06dd63
        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
Packit 06dd63
        # "ja" as "Japanese" or "Japanese_Japan.932",
Packit 06dd63
        # and similar.
Packit 06dd63
        mingw*)
Packit 06dd63
          # Note that on native Windows, the Japanese locale is
Packit 06dd63
          # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we
Packit 06dd63
          # cannot use it here.
Packit 06dd63
          gt_cv_locale_ja=none
Packit 06dd63
          ;;
Packit 06dd63
        *)
Packit 06dd63
          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
Packit 06dd63
          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
Packit 06dd63
          # configure script would override the LC_ALL setting. Likewise for
Packit 06dd63
          # LC_CTYPE, which is also set at the beginning of the configure script.
Packit 06dd63
          # Test for the AIX locale name.
Packit 06dd63
          if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 06dd63
            gt_cv_locale_ja=ja_JP
Packit 06dd63
          else
Packit 06dd63
            # Test for the locale name with explicit encoding suffix.
Packit 06dd63
            if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 06dd63
              gt_cv_locale_ja=ja_JP.EUC-JP
Packit 06dd63
            else
Packit 06dd63
              # Test for the HP-UX, OSF/1, NetBSD locale name.
Packit 06dd63
              if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 06dd63
                gt_cv_locale_ja=ja_JP.eucJP
Packit 06dd63
              else
Packit 06dd63
                # Test for the IRIX, FreeBSD locale name.
Packit 06dd63
                if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 06dd63
                  gt_cv_locale_ja=ja_JP.EUC
Packit 06dd63
                else
Packit 06dd63
                  # Test for the Solaris 7 locale name.
Packit 06dd63
                  if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 06dd63
                    gt_cv_locale_ja=ja
Packit 06dd63
                  else
Packit 06dd63
                    # Special test for NetBSD 1.6.
Packit 06dd63
                    if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then
Packit 06dd63
                      gt_cv_locale_ja=ja_JP.eucJP
Packit 06dd63
                    else
Packit 06dd63
                      # None found.
Packit 06dd63
                      gt_cv_locale_ja=none
Packit 06dd63
                    fi
Packit 06dd63
                  fi
Packit 06dd63
                fi
Packit 06dd63
              fi
Packit 06dd63
            fi
Packit 06dd63
          fi
Packit 06dd63
          ;;
Packit 06dd63
      esac
Packit 06dd63
    fi
Packit 06dd63
    rm -fr conftest*
Packit 06dd63
  ])
Packit 06dd63
  LOCALE_JA=$gt_cv_locale_ja
Packit 06dd63
  AC_SUBST([LOCALE_JA])
Packit 06dd63
])