Blame m4/locale-fr.m4

Packit 8f70b4
# locale-fr.m4 serial 19
Packit 8f70b4
dnl Copyright (C) 2003, 2005-2018 Free Software Foundation, Inc.
Packit 8f70b4
dnl This file is free software; the Free Software Foundation
Packit 8f70b4
dnl gives unlimited permission to copy and/or distribute it,
Packit 8f70b4
dnl with or without modifications, as long as this notice is preserved.
Packit 8f70b4
Packit 8f70b4
dnl From Bruno Haible.
Packit 8f70b4
Packit 8f70b4
dnl Determine the name of a french locale with traditional encoding.
Packit 8f70b4
AC_DEFUN([gt_LOCALE_FR],
Packit 8f70b4
[
Packit 8f70b4
  AC_REQUIRE([AC_CANONICAL_HOST])
Packit 8f70b4
  AC_REQUIRE([AM_LANGINFO_CODESET])
Packit 8f70b4
  AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [
Packit 8f70b4
    AC_LANG_CONFTEST([AC_LANG_SOURCE([
Packit 8f70b4
changequote(,)dnl
Packit 8f70b4
#include <locale.h>
Packit 8f70b4
#include <time.h>
Packit 8f70b4
#if HAVE_LANGINFO_CODESET
Packit 8f70b4
# include <langinfo.h>
Packit 8f70b4
#endif
Packit 8f70b4
#include <stdlib.h>
Packit 8f70b4
#include <string.h>
Packit 8f70b4
struct tm t;
Packit 8f70b4
char buf[16];
Packit 8f70b4
int main () {
Packit 8f70b4
  /* On BeOS and Haiku, locales are not implemented in libc.  Rather, libintl
Packit 8f70b4
     imitates locale dependent behaviour by looking at the environment
Packit 8f70b4
     variables, and all locales use the UTF-8 encoding.  */
Packit 8f70b4
#if defined __BEOS__ || defined __HAIKU__
Packit 8f70b4
  return 1;
Packit 8f70b4
#else
Packit 8f70b4
  /* Check whether the given locale name is recognized by the system.  */
Packit 8f70b4
# if defined _WIN32 && !defined __CYGWIN__
Packit 8f70b4
  /* On native Windows, setlocale(category, "") looks at the system settings,
Packit 8f70b4
     not at the environment variables.  Also, when an encoding suffix such
Packit 8f70b4
     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
Packit 8f70b4
     category of the locale to "C".  */
Packit 8f70b4
  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
Packit 8f70b4
      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
Packit 8f70b4
    return 1;
Packit 8f70b4
# else
Packit 8f70b4
  if (setlocale (LC_ALL, "") == NULL) return 1;
Packit 8f70b4
# endif
Packit 8f70b4
  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
Packit 8f70b4
     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
Packit 8f70b4
     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
Packit 8f70b4
     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
Packit 8f70b4
     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
Packit 8f70b4
     some unit tests fail.
Packit 8f70b4
     On MirBSD 10, when an unsupported locale is specified, setlocale()
Packit 8f70b4
     succeeds but then nl_langinfo(CODESET) is "UTF-8".  */
Packit 8f70b4
# if HAVE_LANGINFO_CODESET
Packit 8f70b4
  {
Packit 8f70b4
    const char *cs = nl_langinfo (CODESET);
Packit 8f70b4
    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
Packit 8f70b4
        || strcmp (cs, "UTF-8") == 0)
Packit 8f70b4
      return 1;
Packit 8f70b4
  }
Packit 8f70b4
# endif
Packit 8f70b4
# ifdef __CYGWIN__
Packit 8f70b4
  /* On Cygwin, avoid locale names without encoding suffix, because the
Packit 8f70b4
     locale_charset() function relies on the encoding suffix.  Note that
Packit 8f70b4
     LC_ALL is set on the command line.  */
Packit 8f70b4
  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
Packit 8f70b4
# endif
Packit 8f70b4
  /* Check whether in the abbreviation of the second month, the second
Packit 8f70b4
     character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
Packit 8f70b4
     one byte long. This excludes the UTF-8 encoding.  */
Packit 8f70b4
  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
Packit 8f70b4
  if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
Packit 8f70b4
# if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy.  */
Packit 8f70b4
  /* Check whether the decimal separator is a comma.
Packit 8f70b4
     On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
Packit 8f70b4
     are nl_langinfo(RADIXCHAR) are both ".".  */
Packit 8f70b4
  if (localeconv () ->decimal_point[0] != ',') return 1;
Packit 8f70b4
# endif
Packit 8f70b4
  return 0;
Packit 8f70b4
#endif
Packit 8f70b4
}
Packit 8f70b4
changequote([,])dnl
Packit 8f70b4
      ])])
Packit 8f70b4
    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
Packit 8f70b4
      case "$host_os" in
Packit 8f70b4
        # Handle native Windows specially, because there setlocale() interprets
Packit 8f70b4
        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
Packit 8f70b4
        # "fr" or "fra" as "French" or "French_France.1252",
Packit 8f70b4
        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
Packit 8f70b4
        # "ja" as "Japanese" or "Japanese_Japan.932",
Packit 8f70b4
        # and similar.
Packit 8f70b4
        mingw*)
Packit 8f70b4
          # Test for the native Windows locale name.
Packit 8f70b4
          if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 8f70b4
            gt_cv_locale_fr=French_France.1252
Packit 8f70b4
          else
Packit 8f70b4
            # None found.
Packit 8f70b4
            gt_cv_locale_fr=none
Packit 8f70b4
          fi
Packit 8f70b4
          ;;
Packit 8f70b4
        *)
