1 # locale-fr.m4 serial 17 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 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 } 74 changequote([,])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 134 dnl Determine the name of a french locale with UTF-8 encoding. 135 AC_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([ 140 changequote(,)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> 148 struct tm t; 149 char buf[16]; 150 int 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 } 202 changequote([,])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