a37a0d20241450f0dcb7c593ee505b9e44b67583
[platform/upstream/diffutils.git] / m4 / locale-fr.m4
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.
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   /* 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__
31   return 1;
32 #else
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)
41     return 1;
42 # else
43   if (setlocale (LC_ALL, "") == NULL) return 1;
44 # endif
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,
50      some unit tests fail.
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
54   {
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)
58       return 1;
59   }
60 # endif
61 # ifdef __CYGWIN__
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;
66 # endif
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;
77 # endif
78   return 0;
79 #endif
80 }
81 changequote([,])dnl
82       ])])
83     if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
84       case "$host_os" in
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",
90         # and similar.
91         mingw*)
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
95           else
96             # None found.
97             gt_cv_locale_fr=none
98           fi
99           ;;
100         *)
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
108           else
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
112             else
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
116               else
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
120                 else
121                   # Test for the Solaris 7 locale name.
122                   if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
123                     gt_cv_locale_fr=fr
124                   else
125                     # None found.
126                     gt_cv_locale_fr=none
127                   fi
128                 fi
129               fi
130             fi
131           fi
132           ;;
133       esac
134     fi
135     rm -fr conftest*
136   ])
137   LOCALE_FR=$gt_cv_locale_fr
138   AC_SUBST([LOCALE_FR])
139 ])
140
141 dnl Determine the name of a french locale with UTF-8 encoding.
142 AC_DEFUN([gt_LOCALE_FR_UTF8],
143 [
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([
147 changequote(,)dnl
148 #include <locale.h>
149 #include <time.h>
150 #if HAVE_LANGINFO_CODESET
151 # include <langinfo.h>
152 #endif
153 #include <stdlib.h>
154 #include <string.h>
155 struct tm t;
156 char buf[16];
157 int main () {
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)
170     return 1;
171 # else
172   if (setlocale (LC_ALL, "") == NULL) return 1;
173 # endif
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
181   {
182     const char *cs = nl_langinfo (CODESET);
183     if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
184       return 1;
185   }
186 # endif
187 # ifdef __CYGWIN__
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;
192 # endif
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')
199     return 1;
200 #endif
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;
206 #endif
207   return 0;
208 }
209 changequote([,])dnl
210       ])])
211     if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
212       case "$host_os" in
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",
218         # and similar.
219         mingw*)
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
223           else
224             # None found.
225             gt_cv_locale_fr_utf8=none
226           fi
227           ;;
228         *)
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
236           else
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
240             else
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
244               else
245                 # None found.
246                 gt_cv_locale_fr_utf8=none
247               fi
248             fi
249           fi
250           ;;
251       esac
252     fi
253     rm -fr conftest*
254   ])
255   LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
256   AC_SUBST([LOCALE_FR_UTF8])
257 ])