Packit 8f70b4
          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
Packit 8f70b4
          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
Packit 8f70b4
          # configure script would override the LC_ALL setting. Likewise for
Packit 8f70b4
          # LC_CTYPE, which is also set at the beginning of the configure script.
Packit 8f70b4
          # Test for the usual locale name.
Packit 8f70b4
          if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 8f70b4
            gt_cv_locale_fr=fr_FR
Packit 8f70b4
          else
Packit 8f70b4
            # Test for the locale name with explicit encoding suffix.
Packit 8f70b4
            if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 8f70b4
              gt_cv_locale_fr=fr_FR.ISO-8859-1
Packit 8f70b4
            else
Packit 8f70b4
              # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
Packit 8f70b4
              if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 8f70b4
                gt_cv_locale_fr=fr_FR.ISO8859-1
Packit 8f70b4
              else
Packit 8f70b4
                # Test for the HP-UX locale name.
Packit 8f70b4
                if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 8f70b4
                  gt_cv_locale_fr=fr_FR.iso88591
Packit 8f70b4
                else
Packit 8f70b4
                  # Test for the Solaris 7 locale name.
Packit 8f70b4
                  if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 8f70b4
                    gt_cv_locale_fr=fr
Packit 8f70b4
                  else
Packit 8f70b4
                    # None found.
Packit 8f70b4
                    gt_cv_locale_fr=none
Packit 8f70b4
                  fi
Packit 8f70b4
                fi
Packit 8f70b4
              fi
Packit 8f70b4
            fi
Packit 8f70b4
          fi
Packit 8f70b4
          ;;
Packit 8f70b4
      esac
Packit 8f70b4
    fi
Packit 8f70b4
    rm -fr conftest*
Packit 8f70b4
  ])
Packit 8f70b4
  LOCALE_FR=$gt_cv_locale_fr
Packit 8f70b4
  AC_SUBST([LOCALE_FR])
