Prepare for locale dependent tests on mingw.
[pspp] / m4 / locale-fr.m4
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.
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 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)
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       # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
76       # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the
77       # configure script would override the LC_ALL setting. Likewise for
78       # LC_CTYPE, which is also set at the beginning of the configure script.
79       # Test for the usual locale name.
80       if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
81         gt_cv_locale_fr=fr_FR
82       else
83         # Test for the locale name with explicit encoding suffix.
84         if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
85           gt_cv_locale_fr=fr_FR.ISO-8859-1
86         else
87           # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
88           if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
89             gt_cv_locale_fr=fr_FR.ISO8859-1
90           else
91             # Test for the HP-UX locale name.
92             if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
93               gt_cv_locale_fr=fr_FR.iso88591
94             else
95               # Test for the Solaris 7 locale name.
96               if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
97                 gt_cv_locale_fr=fr
98               else
99                 # None found.
100                 gt_cv_locale_fr=none
101               fi
102             fi
103           fi
104         fi
105       fi
106     fi
107     rm -fr conftest*
108   ])
109   LOCALE_FR=$gt_cv_locale_fr
110   AC_SUBST([LOCALE_FR])
111 ])
112
113 dnl Determine the name of a french locale with UTF-8 encoding.
114 AC_DEFUN([gt_LOCALE_FR_UTF8],
115 [
116   AC_REQUIRE([AM_LANGINFO_CODESET])
117   AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [
118     AC_LANG_CONFTEST([AC_LANG_SOURCE([
119 changequote(,)dnl
120 #include <locale.h>
121 #include <time.h>
122 #if HAVE_LANGINFO_CODESET
123 # include <langinfo.h>
124 #endif
125 #include <stdlib.h>
126 #include <string.h>
127 struct tm t;
128 char buf[16];
129 int main () {
130   /* On BeOS and Haiku, locales are not implemented in libc.  Rather, libintl
131      imitates locale dependent behaviour by looking at the environment
132      variables, and all locales use the UTF-8 encoding.  */
133 #if !(defined __BEOS__ || defined __HAIKU__)
134   /* Check whether the given locale name is recognized by the system.  */
135 # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
136   /* On native Win32, setlocale(category, "") looks at the system settings,
137      not at the environment variables.  Also, when an encoding suffix such
138      as ".65001" or ".54936" is speficied, it succeeds but sets the LC_CTYPE
139      category of the locale to "C".  */
140   if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
141       || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
142     return 1;
143 # else
144   if (setlocale (LC_ALL, "") == NULL) return 1;
145 # endif
146   /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
147      On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
148      is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
149      On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
150      succeeds but then nl_langinfo(CODESET) is "646". In this situation,
151      some unit tests fail.  */
152 # if HAVE_LANGINFO_CODESET
153   {
154     const char *cs = nl_langinfo (CODESET);
155     if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
156       return 1;
157   }
158 # endif
159 # ifdef __CYGWIN__
160   /* On Cygwin, avoid locale names without encoding suffix, because the
161      locale_charset() function relies on the encoding suffix.  Note that
162      LC_ALL is set on the command line.  */
163   if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
164 # endif
165   /* Check whether in the abbreviation of the second month, the second
166      character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
167      two bytes long, with UTF-8 encoding.  */
168   t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
169   if (strftime (buf, sizeof (buf), "%b", &t) < 4
170       || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
171     return 1;
172 #endif
173   /* Check whether the decimal separator is a comma.
174      On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
175      are nl_langinfo(RADIXCHAR) are both ".".  */
176   if (localeconv () ->decimal_point[0] != ',') return 1;
177   return 0;
178 }
179 changequote([,])dnl
180       ])])
181     if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
182       # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
183       # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the
184       # configure script would override the LC_ALL setting. Likewise for
185       # LC_CTYPE, which is also set at the beginning of the configure script.
186       # Test for the usual locale name.
187       if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
188         gt_cv_locale_fr_utf8=fr_FR
189       else
190         # Test for the locale name with explicit encoding suffix.
191         if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
192           gt_cv_locale_fr_utf8=fr_FR.UTF-8
193         else
194           # Test for the Solaris 7 locale name.
195           if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
196             gt_cv_locale_fr_utf8=fr.UTF-8
197           else
198             # None found.
199             gt_cv_locale_fr_utf8=none
200           fi
201         fi
202       fi
203     fi
204     rm -fr conftest*
205   ])
206   LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
207   AC_SUBST([LOCALE_FR_UTF8])
208 ])