~andreserl/+junk/hello

« back to all changes in this revision

Viewing changes to m4/wchar_h.m4

  • Committer: Andres Rodriguez
  • Date: 2018-08-01 21:44:17 UTC
  • Revision ID: andreserl@ubuntu.com-20180801214417-qhsiz01t83w7x0fn
Initial

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
 
2
 
 
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.
 
7
 
 
8
dnl Written by Eric Blake.
 
9
 
 
10
# wchar_h.m4 serial 39
 
11
 
 
12
AC_DEFUN([gl_WCHAR_H],
 
13
[
 
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
 
22
    HAVE_WCHAR_H=1
 
23
  else
 
24
    HAVE_WCHAR_H=0
 
25
  fi
 
26
  AC_SUBST([HAVE_WCHAR_H])
 
27
 
 
28
  AC_REQUIRE([gl_FEATURES_H])
 
29
 
 
30
  AC_REQUIRE([gt_TYPE_WINT_T])
 
31
  if test $gt_cv_c_wint_t = yes; then
 
32
    HAVE_WINT_T=1
 
33
  else
 
34
    HAVE_WINT_T=0
 
35
  fi
 
36
  AC_SUBST([HAVE_WINT_T])
 
37
 
 
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
 
42
   <wchar.h>.
 
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__)
 
46
# include <stddef.h>
 
47
# include <stdio.h>
 
48
# include <time.h>
 
49
#endif
 
50
#include <wchar.h>
 
51
    ]],
 
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
 
57
    ])
 
58
])
 
59
 
 
60
dnl Check whether <wchar.h> is usable at all.
 
61
AC_DEFUN([gl_WCHAR_H_INLINE_OK],
 
62
[
 
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
 
71
     AC_LANG_CONFTEST([
 
72
       AC_LANG_SOURCE([[#define wcstod renamed_wcstod
 
73
/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
 
74
   <wchar.h>.
 
75
   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
 
76
   included before <wchar.h>.  */
 
77
#include <stddef.h>
 
78
#include <stdio.h>
 
79
#include <time.h>
 
80
#include <wchar.h>
 
81
extern int zero (void);
 
82
int main () { return zero(); }
 
83
]])])
 
84
     if AC_TRY_EVAL([ac_compile]); then
 
85
       mv conftest.$ac_objext conftest1.$ac_objext
 
86
       AC_LANG_CONFTEST([
 
87
         AC_LANG_SOURCE([[#define wcstod renamed_wcstod
 
88
/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
 
89
   <wchar.h>.
 
90
   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
 
91
   included before <wchar.h>.  */
 
92
#include <stddef.h>
 
93
#include <stdio.h>
 
94
#include <time.h>
 
95
#include <wchar.h>
 
96
int zero (void) { return 0; }
 
97
]])])
 
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
 
101
           :
 
102
         else
 
103
           gl_cv_header_wchar_h_correct_inline=no
 
104
         fi
 
105
       fi
 
106
     fi
 
107
     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
 
108
    ])
 
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.])
 
119
  fi
 
120
])
 
121
 
 
122
AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
 
123
[
 
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])
 
129
])
 
130
 
 
131
AC_DEFUN([gl_WCHAR_H_DEFAULTS],
 
132
[
 
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])
 
225
])