1# locale-fr.m4 serial 18 2dnl Copyright (C) 2003, 2005-2018 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 /* 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 __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} 81changequote([,])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 141dnl Determine the name of a french locale with UTF-8 encoding. 142AC_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([ 147changequote(,)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> 155struct tm t; 156char buf[16]; 157int 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 __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} 209changequote([,])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]) 258