summaryrefslogtreecommitdiffstats
path: root/gl/m4/btowc.m4
diff options
context:
space:
mode:
Diffstat (limited to 'gl/m4/btowc.m4')
-rw-r--r--gl/m4/btowc.m485
1 files changed, 71 insertions, 14 deletions
diff --git a/gl/m4/btowc.m4 b/gl/m4/btowc.m4
index 77218a7..d9dd703 100644
--- a/gl/m4/btowc.m4
+++ b/gl/m4/btowc.m4
@@ -1,5 +1,6 @@
1# btowc.m4 serial 12 1# btowc.m4
2dnl Copyright (C) 2008-2023 Free Software Foundation, Inc. 2# serial 14
3dnl Copyright (C) 2008-2024 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation 4dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it, 5dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved. 6dnl with or without modifications, as long as this notice is preserved.
@@ -40,12 +41,12 @@ int main ()
40 [ 41 [
41changequote(,)dnl 42changequote(,)dnl
42 case "$host_os" in 43 case "$host_os" in
43 # Guess no on Cygwin. 44 # Guess no on Cygwin.
44 cygwin*) gl_cv_func_btowc_nul="guessing no" ;; 45 cygwin*) gl_cv_func_btowc_nul="guessing no" ;;
45 # Guess yes on native Windows. 46 # Guess yes on native Windows.
46 mingw*) gl_cv_func_btowc_nul="guessing yes" ;; 47 mingw* | windows*) gl_cv_func_btowc_nul="guessing yes" ;;
47 # Guess yes otherwise. 48 # Guess yes otherwise.
48 *) gl_cv_func_btowc_nul="guessing yes" ;; 49 *) gl_cv_func_btowc_nul="guessing yes" ;;
49 esac 50 esac
50changequote([,])dnl 51changequote([,])dnl
51 ]) 52 ])
@@ -59,12 +60,12 @@ changequote([,])dnl
59 dnl is present. 60 dnl is present.
60changequote(,)dnl 61changequote(,)dnl
61 case "$host_os" in 62 case "$host_os" in
62 # Guess no on IRIX. 63 # Guess no on IRIX.
63 irix*) gl_cv_func_btowc_eof="guessing no" ;; 64 irix*) gl_cv_func_btowc_eof="guessing no" ;;
64 # Guess yes on native Windows. 65 # Guess yes on native Windows.
65 mingw*) gl_cv_func_btowc_eof="guessing yes" ;; 66 mingw* | windows*) gl_cv_func_btowc_eof="guessing yes" ;;
66 # Guess yes otherwise. 67 # Guess yes otherwise.
67 *) gl_cv_func_btowc_eof="guessing yes" ;; 68 *) gl_cv_func_btowc_eof="guessing yes" ;;
68 esac 69 esac
69changequote([,])dnl 70changequote([,])dnl
70 if test $LOCALE_FR != none; then 71 if test $LOCALE_FR != none; then
@@ -88,6 +89,50 @@ int main ()
88 fi 89 fi
89 ]) 90 ])
90 91
92 dnl On mingw, in the C locale, btowc is inconsistent with mbrtowc:
93 dnl mbrtowc avoids calling MultiByteToWideChar when MB_CUR_MAX is 1 and
94 dnl ___lc_codepage_func() is 0, but btowc is lacking this special case.
95 AC_CHECK_FUNCS_ONCE([mbrtowc])
96 AC_CACHE_CHECK([whether btowc is consistent with mbrtowc in the C locale],
97 [gl_cv_func_btowc_consistent],
98 [
99 AC_RUN_IFELSE(
100 [AC_LANG_SOURCE([[
101#include <stdlib.h>
102#include <string.h>
103#include <wchar.h>
104int main ()
105{
106#if HAVE_MBRTOWC
107 wint_t wc1 = btowc (0x80);
108 wchar_t wc2 = (wchar_t) 0xbadface;
109 char buf[1] = { 0x80 };
110 mbstate_t state;
111 memset (&state, 0, sizeof (mbstate_t));
112 if (mbrtowc (&wc2, buf, 1, &state) != 1 || wc1 != wc2)
113 return 1;
114#endif
115 return 0;
116}]])],
117 [gl_cv_func_btowc_consistent=yes],
118 [gl_cv_func_btowc_consistent=no],
119 [case "$host_os" in
120 # Guess no on mingw.
121 mingw* | windows*)
122 AC_EGREP_CPP([Problem], [
123#ifdef __MINGW32__
124 Problem
125#endif
126 ],
127 [gl_cv_func_btowc_consistent="guessing no"],
128 [gl_cv_func_btowc_consistent="guessing yes"])
129 ;;
130 # Guess yes otherwise.
131 *) gl_cv_func_btowc_consistent="guessing yes" ;;
132 esac
133 ])
134 ])
135
91 case "$gl_cv_func_btowc_nul" in 136 case "$gl_cv_func_btowc_nul" in
92 *yes) ;; 137 *yes) ;;
93 *) REPLACE_BTOWC=1 ;; 138 *) REPLACE_BTOWC=1 ;;
@@ -96,10 +141,22 @@ int main ()
96 *yes) ;; 141 *yes) ;;
97 *) REPLACE_BTOWC=1 ;; 142 *) REPLACE_BTOWC=1 ;;
98 esac 143 esac
144 case "$gl_cv_func_btowc_consistent" in
145 *yes) ;;
146 *) REPLACE_BTOWC=1 ;;
147 esac
148 if test $REPLACE_BTOWC = 0; then
149 gl_MBRTOWC_C_LOCALE
150 case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in
151 *yes) ;;
152 *) REPLACE_BTOWC=1 ;;
153 esac
154 fi
99 fi 155 fi
100]) 156])
101 157
102# Prerequisites of lib/btowc.c. 158# Prerequisites of lib/btowc.c.
103AC_DEFUN([gl_PREREQ_BTOWC], [ 159AC_DEFUN([gl_PREREQ_BTOWC], [
104 : 160 :
161 AC_CHECK_FUNCS_ONCE([mbrtowc])
105]) 162])