• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# locale-fr.m4 serial 17
2dnl Copyright (C) 2003, 2005-2012 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved.
6
7dnl From Bruno Haible.
8
9dnl Determine the name of a french locale with traditional encoding.
10AC_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([
16changequote(,)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>
24struct tm t;
25char buf[16];
26int 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 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)
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 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,
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#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;
71#endif
72  return 0;
73}
74changequote([,])dnl
75      ])])
76    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
77      case "$host_os" in
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",
83        # and similar.
84        mingw*)
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
88          else
89            # None found.
90            gt_cv_locale_fr=none
91          fi
92          ;;
93        *)
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
101          else
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
105            else
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
109              else
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
113                else
114                  # Test for the Solaris 7 locale name.
115                  if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
116                    gt_cv_locale_fr=fr
117                  else
118                    # None found.
119                    gt_cv_locale_fr=none
120                  fi
121                fi
122              fi
123            fi
124          fi
125          ;;
126      esac
127    fi
128    rm -fr conftest*
129  ])
130  LOCALE_FR=$gt_cv_locale_fr
131  AC_SUBST([LOCALE_FR])
132])
133
134dnl Determine the name of a french locale with UTF-8 encoding.
135AC_DEFUN([gt_LOCALE_FR_UTF8],
136[
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([
140changequote(,)dnl
141#include <locale.h>
142#include <time.h>
143#if HAVE_LANGINFO_CODESET
144# include <langinfo.h>
145#endif
146#include <stdlib.h>
147#include <string.h>
148struct tm t;
149char buf[16];
150int main () {
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)
163    return 1;
164# else
165  if (setlocale (LC_ALL, "") == NULL) return 1;
166# endif
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
174  {
175    const char *cs = nl_langinfo (CODESET);
176    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
177      return 1;
178  }
179# endif
180# ifdef __CYGWIN__
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;
185# endif
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')
192    return 1;
193#endif
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;
199#endif
200  return 0;
201}
202changequote([,])dnl
203      ])])
204    if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
205      case "$host_os" in
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",
211        # and similar.
212        mingw*)
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
216          else
217            # None found.
218            gt_cv_locale_fr_utf8=none
219          fi
220          ;;
221        *)
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
229          else
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
233            else
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
237              else
238                # None found.
239                gt_cv_locale_fr_utf8=none
240              fi
241            fi
242          fi
243          ;;
244      esac
245    fi
246    rm -fr conftest*
247  ])
248  LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
249  AC_SUBST([LOCALE_FR_UTF8])
250])
251