1 # locale-fr.m4 serial 19
2 dnl Copyright (C) 2003, 2005-2018 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 /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
28 imitates locale dependent behaviour by looking at the environment
29 variables, and all locales use the UTF-8 encoding. */
30 #if defined __BEOS__ || defined __HAIKU__
33 /* Check whether the given locale name is recognized by the system. */
34 # if defined _WIN32 && !defined __CYGWIN__
35 /* On native Windows, setlocale(category, "") looks at the system settings,
36 not at the environment variables. Also, when an encoding suffix such
37 as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
38 category of the locale to "C". */
39 if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
40 || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
43 if (setlocale (LC_ALL, "") == NULL) return 1;
45 /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
46 On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
47 is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
48 On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
49 succeeds but then nl_langinfo(CODESET) is "646". In this situation,
51 On MirBSD 10, when an unsupported locale is specified, setlocale()
52 succeeds but then nl_langinfo(CODESET) is "UTF-8". */
53 # if HAVE_LANGINFO_CODESET
55 const char *cs = nl_langinfo (CODESET);
56 if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
57 || strcmp (cs, "UTF-8") == 0)
62 /* On Cygwin, avoid locale names without encoding suffix, because the
63 locale_charset() function relies on the encoding suffix. Note that
64 LC_ALL is set on the command line. */
65 if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
67 /* Check whether in the abbreviation of the second month, the second
68 character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
69 one byte long. This excludes the UTF-8 encoding. */
70 t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
71 if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
72 # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
73 /* Check whether the decimal separator is a comma.
74 On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
75 are nl_langinfo(RADIXCHAR) are both ".". */
76 if (localeconv () ->decimal_point[0] != ',') return 1;
83 if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
85 # Handle native Windows specially, because there setlocale() interprets
86 # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
87 # "fr" or "fra" as "French" or "French_France.1252",
88 # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
89 # "ja" as "Japanese" or "Japanese_Japan.932",
92 # Test for the native Windows locale name.
93 if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
94 gt_cv_locale_fr=French_France.1252
101 # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
102 # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
103 # configure script would override the LC_ALL setting. Likewise for
104 # LC_CTYPE, which is also set at the beginning of the configure script.
105 # Test for the usual locale name.
106 if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
107 gt_cv_locale_fr=fr_FR
109 # Test for the locale name with explicit encoding suffix.
110 if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
111 gt_cv_locale_fr=fr_FR.ISO-8859-1
113 # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
114 if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
115 gt_cv_locale_fr=fr_FR.ISO8859-1
117 # Test for the HP-UX locale name.
118 if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
119 gt_cv_locale_fr=fr_FR.iso88591
121 # Test for the Solaris 7 locale name.
122 if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
137 LOCALE_FR=$gt_cv_locale_fr
138 AC_SUBST([LOCALE_FR])
141 dnl Determine the name of a french locale with UTF-8 encoding.
142 AC_DEFUN([gt_LOCALE_FR_UTF8],
144 AC_REQUIRE([AM_LANGINFO_CODESET])
145 AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [
146 AC_LANG_CONFTEST([AC_LANG_SOURCE([
150 #if HAVE_LANGINFO_CODESET
151 # include <langinfo.h>
158 /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
159 imitates locale dependent behaviour by looking at the environment
160 variables, and all locales use the UTF-8 encoding. */
161 #if !(defined __BEOS__ || defined __HAIKU__)
162 /* Check whether the given locale name is recognized by the system. */
163 # if defined _WIN32 && !defined __CYGWIN__
164 /* On native Windows, setlocale(category, "") looks at the system settings,
165 not at the environment variables. Also, when an encoding suffix such
166 as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
167 category of the locale to "C". */
168 if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
169 || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
172 if (setlocale (LC_ALL, "") == NULL) return 1;
174 /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
175 On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
176 is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
177 On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
178 succeeds but then nl_langinfo(CODESET) is "646". In this situation,
179 some unit tests fail. */
180 # if HAVE_LANGINFO_CODESET
182 const char *cs = nl_langinfo (CODESET);
183 if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
188 /* On Cygwin, avoid locale names without encoding suffix, because the
189 locale_charset() function relies on the encoding suffix. Note that
190 LC_ALL is set on the command line. */
191 if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
193 /* Check whether in the abbreviation of the second month, the second
194 character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
195 two bytes long, with UTF-8 encoding. */
196 t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
197 if (strftime (buf, sizeof (buf), "%b", &t) < 4
198 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
201 #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
202 /* Check whether the decimal separator is a comma.
203 On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
204 are nl_langinfo(RADIXCHAR) are both ".". */
205 if (localeconv () ->decimal_point[0] != ',') return 1;
211 if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
213 # Handle native Windows specially, because there setlocale() interprets
214 # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
215 # "fr" or "fra" as "French" or "French_France.1252",
216 # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
217 # "ja" as "Japanese" or "Japanese_Japan.932",
220 # Test for the hypothetical native Windows locale name.
221 if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
222 gt_cv_locale_fr_utf8=French_France.65001
225 gt_cv_locale_fr_utf8=none
229 # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
230 # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
231 # configure script would override the LC_ALL setting. Likewise for
232 # LC_CTYPE, which is also set at the beginning of the configure script.
233 # Test for the usual locale name.
234 if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
235 gt_cv_locale_fr_utf8=fr_FR
237 # Test for the locale name with explicit encoding suffix.
238 if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
239 gt_cv_locale_fr_utf8=fr_FR.UTF-8
241 # Test for the Solaris 7 locale name.
242 if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
243 gt_cv_locale_fr_utf8=fr.UTF-8
246 gt_cv_locale_fr_utf8=none
255 LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
256 AC_SUBST([LOCALE_FR_UTF8])