Blame m4/locale-fr.m4

Packit 33f14e
# locale-fr.m4 serial 17
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 french locale with traditional encoding.
Packit 33f14e
AC_DEFUN([gt_LOCALE_FR],
Packit 33f14e
[
Packit 33f14e
  AC_REQUIRE([AC_CANONICAL_HOST])
Packit 33f14e
  AC_REQUIRE([AM_LANGINFO_CODESET])
Packit 33f14e
  AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [
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
  /* 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 fr_FR 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
     On MirBSD 10, when an unsupported locale is specified, setlocale()
Packit 33f14e
     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
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
        || strcmp (cs, "UTF-8") == 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 second month, the second
Packit 33f14e
     character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
Packit 33f14e
     one byte long. This excludes the UTF-8 encoding.  */
Packit 33f14e
  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
Packit 33f14e
  if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
Packit 33f14e
#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy.  */
Packit 33f14e
  /* Check whether the decimal separator is a comma.
Packit 33f14e
     On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
Packit 33f14e
     are nl_langinfo(RADIXCHAR) are both ".".  */
Packit 33f14e
  if (localeconv () ->decimal_point[0] != ',') return 1;
Packit 33f14e
#endif
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 native Windows locale name.
Packit 33f14e
          if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 33f14e
            gt_cv_locale_fr=French_France.1252
Packit 33f14e
          else
Packit 33f14e
            # None found.
Packit 33f14e
            gt_cv_locale_fr=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=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 33f14e
            gt_cv_locale_fr=fr_FR
Packit 33f14e
          else
Packit 33f14e
            # Test for the locale name with explicit encoding suffix.
Packit 33f14e
            if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 33f14e
              gt_cv_locale_fr=fr_FR.ISO-8859-1
Packit 33f14e
            else
Packit 33f14e
              # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
Packit 33f14e
              if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 33f14e
                gt_cv_locale_fr=fr_FR.ISO8859-1
Packit 33f14e
              else
Packit 33f14e
                # Test for the HP-UX locale name.
Packit 33f14e
                if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 33f14e
                  gt_cv_locale_fr=fr_FR.iso88591
Packit 33f14e
                else
Packit 33f14e
                  # Test for the Solaris 7 locale name.
Packit 33f14e
                  if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 33f14e
                    gt_cv_locale_fr=fr
Packit 33f14e
                  else
Packit 33f14e
                    # None found.
Packit 33f14e
                    gt_cv_locale_fr=none
Packit 33f14e
                  fi
Packit 33f14e
                fi
Packit 33f14e
              fi
Packit 33f14e
            fi
Packit 33f14e
          fi
Packit 33f14e
          ;;
Packit 33f14e
      esac
Packit 33f14e
    fi
Packit 33f14e
    rm -fr conftest*
Packit 33f14e
  ])
Packit 33f14e
  LOCALE_FR=$gt_cv_locale_fr
Packit 33f14e
  AC_SUBST([LOCALE_FR])
Packit 33f14e
])
Packit 33f14e
Packit 33f14e
dnl Determine the name of a french locale with UTF-8 encoding.
Packit 33f14e
AC_DEFUN([gt_LOCALE_FR_UTF8],
Packit 33f14e
[
Packit 33f14e
  AC_REQUIRE([AM_LANGINFO_CODESET])
Packit 33f14e
  AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_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 and Haiku, 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.  */
Packit 33f14e
#if !(defined __BEOS__ || defined __HAIKU__)
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 fr_FR 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 second month, the second
Packit 33f14e
     character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
Packit 33f14e
     two bytes long, with UTF-8 encoding.  */
Packit 33f14e
  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
Packit 33f14e
  if (strftime (buf, sizeof (buf), "%b", &t) < 4
Packit 33f14e
      || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
Packit 33f14e
    return 1;
Packit 33f14e
#endif
Packit 33f14e
#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy.  */
Packit 33f14e
  /* Check whether the decimal separator is a comma.
Packit 33f14e
     On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
Packit 33f14e
     are nl_langinfo(RADIXCHAR) are both ".".  */
Packit 33f14e
  if (localeconv () ->decimal_point[0] != ',') return 1;
Packit 33f14e
#endif
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=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 33f14e
            gt_cv_locale_fr_utf8=French_France.65001
Packit 33f14e
          else
Packit 33f14e
            # None found.
Packit 33f14e
            gt_cv_locale_fr_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=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 33f14e
            gt_cv_locale_fr_utf8=fr_FR
Packit 33f14e
          else
Packit 33f14e
            # Test for the locale name with explicit encoding suffix.
Packit 33f14e
            if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 33f14e
              gt_cv_locale_fr_utf8=fr_FR.UTF-8
Packit 33f14e
            else
Packit 33f14e
              # Test for the Solaris 7 locale name.
Packit 33f14e
              if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 33f14e
                gt_cv_locale_fr_utf8=fr.UTF-8
Packit 33f14e
              else
Packit 33f14e
                # None found.
Packit 33f14e
                gt_cv_locale_fr_utf8=none
Packit 33f14e
              fi
Packit 33f14e
            fi
Packit 33f14e
          fi
Packit 33f14e
          ;;
Packit 33f14e
      esac
Packit 33f14e
    fi
Packit 33f14e
    rm -fr conftest*
Packit 33f14e
  ])
Packit 33f14e
  LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
Packit 33f14e
  AC_SUBST([LOCALE_FR_UTF8])
Packit 33f14e
])