1 # locale-fr.m4 serial 13
2 dnl Copyright (C) 2003, 2005-2011 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
9 dnl Determine the name of a french locale with traditional encoding.
10 AC_DEFUN([gt_LOCALE_FR],
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([
19 #if HAVE_LANGINFO_CODESET
20 # include <langinfo.h>
27 /* Check whether the given locale name is recognized by the system. */
28 #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
29 /* On native Win32, setlocale(category, "") looks at the system settings,
30 not at the environment variables. Also, when an encoding suffix such
31 as ".65001" or ".54936" is speficied, it succeeds but sets the LC_CTYPE
32 category of the locale to "C". */
33 if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
34 || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
37 if (setlocale (LC_ALL, "") == NULL) return 1;
39 /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
40 On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
41 is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
42 On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
43 succeeds but then nl_langinfo(CODESET) is "646". In this situation,
45 On MirBSD 10, when an unsupported locale is specified, setlocale()
46 succeeds but then nl_langinfo(CODESET) is "UTF-8". */
47 #if HAVE_LANGINFO_CODESET
49 const char *cs = nl_langinfo (CODESET);
50 if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
51 || strcmp (cs, "UTF-8") == 0)
56 /* On Cygwin, avoid locale names without encoding suffix, because the
57 locale_charset() function relies on the encoding suffix. Note that
58 LC_ALL is set on the command line. */
59 if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
61 /* Check whether in the abbreviation of the second month, the second
62 character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
63 one byte long. This excludes the UTF-8 encoding. */
64 t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
65 if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
66 /* Check whether the decimal separator is a comma.
67 On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
68 are nl_langinfo(RADIXCHAR) are both ".". */
69 if (localeconv () ->decimal_point[0] != ',') return 1;
74 if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
76 # Handle native Windows specially, because there setlocale() interprets
77 # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
78 # "fr" or "fra" as "French" or "French_France.1252",
79 # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
80 # "ja" as "Japanese" or "Japanese_Japan.932",
83 # Test for the native Win32 locale name.
84 if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
85 gt_cv_locale_fr=French_France.1252
92 # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
93 # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the
94 # configure script would override the LC_ALL setting. Likewise for
95 # LC_CTYPE, which is also set at the beginning of the configure script.
96 # Test for the usual locale name.
97 if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
100 # Test for the locale name with explicit encoding suffix.
101 if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
102 gt_cv_locale_fr=fr_FR.ISO-8859-1
104 # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
105 if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
106 gt_cv_locale_fr=fr_FR.ISO8859-1
108 # Test for the HP-UX locale name.
109 if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
110 gt_cv_locale_fr=fr_FR.iso88591
112 # Test for the Solaris 7 locale name.
113 if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
128 LOCALE_FR=$gt_cv_locale_fr
129 AC_SUBST([LOCALE_FR])
132 dnl Determine the name of a french locale with UTF-8 encoding.
133 AC_DEFUN([gt_LOCALE_FR_UTF8],
135 AC_REQUIRE([AM_LANGINFO_CODESET])
136 AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [
137 AC_LANG_CONFTEST([AC_LANG_SOURCE([
141 #if HAVE_LANGINFO_CODESET
142 # include <langinfo.h>
149 /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
150 imitates locale dependent behaviour by looking at the environment
151 variables, and all locales use the UTF-8 encoding. */
152 #if !(defined __BEOS__ || defined __HAIKU__)
153 /* Check whether the given locale name is recognized by the system. */
154 # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
155 /* On native Win32, setlocale(category, "") looks at the system settings,
156 not at the environment variables. Also, when an encoding suffix such
157 as ".65001" or ".54936" is speficied, it succeeds but sets the LC_CTYPE
158 category of the locale to "C". */
159 if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
160 || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
163 if (setlocale (LC_ALL, "") == NULL) return 1;
165 /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
166 On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
167 is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
168 On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
169 succeeds but then nl_langinfo(CODESET) is "646". In this situation,
170 some unit tests fail. */
171 # if HAVE_LANGINFO_CODESET
173 const char *cs = nl_langinfo (CODESET);
174 if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
179 /* On Cygwin, avoid locale names without encoding suffix, because the
180 locale_charset() function relies on the encoding suffix. Note that
181 LC_ALL is set on the command line. */
182 if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
184 /* Check whether in the abbreviation of the second month, the second
185 character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
186 two bytes long, with UTF-8 encoding. */
187 t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
188 if (strftime (buf, sizeof (buf), "%b", &t) < 4
189 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
192 /* Check whether the decimal separator is a comma.
193 On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
194 are nl_langinfo(RADIXCHAR) are both ".". */
195 if (localeconv () ->decimal_point[0] != ',') return 1;
200 if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
202 # Handle native Windows specially, because there setlocale() interprets
203 # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
204 # "fr" or "fra" as "French" or "French_France.1252",
205 # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
206 # "ja" as "Japanese" or "Japanese_Japan.932",
209 # Test for the hypothetical native Win32 locale name.
210 if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
211 gt_cv_locale_fr_utf8=French_France.65001
214 gt_cv_locale_fr_utf8=none
218 # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
219 # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the
220 # configure script would override the LC_ALL setting. Likewise for
221 # LC_CTYPE, which is also set at the beginning of the configure script.
222 # Test for the usual locale name.
223 if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
224 gt_cv_locale_fr_utf8=fr_FR
226 # Test for the locale name with explicit encoding suffix.
227 if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
228 gt_cv_locale_fr_utf8=fr_FR.UTF-8
230 # Test for the Solaris 7 locale name.
231 if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
232 gt_cv_locale_fr_utf8=fr.UTF-8
235 gt_cv_locale_fr_utf8=none
244 LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
245 AC_SUBST([LOCALE_FR_UTF8])