4cb14b5f5d80e6fdae16e7e6f0baa455b19359f3
[bpt/guile.git] / m4 / locale-fr.m4
1 # locale-fr.m4 serial 14
2 dnl Copyright (C) 2003, 2005-2012 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.
6
7 dnl From Bruno Haible.
8
9 dnl Determine the name of a french locale with traditional encoding.
10 AC_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([
16 changequote(,)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>
24 struct tm t;
25 char buf[16];
26 int main () {
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 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)
35 return 1;
36 #else
37 if (setlocale (LC_ALL, "") == NULL) return 1;
38 #endif
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,
44 some unit tests fail.
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
48 {
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)
52 return 1;
53 }
54 #endif
55 #ifdef __CYGWIN__
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;
60 #endif
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;
70 return 0;
71 }
72 changequote([,])dnl
73 ])])
74 if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
75 case "$host_os" in
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",
81 # and similar.
82 mingw*)
83 # Test for the native Windows 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
86 else
87 # None found.
88 gt_cv_locale_fr=none
89 fi
90 ;;
91 *)
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
98 gt_cv_locale_fr=fr_FR
99 else
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
103 else
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
107 else
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
111 else
112 # Test for the Solaris 7 locale name.
113 if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
114 gt_cv_locale_fr=fr
115 else
116 # None found.
117 gt_cv_locale_fr=none
118 fi
119 fi
120 fi
121 fi
122 fi
123 ;;
124 esac
125 fi
126 rm -fr conftest*
127 ])
128 LOCALE_FR=$gt_cv_locale_fr
129 AC_SUBST([LOCALE_FR])
130 ])
131
132 dnl Determine the name of a french locale with UTF-8 encoding.
133 AC_DEFUN([gt_LOCALE_FR_UTF8],
134 [
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([
138 changequote(,)dnl
139 #include <locale.h>
140 #include <time.h>
141 #if HAVE_LANGINFO_CODESET
142 # include <langinfo.h>
143 #endif
144 #include <stdlib.h>
145 #include <string.h>
146 struct tm t;
147 char buf[16];
148 int main () {
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 Windows, 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)
161 return 1;
162 # else
163 if (setlocale (LC_ALL, "") == NULL) return 1;
164 # endif
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
172 {
173 const char *cs = nl_langinfo (CODESET);
174 if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
175 return 1;
176 }
177 # endif
178 # ifdef __CYGWIN__
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;
183 # endif
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')
190 return 1;
191 #endif
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;
196 return 0;
197 }
198 changequote([,])dnl
199 ])])
200 if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
201 case "$host_os" in
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",
207 # and similar.
208 mingw*)
209 # Test for the hypothetical native Windows 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
212 else
213 # None found.
214 gt_cv_locale_fr_utf8=none
215 fi
216 ;;
217 *)
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
225 else
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
229 else
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
233 else
234 # None found.
235 gt_cv_locale_fr_utf8=none
236 fi
237 fi
238 fi
239 ;;
240 esac
241 fi
242 rm -fr conftest*
243 ])
244 LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
245 AC_SUBST([LOCALE_FR_UTF8])
246 ])