Packit 8f70b4
])
Packit 8f70b4
Packit 8f70b4
dnl Determine the name of a french locale with UTF-8 encoding.
Packit 8f70b4
AC_DEFUN([gt_LOCALE_FR_UTF8],
Packit 8f70b4
[
Packit 8f70b4
  AC_REQUIRE([AM_LANGINFO_CODESET])
Packit 8f70b4
  AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [
Packit 8f70b4
    AC_LANG_CONFTEST([AC_LANG_SOURCE([
Packit 8f70b4
changequote(,)dnl
Packit 8f70b4
#include <locale.h>
Packit 8f70b4
#include <time.h>
Packit 8f70b4
#if HAVE_LANGINFO_CODESET
Packit 8f70b4
# include <langinfo.h>
Packit 8f70b4
#endif
Packit 8f70b4
#include <stdlib.h>
Packit 8f70b4
#include <string.h>
Packit 8f70b4
struct tm t;
Packit 8f70b4
char buf[16];
Packit 8f70b4
int main () {
Packit 8f70b4
  /* On BeOS and Haiku, locales are not implemented in libc.  Rather, libintl
Packit 8f70b4
     imitates locale dependent behaviour by looking at the environment
Packit 8f70b4
     variables, and all locales use the UTF-8 encoding.  */
Packit 8f70b4
#if !(defined __BEOS__ || defined __HAIKU__)
Packit 8f70b4
  /* Check whether the given locale name is recognized by the system.  */
Packit 8f70b4
# if defined _WIN32 && !defined __CYGWIN__
Packit 8f70b4
  /* On native Windows, setlocale(category, "") looks at the system settings,
Packit 8f70b4
     not at the environment variables.  Also, when an encoding suffix such
Packit 8f70b4
     as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
Packit 8f70b4
     category of the locale to "C".  */
Packit 8f70b4
  if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
Packit 8f70b4
      || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
Packit 8f70b4
    return 1;
Packit 8f70b4
# else
Packit 8f70b4
  if (setlocale (LC_ALL, "") == NULL) return 1;
Packit 8f70b4
# endif
Packit 8f70b4
  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
Packit 8f70b4
     On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
Packit 8f70b4
     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
Packit 8f70b4
     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
Packit 8f70b4
     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
Packit 8f70b4
     some unit tests fail.  */
Packit 8f70b4
# if HAVE_LANGINFO_CODESET
Packit 8f70b4
  {
Packit 8f70b4
    const char *cs = nl_langinfo (CODESET);
Packit 8f70b4
    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
Packit 8f70b4
      return 1;
Packit 8f70b4
  }
Packit 8f70b4
# endif
Packit 8f70b4
# ifdef __CYGWIN__
Packit 8f70b4
  /* On Cygwin, avoid locale names without encoding suffix, because the
Packit 8f70b4
     locale_charset() function relies on the encoding suffix.  Note that
Packit 8f70b4
     LC_ALL is set on the command line.  */
Packit 8f70b4
  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
Packit 8f70b4
# endif
Packit 8f70b4
  /* Check whether in the abbreviation of the second month, the second
Packit 8f70b4
     character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
Packit 8f70b4
     two bytes long, with UTF-8 encoding.  */
Packit 8f70b4
  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
Packit 8f70b4
  if (strftime (buf, sizeof (buf), "%b", &t) < 4
Packit 8f70b4
      || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
Packit 8f70b4
    return 1;
Packit 8f70b4
#endif
Packit 8f70b4
#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy.  */
Packit 8f70b4
  /* Check whether the decimal separator is a comma.
Packit 8f70b4
     On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
Packit 8f70b4
     are nl_langinfo(RADIXCHAR) are both ".".  */
Packit 8f70b4
  if (localeconv () ->decimal_point[0] != ',') return 1;
Packit 8f70b4
#endif
Packit 8f70b4
  return 0;
Packit 8f70b4
}
Packit 8f70b4
changequote([,])dnl
Packit 8f70b4
      ])])
Packit 8f70b4
    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
Packit 8f70b4
      case "$host_os" in
Packit 8f70b4
        # Handle native Windows specially, because there setlocale() interprets
Packit 8f70b4
        # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
Packit 8f70b4
        # "fr" or "fra" as "French" or "French_France.1252",
Packit 8f70b4
        # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
Packit 8f70b4
        # "ja" as "Japanese" or "Japanese_Japan.932",
Packit 8f70b4
        # and similar.
Packit 8f70b4
        mingw*)
Packit 8f70b4
          # Test for the hypothetical native Windows locale name.
Packit 8f70b4
          if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 8f70b4
            gt_cv_locale_fr_utf8=French_France.65001
Packit 8f70b4
          else
Packit 8f70b4
            # None found.
Packit 8f70b4
            gt_cv_locale_fr_utf8=none
Packit 8f70b4
          fi
Packit 8f70b4
          ;;
Packit 8f70b4
        *)
Packit 8f70b4
          # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
Packit 8f70b4
          # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
Packit 8f70b4
          # configure script would override the LC_ALL setting. Likewise for
Packit 8f70b4
          # LC_CTYPE, which is also set at the beginning of the configure script.
Packit 8f70b4
          # Test for the usual locale name.
Packit 8f70b4
          if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 8f70b4
            gt_cv_locale_fr_utf8=fr_FR
Packit 8f70b4
          else
Packit 8f70b4
            # Test for the locale name with explicit encoding suffix.
Packit 8f70b4
            if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 8f70b4
              gt_cv_locale_fr_utf8=fr_FR.UTF-8
Packit 8f70b4
            else
Packit 8f70b4
              # Test for the Solaris 7 locale name.
Packit 8f70b4
              if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
Packit 8f70b4
                gt_cv_locale_fr_utf8=fr.UTF-8
Packit 8f70b4
              else
Packit 8f70b4
                # None found.
Packit 8f70b4
                gt_cv_locale_fr_utf8=none
Packit 8f70b4
              fi
Packit 8f70b4
            fi
Packit 8f70b4
          fi
Packit 8f70b4
          ;;
Packit 8f70b4
      esac
Packit 8f70b4
    fi
Packit 8f70b4
    rm -fr conftest*
Packit 8f70b4
  ])
Packit 8f70b4
  LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
Packit 8f70b4
  AC_SUBST([LOCALE_FR_UTF8])
Packit 8f70b4
])