Use Gnulib's `stat-time' module; update Gnulib.
[bpt/guile.git] / m4 / mbrlen.m4
CommitLineData
9157d901
LC
1# mbrlen.m4 serial 3
2dnl Copyright (C) 2008, 2010 Free Software Foundation, Inc.
bfb18ff0
NJ
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
7AC_DEFUN([gl_FUNC_MBRLEN],
8[
9 AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
10
11 AC_REQUIRE([AC_TYPE_MBSTATE_T])
12 AC_REQUIRE([gl_FUNC_MBRTOWC])
13 AC_CHECK_FUNCS_ONCE([mbrlen])
14 if test $ac_cv_func_mbrlen = no; then
15 HAVE_MBRLEN=0
16 else
17 dnl Most bugs affecting the system's mbrtowc function also affect the
18 dnl mbrlen function. So override mbrlen whenever mbrtowc is overridden.
19 dnl We could also run the individual tests below; the results would be
20 dnl the same.
21 if test $REPLACE_MBRTOWC = 1; then
22 REPLACE_MBRLEN=1
23 fi
24 fi
25 if test $HAVE_MBRLEN = 0 || test $REPLACE_MBRLEN = 1; then
26 gl_REPLACE_WCHAR_H
27 AC_LIBOBJ([mbrlen])
28 gl_PREREQ_MBRLEN
29 fi
30])
31
32dnl Test whether mbrlen puts the state into non-initial state when parsing an
33dnl incomplete multibyte character.
34dnl Result is gl_cv_func_mbrlen_incomplete_state.
35
36AC_DEFUN([gl_MBRLEN_INCOMPLETE_STATE],
37[
38 AC_REQUIRE([AC_PROG_CC])
39 AC_REQUIRE([gt_LOCALE_JA])
40 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
41 AC_CACHE_CHECK([whether mbrlen handles incomplete characters],
42 [gl_cv_func_mbrlen_incomplete_state],
43 [
44 dnl Initial guess, used when cross-compiling or when no suitable locale
45 dnl is present.
46changequote(,)dnl
47 case "$host_os" in
9157d901
LC
48 # Guess no on AIX and OSF/1.
49 aix* | osf*) gl_cv_func_mbrlen_incomplete_state="guessing no" ;;
50 # Guess yes otherwise.
51 *) gl_cv_func_mbrlen_incomplete_state="guessing yes" ;;
bfb18ff0
NJ
52 esac
53changequote([,])dnl
54 if test $LOCALE_JA != none; then
9157d901
LC
55 AC_RUN_IFELSE(
56 [AC_LANG_SOURCE([[
bfb18ff0
NJ
57#include <locale.h>
58#include <string.h>
59#include <wchar.h>
60int main ()
61{
62 if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
63 {
64 const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
65 mbstate_t state;
66
67 memset (&state, '\0', sizeof (mbstate_t));
68 if (mbrlen (input + 1, 1, &state) == (size_t)(-2))
69 if (mbsinit (&state))
70 return 1;
71 }
72 return 0;
9157d901 73}]])],
bfb18ff0
NJ
74 [gl_cv_func_mbrlen_incomplete_state=yes],
75 [gl_cv_func_mbrlen_incomplete_state=no],
76 [])
77 fi
78 ])
79])
80
81dnl Test whether mbrlen, when parsing the end of a multibyte character,
82dnl correctly returns the number of bytes that were needed to complete the
83dnl character (not the total number of bytes of the multibyte character).
84dnl Result is gl_cv_func_mbrlen_retval.
85
86AC_DEFUN([gl_MBRLEN_RETVAL],
87[
88 AC_REQUIRE([AC_PROG_CC])
89 AC_REQUIRE([gt_LOCALE_FR_UTF8])
90 AC_REQUIRE([gt_LOCALE_JA])
91 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
92 AC_CACHE_CHECK([whether mbrlen has a correct return value],
93 [gl_cv_func_mbrlen_retval],
94 [
95 dnl Initial guess, used when cross-compiling or when no suitable locale
96 dnl is present.
97changequote(,)dnl
98 case "$host_os" in
99 # Guess no on HP-UX and Solaris.
100 hpux* | solaris*) gl_cv_func_mbrlen_retval="guessing no" ;;
101 # Guess yes otherwise.
102 *) gl_cv_func_mbrlen_retval="guessing yes" ;;
103 esac
104changequote([,])dnl
105 if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none; then
9157d901
LC
106 AC_RUN_IFELSE(
107 [AC_LANG_SOURCE([[
bfb18ff0
NJ
108#include <locale.h>
109#include <string.h>
110#include <wchar.h>
111int main ()
112{
113 /* This fails on Solaris. */
114 if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
115 {
116 char input[] = "B\303\274\303\237er"; /* "Büßer" */
117 mbstate_t state;
118
119 memset (&state, '\0', sizeof (mbstate_t));
120 if (mbrlen (input + 1, 1, &state) == (size_t)(-2))
121 {
122 input[1] = '\0';
123 if (mbrlen (input + 2, 5, &state) != 1)
124 return 1;
125 }
126 }
127 /* This fails on HP-UX 11.11. */
128 if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
129 {
130 char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
131 mbstate_t state;
132
133 memset (&state, '\0', sizeof (mbstate_t));
134 if (mbrlen (input + 1, 1, &state) == (size_t)(-2))
135 {
136 input[1] = '\0';
137 if (mbrlen (input + 2, 5, &state) != 2)
138 return 1;
139 }
140 }
141 return 0;
9157d901 142}]])],
bfb18ff0
NJ
143 [gl_cv_func_mbrlen_retval=yes],
144 [gl_cv_func_mbrlen_retval=no],
145 [])
146 fi
147 ])
148])
149
150dnl Test whether mbrlen, when parsing a NUL character, correctly returns 0.
151dnl Result is gl_cv_func_mbrlen_nul_retval.
152
153AC_DEFUN([gl_MBRLEN_NUL_RETVAL],
154[
155 AC_REQUIRE([AC_PROG_CC])
156 AC_REQUIRE([gt_LOCALE_ZH_CN])
157 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
158 AC_CACHE_CHECK([whether mbrlen returns 0 when parsing a NUL character],
159 [gl_cv_func_mbrlen_nul_retval],
160 [
161 dnl Initial guess, used when cross-compiling or when no suitable locale
162 dnl is present.
163changequote(,)dnl
164 case "$host_os" in
165 # Guess no on Solaris 9.
166 solaris2.9) gl_cv_func_mbrlen_nul_retval="guessing no" ;;
167 # Guess yes otherwise.
168 *) gl_cv_func_mbrlen_nul_retval="guessing yes" ;;
169 esac
170changequote([,])dnl
171 if test $LOCALE_ZH_CN != none; then
9157d901
LC
172 AC_RUN_IFELSE(
173 [AC_LANG_SOURCE([[
bfb18ff0
NJ
174#include <locale.h>
175#include <string.h>
176#include <wchar.h>
177int main ()
178{
179 /* This crashes on Solaris 9 inside __mbrtowc_dense_gb18030. */
180 if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
181 {
182 mbstate_t state;
183
184 memset (&state, '\0', sizeof (mbstate_t));
185 if (mbrlen ("", 1, &state) != 0)
186 return 1;
187 }
188 return 0;
9157d901 189}]])],
bfb18ff0
NJ
190 [gl_cv_func_mbrlen_nul_retval=yes],
191 [gl_cv_func_mbrlen_nul_retval=no],
192 [])
193 fi
194 ])
195])
196
197# Prerequisites of lib/mbrlen.c.
198AC_DEFUN([gl_PREREQ_MBRLEN], [
199 :
200])