1# locale-fr.m4 serial 11
2dnl Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved.
6
7dnl From Bruno Haible.
8
9dnl Determine the name of a french locale with traditional encoding.
10AC_DEFUN([gt_LOCALE_FR],
11[
12  AC_REQUIRE([AC_CANONICAL_HOST])
13  AC_REQUIRE([AM_LANGINFO_CODESET])
14  AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [
15    AC_LANG_CONFTEST([AC_LANG_SOURCE([
16changequote(,)dnl
17#include <locale.h>
18#include <time.h>
19#if HAVE_LANGINFO_CODESET
20# include <langinfo.h>
21#endif
22#include <stdlib.h>
23#include <string.h>
24struct tm t;
25char buf[16];
26int main () {
27  /* Check whether the given locale name is recognized by the system.  */
28  if (setlocale (LC_ALL, "") == NULL) return 1;
29  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
30     On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
31     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
32     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
33     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
34     some unit tests fail.  */
35#if HAVE_LANGINFO_CODESET
36  {
37    const char *cs = nl_langinfo (CODESET);
38    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
39      return 1;
40  }
41#endif
42#ifdef __CYGWIN__
43  /* On Cygwin, avoid locale names without encoding suffix, because the
44     locale_charset() function relies on the encoding suffix.  Note that
45     LC_ALL is set on the command line.  */
46  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
47#endif
48  /* Check whether in the abbreviation of the second month, the second
49     character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
50     one byte long. This excludes the UTF-8 encoding.  */
51  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
52  if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
53  /* Check whether the decimal separator is a comma.
54     On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
55     are nl_langinfo(RADIXCHAR) are both ".".  */
56  if (localeconv () ->decimal_point[0] != ',') return 1;
57  return 0;
58}
59changequote([,])dnl
60      ])])
61    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
62      # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
63      # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the
64      # configure script would override the LC_ALL setting. Likewise for
65      # LC_CTYPE, which is also set at the beginning of the configure script.
66      # Test for the usual locale name.
67      if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
68        gt_cv_locale_fr=fr_FR
69      else
70        # Test for the locale name with explicit encoding suffix.
71        if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
72          gt_cv_locale_fr=fr_FR.ISO-8859-1
73        else
74          # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
75          if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
76            gt_cv_locale_fr=fr_FR.ISO8859-1
77          else
78            # Test for the HP-UX locale name.
79            if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
80              gt_cv_locale_fr=fr_FR.iso88591
81            else
82              # Test for the Solaris 7 locale name.
83              if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
84                gt_cv_locale_fr=fr
85              else
86                # None found.
87                gt_cv_locale_fr=none
88              fi
89            fi
90          fi
91        fi
92      fi
93    fi
94    rm -fr conftest*
95  ])
96  LOCALE_FR=$gt_cv_locale_fr
97  AC_SUBST([LOCALE_FR])
98])
99
100dnl Determine the name of a french locale with UTF-8 encoding.
101AC_DEFUN([gt_LOCALE_FR_UTF8],
102[
103  AC_REQUIRE([AM_LANGINFO_CODESET])
104  AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [
105    AC_LANG_CONFTEST([AC_LANG_SOURCE([
106changequote(,)dnl
107#include <locale.h>
108#include <time.h>
109#if HAVE_LANGINFO_CODESET
110# include <langinfo.h>
111#endif
112#include <stdlib.h>
113#include <string.h>
114struct tm t;
115char buf[16];
116int main () {
117  /* On BeOS and Haiku, locales are not implemented in libc.  Rather, libintl
118     imitates locale dependent behaviour by looking at the environment
119     variables, and all locales use the UTF-8 encoding.  */
120#if !(defined __BEOS__ || defined __HAIKU__)
121  /* Check whether the given locale name is recognized by the system.  */
122  if (setlocale (LC_ALL, "") == NULL) return 1;
123  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
124     On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
125     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
126     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
127     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
128     some unit tests fail.  */
129# if HAVE_LANGINFO_CODESET
130  {
131    const char *cs = nl_langinfo (CODESET);
132    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
133      return 1;
134  }
135# endif
136# ifdef __CYGWIN__
137  /* On Cygwin, avoid locale names without encoding suffix, because the
138     locale_charset() function relies on the encoding suffix.  Note that
139     LC_ALL is set on the command line.  */
140  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
141# endif
142  /* Check whether in the abbreviation of the second month, the second
143     character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
144     two bytes long, with UTF-8 encoding.  */
145  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
146  if (strftime (buf, sizeof (buf), "%b", &t) < 4
147      || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
148    return 1;
149#endif
150  /* Check whether the decimal separator is a comma.
151     On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
152     are nl_langinfo(RADIXCHAR) are both ".".  */
153  if (localeconv () ->decimal_point[0] != ',') return 1;
154  return 0;
155}
156changequote([,])dnl
157      ])])
158    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
159      # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
160      # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the
161      # configure script would override the LC_ALL setting. Likewise for
162      # LC_CTYPE, which is also set at the beginning of the configure script.
163      # Test for the usual locale name.
164      if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
165        gt_cv_locale_fr_utf8=fr_FR
166      else
167        # Test for the locale name with explicit encoding suffix.
168        if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
169          gt_cv_locale_fr_utf8=fr_FR.UTF-8
170        else
171          # Test for the Solaris 7 locale name.
172          if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
173            gt_cv_locale_fr_utf8=fr.UTF-8
174          else
175            # None found.
176            gt_cv_locale_fr_utf8=none
177          fi
178        fi
179      fi
180    fi
181    rm -fr conftest*
182  ])
183  LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
184  AC_SUBST([LOCALE_FR_UTF8])
185])
186