1
dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
3
dnl Copyright (C) 2007-2014 Free Software Foundation, Inc.
4
dnl This file is free software; the Free Software Foundation
5
dnl gives unlimited permission to copy and/or distribute it,
6
dnl with or without modifications, as long as this notice is preserved.
8
dnl Written by Eric Blake.
10
# wchar_h.m4 serial 39
12
AC_DEFUN([gl_WCHAR_H],
14
AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
15
AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
16
dnl Prepare for creating substitute <wchar.h>.
17
dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
18
dnl character support).
19
dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK.
20
gl_CHECK_NEXT_HEADERS([wchar.h])
21
if test $ac_cv_header_wchar_h = yes; then
26
AC_SUBST([HAVE_WCHAR_H])
28
AC_REQUIRE([gl_FEATURES_H])
30
AC_REQUIRE([gt_TYPE_WINT_T])
31
if test $gt_cv_c_wint_t = yes; then
36
AC_SUBST([HAVE_WINT_T])
38
dnl Check for declarations of anything we want to poison if the
39
dnl corresponding gnulib module is not in use.
40
gl_WARN_ON_USE_PREPARE([[
41
/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
43
BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
44
included before <wchar.h>. */
45
#if !(defined __GLIBC__ && !defined __UCLIBC__)
52
[btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb
53
wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset
54
wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp
55
wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr
56
wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth
60
dnl Check whether <wchar.h> is usable at all.
61
AC_DEFUN([gl_WCHAR_H_INLINE_OK],
63
dnl Test whether <wchar.h> suffers due to the transition from '__inline' to
64
dnl 'gnu_inline'. See <http://sourceware.org/bugzilla/show_bug.cgi?id=4022>
65
dnl and <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary,
66
dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and
67
dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>.
68
AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly],
69
[gl_cv_header_wchar_h_correct_inline],
70
[gl_cv_header_wchar_h_correct_inline=yes
72
AC_LANG_SOURCE([[#define wcstod renamed_wcstod
73
/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
75
BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
76
included before <wchar.h>. */
81
extern int zero (void);
82
int main () { return zero(); }
84
if AC_TRY_EVAL([ac_compile]); then
85
mv conftest.$ac_objext conftest1.$ac_objext
87
AC_LANG_SOURCE([[#define wcstod renamed_wcstod
88
/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
90
BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
91
included before <wchar.h>. */
96
int zero (void) { return 0; }
98
if AC_TRY_EVAL([ac_compile]); then
99
mv conftest.$ac_objext conftest2.$ac_objext
100
if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then
103
gl_cv_header_wchar_h_correct_inline=no
107
rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
109
if test $gl_cv_header_wchar_h_correct_inline = no; then
110
AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
111
This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
112
C99 mode. You have four options:
113
- Add the flag -fgnu89-inline to CC and reconfigure, or
114
- Fix your include files, using parts of
115
<http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
116
- Use a gcc version older than 4.3, or
117
- Don't use the flags -std=c99 or -std=gnu99.
118
Configuration aborted.])
122
AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
124
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
125
AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
126
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
127
dnl Define it also as a C macro, for the benefit of the unit tests.
128
gl_MODULE_INDICATOR_FOR_TESTS([$1])
131
AC_DEFUN([gl_WCHAR_H_DEFAULTS],
133
GNULIB_BTOWC=0; AC_SUBST([GNULIB_BTOWC])
134
GNULIB_WCTOB=0; AC_SUBST([GNULIB_WCTOB])
135
GNULIB_MBSINIT=0; AC_SUBST([GNULIB_MBSINIT])
136
GNULIB_MBRTOWC=0; AC_SUBST([GNULIB_MBRTOWC])
137
GNULIB_MBRLEN=0; AC_SUBST([GNULIB_MBRLEN])
138
GNULIB_MBSRTOWCS=0; AC_SUBST([GNULIB_MBSRTOWCS])
139
GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS])
140
GNULIB_WCRTOMB=0; AC_SUBST([GNULIB_WCRTOMB])
141
GNULIB_WCSRTOMBS=0; AC_SUBST([GNULIB_WCSRTOMBS])
142
GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS])
143
GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH])
144
GNULIB_WMEMCHR=0; AC_SUBST([GNULIB_WMEMCHR])
145
GNULIB_WMEMCMP=0; AC_SUBST([GNULIB_WMEMCMP])
146
GNULIB_WMEMCPY=0; AC_SUBST([GNULIB_WMEMCPY])
147
GNULIB_WMEMMOVE=0; AC_SUBST([GNULIB_WMEMMOVE])
148
GNULIB_WMEMSET=0; AC_SUBST([GNULIB_WMEMSET])
149
GNULIB_WCSLEN=0; AC_SUBST([GNULIB_WCSLEN])
150
GNULIB_WCSNLEN=0; AC_SUBST([GNULIB_WCSNLEN])
151
GNULIB_WCSCPY=0; AC_SUBST([GNULIB_WCSCPY])
152
GNULIB_WCPCPY=0; AC_SUBST([GNULIB_WCPCPY])
153
GNULIB_WCSNCPY=0; AC_SUBST([GNULIB_WCSNCPY])
154
GNULIB_WCPNCPY=0; AC_SUBST([GNULIB_WCPNCPY])
155
GNULIB_WCSCAT=0; AC_SUBST([GNULIB_WCSCAT])
156
GNULIB_WCSNCAT=0; AC_SUBST([GNULIB_WCSNCAT])
157
GNULIB_WCSCMP=0; AC_SUBST([GNULIB_WCSCMP])
158
GNULIB_WCSNCMP=0; AC_SUBST([GNULIB_WCSNCMP])
159
GNULIB_WCSCASECMP=0; AC_SUBST([GNULIB_WCSCASECMP])
160
GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP])
161
GNULIB_WCSCOLL=0; AC_SUBST([GNULIB_WCSCOLL])
162
GNULIB_WCSXFRM=0; AC_SUBST([GNULIB_WCSXFRM])
163
GNULIB_WCSDUP=0; AC_SUBST([GNULIB_WCSDUP])
164
GNULIB_WCSCHR=0; AC_SUBST([GNULIB_WCSCHR])
165
GNULIB_WCSRCHR=0; AC_SUBST([GNULIB_WCSRCHR])
166
GNULIB_WCSCSPN=0; AC_SUBST([GNULIB_WCSCSPN])
167
GNULIB_WCSSPN=0; AC_SUBST([GNULIB_WCSSPN])
168
GNULIB_WCSPBRK=0; AC_SUBST([GNULIB_WCSPBRK])
169
GNULIB_WCSSTR=0; AC_SUBST([GNULIB_WCSSTR])
170
GNULIB_WCSTOK=0; AC_SUBST([GNULIB_WCSTOK])
171
GNULIB_WCSWIDTH=0; AC_SUBST([GNULIB_WCSWIDTH])
172
dnl Assume proper GNU behavior unless another module says otherwise.
173
HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC])
174
HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT])
175
HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC])
176
HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN])
177
HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS])
178
HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS])
179
HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB])
180
HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS])
181
HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS])
182
HAVE_WMEMCHR=1; AC_SUBST([HAVE_WMEMCHR])
183
HAVE_WMEMCMP=1; AC_SUBST([HAVE_WMEMCMP])
184
HAVE_WMEMCPY=1; AC_SUBST([HAVE_WMEMCPY])
185
HAVE_WMEMMOVE=1; AC_SUBST([HAVE_WMEMMOVE])
186
HAVE_WMEMSET=1; AC_SUBST([HAVE_WMEMSET])
187
HAVE_WCSLEN=1; AC_SUBST([HAVE_WCSLEN])
188
HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN])
189
HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY])
190
HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY])
191
HAVE_WCSNCPY=1; AC_SUBST([HAVE_WCSNCPY])
192
HAVE_WCPNCPY=1; AC_SUBST([HAVE_WCPNCPY])
193
HAVE_WCSCAT=1; AC_SUBST([HAVE_WCSCAT])
194
HAVE_WCSNCAT=1; AC_SUBST([HAVE_WCSNCAT])
195
HAVE_WCSCMP=1; AC_SUBST([HAVE_WCSCMP])
196
HAVE_WCSNCMP=1; AC_SUBST([HAVE_WCSNCMP])
197
HAVE_WCSCASECMP=1; AC_SUBST([HAVE_WCSCASECMP])
198
HAVE_WCSNCASECMP=1; AC_SUBST([HAVE_WCSNCASECMP])
199
HAVE_WCSCOLL=1; AC_SUBST([HAVE_WCSCOLL])
200
HAVE_WCSXFRM=1; AC_SUBST([HAVE_WCSXFRM])
201
HAVE_WCSDUP=1; AC_SUBST([HAVE_WCSDUP])
202
HAVE_WCSCHR=1; AC_SUBST([HAVE_WCSCHR])
203
HAVE_WCSRCHR=1; AC_SUBST([HAVE_WCSRCHR])
204
HAVE_WCSCSPN=1; AC_SUBST([HAVE_WCSCSPN])
205
HAVE_WCSSPN=1; AC_SUBST([HAVE_WCSSPN])
206
HAVE_WCSPBRK=1; AC_SUBST([HAVE_WCSPBRK])
207
HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR])
208
HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK])
209
HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH])
210
HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB])
211
HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH])
212
REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T])
213
REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC])
214
REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB])
215
REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT])
216
REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC])
217
REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN])
218
REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS])
219
REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS])
220
REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB])
221
REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS])
222
REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS])
223
REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH])
224
REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH])