Blame m4/locale-tr.m4

Packit 33f14e
# locale-tr.m4 serial 10
Packit 33f14e
dnl Copyright (C) 2003, 2005-2017 Free Software Foundation, Inc.
Packit 33f14e
dnl This file is free software; the Free Software Foundation
Packit 33f14e
dnl gives unlimited permission to copy and/or distribute it,
Packit 33f14e
dnl with or without modifications, as long as this notice is preserved.
Packit 33f14e
Packit 33f14e
dnl From Bruno Haible.
Packit 33f14e
Packit 33f14e
dnl Determine the name of a turkish locale with UTF-8 encoding.
Packit 33f14e
AC_DEFUN([gt_LOCALE_TR_UTF8],
Packit 33f14e
[
Packit 33f14e
  AC_REQUIRE([AC_CANONICAL_HOST])
Packit 33f14e
  AC_REQUIRE([AM_LANGINFO_CODESET])
Packit 33f14e
  AC_CACHE_CHECK([for a turkish Unicode locale], [gt_cv_locale_tr_utf8], [
Packit 33f14e
    AC_LANG_CONFTEST([AC_LANG_SOURCE([
Packit 33f14e
changequote(,)dnl
Packit 33f14e
#include <locale.h>
Packit 33f14e
#include <time.h>
Packit 33f14e
#if HAVE_LANGINFO_CODESET
Packit 33f14e
# include <langinfo.h>
Packit 33f14e
#endif
Packit 33f14e
#include <stdlib.h>
Packit 33f14e
#include <string.h>
Packit 33f14e
struct tm t;
Packit 33f14e
char buf[16];
Packit 33f14e
int main () {
Packit 33f14e
  /* On BeOS, locales are not implemented in libc.  Rather, libintl
Packit 33f14e
     imitates locale dependent behaviour by looking at the environment
Packit 33f14e
     variables, and all locales use the UTF-8 encoding.  But BeOS does not
Packit 33f14e
     implement the Turkish upper-/lowercase mappings.  Therefore, let this
Packit 33f14e
     program return 1 on BeOS.  */
Packit 33f14e
  /* Check whether the given locale name is recognized by the system.  */
Packit 33f14e
#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
Packit 33f14e
  /* On native Windows, setlocale(category, "") looks at the system settings,
Packit 33f14e
     not at the environment variables.  Also, when an encoding suffix such
Packit 33f14e
     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
Packit 33f14e
     category of the locale to "C".  */
Packit 33f14e
  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
Packit 33f14e
      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
Packit 33f14e
    return 1;
Packit 33f14e
#else
Packit 33f14e
  if (setlocale (LC_ALL, "") == NULL) return 1;
Packit 33f14e
#endif
Packit 33f14e
  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
Packit 33f14e
     On Mac OS X 10.3.5 (Darwin 7.5) in the tr_TR locale, nl_langinfo(CODESET)
Packit 33f14e
     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
Packit 33f14e
     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
Packit 33f14e
     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
Packit 33f14e
     some unit tests fail.  */
Packit 33f14e
#if HAVE_LANGINFO_CODESET
Packit 33f14e
  {
Packit 33f14e
    const char *cs = nl_langinfo (CODESET);
Packit 33f14e
    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
Packit 33f14e
      return 1;
Packit 33f14e
  }
Packit 33f14e
#endif
Packit 33f14e
#ifdef __CYGWIN__
Packit 33f14e
  /* On Cygwin, avoid locale names without encoding suffix, because the
Packit 33f14e
     locale_charset() function relies on the encoding suffix.  Note that
Packit 33f14e
     LC_ALL is set on the command line.  */
Packit 33f14e
  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
Packit 33f14e
#endif
Packit 33f14e
  /* Check whether in the abbreviation of the eighth month, the second
Packit 33f14e
     character (should be U+011F: LATIN SMALL LETTER G WITH BREVE) is
Packit 33f14e
     two bytes long, with UTF-8 encoding.  */
Packit 33f14e
  t.tm_year = 1992 - 1900; t.tm_mon = 8 - 1; t.tm_mday = 19;
Packit 33f14e
  if (strftime (buf, sizeof (buf), "%b", &t) < 4
Packit 33f14e
      || buf[1] != (char) 0xc4 || buf[2] != (char) 0x9f)
Packit 33f14e
    return 1;
Packit 33f14e
  /* Check whether the upper-/lowercase mappings are as expected for
Packit 33f14e
     Turkish.  */
Packit 33f14e
  if (towupper ('i') != 0x0130 || towlower (0x0130) != 'i'
Packit 33f14e
      || towupper(0x0131) != 'I' || towlower ('I') != 0x0131)
Packit 33f14e
    return 1;
Packit 33f14e
  return 0;
Packit 33f14e
}
Packit 33f14e
changequote([,])dnl
Packit 33f14e
      ])])
Packit 33f14e
    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
Packit 33f14e
      case "$host_os" in
Packit 33f14e
        # Handle native Windows specially, because there setlocale() interprets
Packit 33f14e
        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
Packit 33f14e
        # "fr" or "fra" as "French" or "French_France.1252",
Packit 33f14e
        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
Packit 33f14e
        # "ja" as "Japanese" or "Japanese_Japan.932",
Packit 33f14e
        # and similar.
Packit 33f14e
        mingw*)
Packit 33f14e
          # Test for the hypothetical native Windows locale name.
Packit 33f14e
          if (LC_ALL=Turkish_Turkey.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 33f14e
            gt_cv_locale_tr_utf8=Turkish_Turkey.65001
Packit 33f14e
          else
Packit 33f14e
            # None found.
Packit 33f14e
            gt_cv_locale_tr_utf8=none
Packit 33f14e
          fi
Packit 33f14e
          ;;
Packit 33f14e
        *)
Packit 33f14e
          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
Packit 33f14e
          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
Packit 33f14e
          # configure script would override the LC_ALL setting. Likewise for
Packit 33f14e
          # LC_CTYPE, which is also set at the beginning of the configure script.
Packit 33f14e
          # Test for the usual locale name.
Packit 33f14e
          if (LC_ALL=tr_TR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 33f14e
            gt_cv_locale_tr_utf8=tr_TR
Packit 33f14e
          else
Packit 33f14e
            # Test for the locale name with explicit encoding suffix.
Packit 33f14e
            if (LC_ALL=tr_TR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 33f14e
              gt_cv_locale_tr_utf8=tr_TR.UTF-8
Packit 33f14e
            else
Packit 33f14e
              # Test for the Solaris 7 locale name.
Packit 33f14e
              if (LC_ALL=tr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 33f14e
                gt_cv_locale_tr_utf8=tr.UTF-8
Packit 33f14e
              else
Packit 33f14e
                # None found.
Packit 33f14e
                gt_cv_locale_tr_utf8=none
Packit 33f14e
              fi
Packit 33f14e
            fi
Packit 33f14e
          fi
Packit 33f14e
          ;;
Packit 33f14e
      esac
Packit 33f14e
    else
Packit 33f14e
      gt_cv_locale_tr_utf8=none
Packit 33f14e
    fi
Packit 33f14e
    rm -fr conftest*
Packit 33f14e
  ])
Packit 33f14e
  LOCALE_TR_UTF8=$gt_cv_locale_tr_utf8
Packit 33f14e
  AC_SUBST([LOCALE_TR_UTF8])
Packit 33f14e
])