1*820c1a8dSHiroo HAYASHI# locale-ja.m4 serial 15 2*820c1a8dSHiroo HAYASHIdnl Copyright (C) 2003, 2005-2021 Free Software Foundation, Inc. 3*820c1a8dSHiroo HAYASHIdnl This file is free software; the Free Software Foundation 4*820c1a8dSHiroo HAYASHIdnl gives unlimited permission to copy and/or distribute it, 5*820c1a8dSHiroo HAYASHIdnl with or without modifications, as long as this notice is preserved. 6*820c1a8dSHiroo HAYASHI 7*820c1a8dSHiroo HAYASHIdnl From Bruno Haible. 8*820c1a8dSHiroo HAYASHI 9*820c1a8dSHiroo HAYASHIdnl Determine the name of a japanese locale with EUC-JP encoding. 10*820c1a8dSHiroo HAYASHIAC_DEFUN([gt_LOCALE_JA], 11*820c1a8dSHiroo HAYASHI[ 12*820c1a8dSHiroo HAYASHI AC_REQUIRE([AC_CANONICAL_HOST]) 13*820c1a8dSHiroo HAYASHI AC_REQUIRE([AM_LANGINFO_CODESET]) 14*820c1a8dSHiroo HAYASHI AC_CACHE_CHECK([for a traditional japanese locale], [gt_cv_locale_ja], [ 15*820c1a8dSHiroo HAYASHI AC_LANG_CONFTEST([AC_LANG_SOURCE([[ 16*820c1a8dSHiroo HAYASHI#include <locale.h> 17*820c1a8dSHiroo HAYASHI#include <time.h> 18*820c1a8dSHiroo HAYASHI#if HAVE_LANGINFO_CODESET 19*820c1a8dSHiroo HAYASHI# include <langinfo.h> 20*820c1a8dSHiroo HAYASHI#endif 21*820c1a8dSHiroo HAYASHI#include <stdlib.h> 22*820c1a8dSHiroo HAYASHI#include <string.h> 23*820c1a8dSHiroo HAYASHIstruct tm t; 24*820c1a8dSHiroo HAYASHIchar buf[16]; 25*820c1a8dSHiroo HAYASHIint main () 26*820c1a8dSHiroo HAYASHI{ 27*820c1a8dSHiroo HAYASHI /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl 28*820c1a8dSHiroo HAYASHI imitates locale dependent behaviour by looking at the environment 29*820c1a8dSHiroo HAYASHI variables, and all locales use the UTF-8 encoding. */ 30*820c1a8dSHiroo HAYASHI#if defined __BEOS__ || defined __HAIKU__ 31*820c1a8dSHiroo HAYASHI return 1; 32*820c1a8dSHiroo HAYASHI#else 33*820c1a8dSHiroo HAYASHI /* Check whether the given locale name is recognized by the system. */ 34*820c1a8dSHiroo HAYASHI# if defined _WIN32 && !defined __CYGWIN__ 35*820c1a8dSHiroo HAYASHI /* On native Windows, setlocale(category, "") looks at the system settings, 36*820c1a8dSHiroo HAYASHI not at the environment variables. Also, when an encoding suffix such 37*820c1a8dSHiroo HAYASHI as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE 38*820c1a8dSHiroo HAYASHI category of the locale to "C". */ 39*820c1a8dSHiroo HAYASHI if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL 40*820c1a8dSHiroo HAYASHI || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) 41*820c1a8dSHiroo HAYASHI return 1; 42*820c1a8dSHiroo HAYASHI# else 43*820c1a8dSHiroo HAYASHI if (setlocale (LC_ALL, "") == NULL) return 1; 44*820c1a8dSHiroo HAYASHI# endif 45*820c1a8dSHiroo HAYASHI /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". 46*820c1a8dSHiroo HAYASHI On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) 47*820c1a8dSHiroo HAYASHI is empty, and the behaviour of Tcl 8.4 in this locale is not useful. 48*820c1a8dSHiroo HAYASHI On OpenBSD 4.0, when an unsupported locale is specified, setlocale() 49*820c1a8dSHiroo HAYASHI succeeds but then nl_langinfo(CODESET) is "646". In this situation, 50*820c1a8dSHiroo HAYASHI some unit tests fail. 51*820c1a8dSHiroo HAYASHI On MirBSD 10, when an unsupported locale is specified, setlocale() 52*820c1a8dSHiroo HAYASHI succeeds but then nl_langinfo(CODESET) is "UTF-8". */ 53*820c1a8dSHiroo HAYASHI# if HAVE_LANGINFO_CODESET 54*820c1a8dSHiroo HAYASHI { 55*820c1a8dSHiroo HAYASHI const char *cs = nl_langinfo (CODESET); 56*820c1a8dSHiroo HAYASHI if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 57*820c1a8dSHiroo HAYASHI || strcmp (cs, "UTF-8") == 0) 58*820c1a8dSHiroo HAYASHI return 1; 59*820c1a8dSHiroo HAYASHI } 60*820c1a8dSHiroo HAYASHI# endif 61*820c1a8dSHiroo HAYASHI# ifdef __CYGWIN__ 62*820c1a8dSHiroo HAYASHI /* On Cygwin, avoid locale names without encoding suffix, because the 63*820c1a8dSHiroo HAYASHI locale_charset() function relies on the encoding suffix. Note that 64*820c1a8dSHiroo HAYASHI LC_ALL is set on the command line. */ 65*820c1a8dSHiroo HAYASHI if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; 66*820c1a8dSHiroo HAYASHI# endif 67*820c1a8dSHiroo HAYASHI /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales 68*820c1a8dSHiroo HAYASHI on Cygwin 1.5.x. */ 69*820c1a8dSHiroo HAYASHI if (MB_CUR_MAX == 1) 70*820c1a8dSHiroo HAYASHI return 1; 71*820c1a8dSHiroo HAYASHI /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. 72*820c1a8dSHiroo HAYASHI This excludes the UTF-8 encoding (except on MirBSD). */ 73*820c1a8dSHiroo HAYASHI { 74*820c1a8dSHiroo HAYASHI const char *p; 75*820c1a8dSHiroo HAYASHI t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; 76*820c1a8dSHiroo HAYASHI if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; 77*820c1a8dSHiroo HAYASHI for (p = buf; *p != '\0'; p++) 78*820c1a8dSHiroo HAYASHI if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) 79*820c1a8dSHiroo HAYASHI return 1; 80*820c1a8dSHiroo HAYASHI } 81*820c1a8dSHiroo HAYASHI return 0; 82*820c1a8dSHiroo HAYASHI#endif 83*820c1a8dSHiroo HAYASHI} 84*820c1a8dSHiroo HAYASHI ]])]) 85*820c1a8dSHiroo HAYASHI if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then 86*820c1a8dSHiroo HAYASHI case "$host_os" in 87*820c1a8dSHiroo HAYASHI # Handle native Windows specially, because there setlocale() interprets 88*820c1a8dSHiroo HAYASHI # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", 89*820c1a8dSHiroo HAYASHI # "fr" or "fra" as "French" or "French_France.1252", 90*820c1a8dSHiroo HAYASHI # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", 91*820c1a8dSHiroo HAYASHI # "ja" as "Japanese" or "Japanese_Japan.932", 92*820c1a8dSHiroo HAYASHI # and similar. 93*820c1a8dSHiroo HAYASHI mingw*) 94*820c1a8dSHiroo HAYASHI # Note that on native Windows, the Japanese locale is 95*820c1a8dSHiroo HAYASHI # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we 96*820c1a8dSHiroo HAYASHI # cannot use it here. 97*820c1a8dSHiroo HAYASHI gt_cv_locale_ja=none 98*820c1a8dSHiroo HAYASHI ;; 99*820c1a8dSHiroo HAYASHI *) 100*820c1a8dSHiroo HAYASHI # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because 101*820c1a8dSHiroo HAYASHI # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the 102*820c1a8dSHiroo HAYASHI # configure script would override the LC_ALL setting. Likewise for 103*820c1a8dSHiroo HAYASHI # LC_CTYPE, which is also set at the beginning of the configure script. 104*820c1a8dSHiroo HAYASHI # Test for the AIX locale name. 105*820c1a8dSHiroo HAYASHI if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then 106*820c1a8dSHiroo HAYASHI gt_cv_locale_ja=ja_JP 107*820c1a8dSHiroo HAYASHI else 108*820c1a8dSHiroo HAYASHI # Test for the locale name with explicit encoding suffix. 109*820c1a8dSHiroo HAYASHI if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then 110*820c1a8dSHiroo HAYASHI gt_cv_locale_ja=ja_JP.EUC-JP 111*820c1a8dSHiroo HAYASHI else 112*820c1a8dSHiroo HAYASHI # Test for the HP-UX, OSF/1, NetBSD locale name. 113*820c1a8dSHiroo HAYASHI if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then 114*820c1a8dSHiroo HAYASHI gt_cv_locale_ja=ja_JP.eucJP 115*820c1a8dSHiroo HAYASHI else 116*820c1a8dSHiroo HAYASHI # Test for the IRIX, FreeBSD locale name. 117*820c1a8dSHiroo HAYASHI if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then 118*820c1a8dSHiroo HAYASHI gt_cv_locale_ja=ja_JP.EUC 119*820c1a8dSHiroo HAYASHI else 120*820c1a8dSHiroo HAYASHI # Test for the Solaris 7 locale name. 121*820c1a8dSHiroo HAYASHI if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then 122*820c1a8dSHiroo HAYASHI gt_cv_locale_ja=ja 123*820c1a8dSHiroo HAYASHI else 124*820c1a8dSHiroo HAYASHI # Special test for NetBSD 1.6. 125*820c1a8dSHiroo HAYASHI if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then 126*820c1a8dSHiroo HAYASHI gt_cv_locale_ja=ja_JP.eucJP 127*820c1a8dSHiroo HAYASHI else 128*820c1a8dSHiroo HAYASHI # None found. 129*820c1a8dSHiroo HAYASHI gt_cv_locale_ja=none 130*820c1a8dSHiroo HAYASHI fi 131*820c1a8dSHiroo HAYASHI fi 132*820c1a8dSHiroo HAYASHI fi 133*820c1a8dSHiroo HAYASHI fi 134*820c1a8dSHiroo HAYASHI fi 135*820c1a8dSHiroo HAYASHI fi 136*820c1a8dSHiroo HAYASHI ;; 137*820c1a8dSHiroo HAYASHI esac 138*820c1a8dSHiroo HAYASHI fi 139*820c1a8dSHiroo HAYASHI rm -fr conftest* 140*820c1a8dSHiroo HAYASHI ]) 141*820c1a8dSHiroo HAYASHI LOCALE_JA=$gt_cv_locale_ja 142*820c1a8dSHiroo HAYASHI AC_SUBST([LOCALE_JA]) 143*820c1a8dSHiroo HAYASHI]) 144