1 # locale-fr.m4 serial 17
2 dnl Copyright (C) 2003, 2005-2013 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 Windows, 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 specified, 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 Mac OS 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 #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
67 /* Check whether the decimal separator is a comma.
68 On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
69 are nl_langinfo(RADIXCHAR) are both ".". */
70 if (localeconv () ->decimal_point[0] != ',') return 1;
76 if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
78 # Handle native Windows specially, because there setlocale() interprets
79 # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
80 # "fr" or "fra" as "French" or "French_France.1252",
81 # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
82 # "ja" as "Japanese" or "Japanese_Japan.932",
85 # Test for the native Windows locale name.
86 if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
87 gt_cv_locale_fr=French_France.1252
94 # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
95 # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
96 # configure script would override the LC_ALL setting. Likewise for
97 # LC_CTYPE, which is also set at the beginning of the configure script.
98 # Test for the usual locale name.
99 if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
100 gt_cv_locale_fr=fr_FR
102 # Test for the locale name with explicit encoding suffix.
103 if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
104 gt_cv_locale_fr=fr_FR.ISO-8859-1
106 # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
107 if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
108 gt_cv_locale_fr=fr_FR.ISO8859-1
110 # Test for the HP-UX locale name.
111 if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
112 gt_cv_locale_fr=fr_FR.iso88591
114 # Test for the Solaris 7 locale name.
115 if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
130 LOCALE_FR=$gt_cv_locale_fr
131 AC_SUBST([LOCALE_FR])
134 dnl Determine the name of a french locale with UTF-8 encoding.
135 AC_DEFUN([gt_LOCALE_FR_UTF8],
137 AC_REQUIRE([AM_LANGINFO_CODESET])
138 AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [
139 AC_LANG_CONFTEST([AC_LANG_SOURCE([
143 #if HAVE_LANGINFO_CODESET
144 # include <langinfo.h>
151 /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
152 imitates locale dependent behaviour by looking at the environment
153 variables, and all locales use the UTF-8 encoding. */
154 #if !(defined __BEOS__ || defined __HAIKU__)
155 /* Check whether the given locale name is recognized by the system. */
156 # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
157 /* On native Windows, setlocale(category, "") looks at the system settings,
158 not at the environment variables. Also, when an encoding suffix such
159 as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
160 category of the locale to "C". */
161 if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
162 || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
165 if (setlocale (LC_ALL, "") == NULL) return 1;
167 /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
168 On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
169 is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
170 On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
171 succeeds but then nl_langinfo(CODESET) is "646". In this situation,
172 some unit tests fail. */
173 # if HAVE_LANGINFO_CODESET
175 const char *cs = nl_langinfo (CODESET);
176 if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
181 /* On Cygwin, avoid locale names without encoding suffix, because the
182 locale_charset() function relies on the encoding suffix. Note that
183 LC_ALL is set on the command line. */
184 if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
186 /* Check whether in the abbreviation of the second month, the second
187 character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
188 two bytes long, with UTF-8 encoding. */
189 t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
190 if (strftime (buf, sizeof (buf), "%b", &t) < 4
191 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
194 #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
195 /* Check whether the decimal separator is a comma.
196 On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
197 are nl_langinfo(RADIXCHAR) are both ".". */
198 if (localeconv () ->decimal_point[0] != ',') return 1;
204 if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
206 # Handle native Windows specially, because there setlocale() interprets
207 # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
208 # "fr" or "fra" as "French" or "French_France.1252",
209 # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
210 # "ja" as "Japanese" or "Japanese_Japan.932",
213 # Test for the hypothetical native Windows locale name.
214 if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
215 gt_cv_locale_fr_utf8=French_France.65001
218 gt_cv_locale_fr_utf8=none
222 # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
223 # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
224 # configure script would override the LC_ALL setting. Likewise for
225 # LC_CTYPE, which is also set at the beginning of the configure script.
226 # Test for the usual locale name.
227 if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
228 gt_cv_locale_fr_utf8=fr_FR
230 # Test for the locale name with explicit encoding suffix.
231 if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
232 gt_cv_locale_fr_utf8=fr_FR.UTF-8
234 # Test for the Solaris 7 locale name.
235 if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
236 gt_cv_locale_fr_utf8=fr.UTF-8
239 gt_cv_locale_fr_utf8=none
248 LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
249 AC_SUBST([LOCALE_FR_UTF8])