434
|
1 # printf.m4 serial 33
|
|
2 dnl Copyright (C) 2003, 2007-2010 Free Software Foundation, Inc.
|
|
3 dnl This file is free software; the Free Software Foundation
|
|
4 dnl gives unlimited permission to copy and/or distribute it,
|
|
5 dnl with or without modifications, as long as this notice is preserved.
|
|
6
|
|
7 dnl Test whether the *printf family of functions supports the 'j', 'z', 't',
|
|
8 dnl 'L' size specifiers. (ISO C99, POSIX:2001)
|
|
9 dnl Result is gl_cv_func_printf_sizes_c99.
|
|
10
|
|
11 AC_DEFUN([gl_PRINTF_SIZES_C99],
|
|
12 [
|
|
13 AC_REQUIRE([AC_PROG_CC])
|
|
14 AC_REQUIRE([gl_AC_HEADER_STDINT_H])
|
|
15 AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
|
|
16 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
17 AC_CACHE_CHECK([whether printf supports size specifiers as in C99],
|
|
18 [gl_cv_func_printf_sizes_c99],
|
|
19 [
|
|
20 AC_TRY_RUN([
|
|
21 #include <stddef.h>
|
|
22 #include <stdio.h>
|
|
23 #include <string.h>
|
|
24 #include <sys/types.h>
|
|
25 #if HAVE_STDINT_H_WITH_UINTMAX
|
|
26 # include <stdint.h>
|
|
27 #endif
|
|
28 #if HAVE_INTTYPES_H_WITH_UINTMAX
|
|
29 # include <inttypes.h>
|
|
30 #endif
|
|
31 static char buf[100];
|
|
32 int main ()
|
|
33 {
|
|
34 #if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX
|
|
35 buf[0] = '\0';
|
|
36 if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0
|
|
37 || strcmp (buf, "12345671 33") != 0)
|
|
38 return 1;
|
|
39 #endif
|
|
40 buf[0] = '\0';
|
|
41 if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0
|
|
42 || strcmp (buf, "12345672 33") != 0)
|
|
43 return 1;
|
|
44 buf[0] = '\0';
|
|
45 if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0
|
|
46 || strcmp (buf, "12345673 33") != 0)
|
|
47 return 1;
|
|
48 buf[0] = '\0';
|
|
49 if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0
|
|
50 || strcmp (buf, "1.5 33") != 0)
|
|
51 return 1;
|
|
52 return 0;
|
|
53 }], [gl_cv_func_printf_sizes_c99=yes], [gl_cv_func_printf_sizes_c99=no],
|
|
54 [
|
|
55 changequote(,)dnl
|
|
56 case "$host_os" in
|
|
57 # Guess yes on glibc systems.
|
|
58 *-gnu*) gl_cv_func_printf_sizes_c99="guessing yes";;
|
|
59 # Guess yes on FreeBSD >= 5.
|
|
60 freebsd[1-4]*) gl_cv_func_printf_sizes_c99="guessing no";;
|
|
61 freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";;
|
|
62 # Guess yes on MacOS X >= 10.3.
|
|
63 darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";;
|
|
64 darwin*) gl_cv_func_printf_sizes_c99="guessing yes";;
|
|
65 # Guess yes on OpenBSD >= 3.9.
|
|
66 openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
|
|
67 gl_cv_func_printf_sizes_c99="guessing no";;
|
|
68 openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";;
|
|
69 # Guess yes on Solaris >= 2.10.
|
|
70 solaris2.[0-9]*) gl_cv_func_printf_sizes_c99="guessing no";;
|
|
71 solaris*) gl_cv_func_printf_sizes_c99="guessing yes";;
|
|
72 # Guess yes on NetBSD >= 3.
|
|
73 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
|
|
74 gl_cv_func_printf_sizes_c99="guessing no";;
|
|
75 netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";;
|
|
76 # If we don't know, assume the worst.
|
|
77 *) gl_cv_func_printf_sizes_c99="guessing no";;
|
|
78 esac
|
|
79 changequote([,])dnl
|
|
80 ])
|
|
81 ])
|
|
82 ])
|
|
83
|
|
84 dnl Test whether the *printf family of functions supports 'long double'
|
|
85 dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001)
|
|
86 dnl Result is gl_cv_func_printf_long_double.
|
|
87
|
|
88 AC_DEFUN([gl_PRINTF_LONG_DOUBLE],
|
|
89 [
|
|
90 AC_REQUIRE([AC_PROG_CC])
|
|
91 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
92 AC_CACHE_CHECK([whether printf supports 'long double' arguments],
|
|
93 [gl_cv_func_printf_long_double],
|
|
94 [
|
|
95 AC_TRY_RUN([
|
|
96 #include <stdio.h>
|
|
97 #include <string.h>
|
|
98 static char buf[10000];
|
|
99 int main ()
|
|
100 {
|
|
101 buf[0] = '\0';
|
|
102 if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0
|
|
103 || strcmp (buf, "1.750000 33") != 0)
|
|
104 return 1;
|
|
105 buf[0] = '\0';
|
|
106 if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0
|
|
107 || strcmp (buf, "1.750000e+00 33") != 0)
|
|
108 return 1;
|
|
109 buf[0] = '\0';
|
|
110 if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0
|
|
111 || strcmp (buf, "1.75 33") != 0)
|
|
112 return 1;
|
|
113 return 0;
|
|
114 }], [gl_cv_func_printf_long_double=yes], [gl_cv_func_printf_long_double=no],
|
|
115 [
|
|
116 changequote(,)dnl
|
|
117 case "$host_os" in
|
|
118 beos*) gl_cv_func_printf_long_double="guessing no";;
|
|
119 mingw* | pw*) gl_cv_func_printf_long_double="guessing no";;
|
|
120 *) gl_cv_func_printf_long_double="guessing yes";;
|
|
121 esac
|
|
122 changequote([,])dnl
|
|
123 ])
|
|
124 ])
|
|
125 ])
|
|
126
|
|
127 dnl Test whether the *printf family of functions supports infinite and NaN
|
|
128 dnl 'double' arguments and negative zero arguments in the %f, %e, %g
|
|
129 dnl directives. (ISO C99, POSIX:2001)
|
|
130 dnl Result is gl_cv_func_printf_infinite.
|
|
131
|
|
132 AC_DEFUN([gl_PRINTF_INFINITE],
|
|
133 [
|
|
134 AC_REQUIRE([AC_PROG_CC])
|
|
135 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
136 AC_CACHE_CHECK([whether printf supports infinite 'double' arguments],
|
|
137 [gl_cv_func_printf_infinite],
|
|
138 [
|
|
139 AC_TRY_RUN([
|
|
140 #include <stdio.h>
|
|
141 #include <string.h>
|
|
142 static int
|
|
143 strisnan (const char *string, size_t start_index, size_t end_index)
|
|
144 {
|
|
145 if (start_index < end_index)
|
|
146 {
|
|
147 if (string[start_index] == '-')
|
|
148 start_index++;
|
|
149 if (start_index + 3 <= end_index
|
|
150 && memcmp (string + start_index, "nan", 3) == 0)
|
|
151 {
|
|
152 start_index += 3;
|
|
153 if (start_index == end_index
|
|
154 || (string[start_index] == '(' && string[end_index - 1] == ')'))
|
|
155 return 1;
|
|
156 }
|
|
157 }
|
|
158 return 0;
|
|
159 }
|
|
160 static int
|
|
161 have_minus_zero ()
|
|
162 {
|
|
163 static double plus_zero = 0.0;
|
|
164 double minus_zero = - plus_zero;
|
|
165 return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0;
|
|
166 }
|
|
167 static char buf[10000];
|
|
168 static double zero = 0.0;
|
|
169 int main ()
|
|
170 {
|
|
171 if (sprintf (buf, "%f", 1.0 / 0.0) < 0
|
|
172 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
|
|
173 return 1;
|
|
174 if (sprintf (buf, "%f", -1.0 / 0.0) < 0
|
|
175 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
|
|
176 return 1;
|
|
177 if (sprintf (buf, "%f", zero / zero) < 0
|
|
178 || !strisnan (buf, 0, strlen (buf)))
|
|
179 return 1;
|
|
180 if (sprintf (buf, "%e", 1.0 / 0.0) < 0
|
|
181 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
|
|
182 return 1;
|
|
183 if (sprintf (buf, "%e", -1.0 / 0.0) < 0
|
|
184 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
|
|
185 return 1;
|
|
186 if (sprintf (buf, "%e", zero / zero) < 0
|
|
187 || !strisnan (buf, 0, strlen (buf)))
|
|
188 return 1;
|
|
189 if (sprintf (buf, "%g", 1.0 / 0.0) < 0
|
|
190 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
|
|
191 return 1;
|
|
192 if (sprintf (buf, "%g", -1.0 / 0.0) < 0
|
|
193 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
|
|
194 return 1;
|
|
195 if (sprintf (buf, "%g", zero / zero) < 0
|
|
196 || !strisnan (buf, 0, strlen (buf)))
|
|
197 return 1;
|
|
198 /* This test fails on HP-UX 10.20. */
|
|
199 if (have_minus_zero ())
|
|
200 if (sprintf (buf, "%g", - zero) < 0
|
|
201 || strcmp (buf, "-0") != 0)
|
|
202 return 1;
|
|
203 return 0;
|
|
204 }], [gl_cv_func_printf_infinite=yes], [gl_cv_func_printf_infinite=no],
|
|
205 [
|
|
206 changequote(,)dnl
|
|
207 case "$host_os" in
|
|
208 # Guess yes on glibc systems.
|
|
209 *-gnu*) gl_cv_func_printf_infinite="guessing yes";;
|
|
210 # Guess yes on FreeBSD >= 6.
|
|
211 freebsd[1-5]*) gl_cv_func_printf_infinite="guessing no";;
|
|
212 freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";;
|
|
213 # Guess yes on MacOS X >= 10.3.
|
|
214 darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";;
|
|
215 darwin*) gl_cv_func_printf_infinite="guessing yes";;
|
|
216 # Guess yes on HP-UX >= 11.
|
|
217 hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";;
|
|
218 hpux*) gl_cv_func_printf_infinite="guessing yes";;
|
|
219 # Guess yes on NetBSD >= 3.
|
|
220 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
|
|
221 gl_cv_func_printf_infinite="guessing no";;
|
|
222 netbsd*) gl_cv_func_printf_infinite="guessing yes";;
|
|
223 # Guess yes on BeOS.
|
|
224 beos*) gl_cv_func_printf_infinite="guessing yes";;
|
|
225 # If we don't know, assume the worst.
|
|
226 *) gl_cv_func_printf_infinite="guessing no";;
|
|
227 esac
|
|
228 changequote([,])dnl
|
|
229 ])
|
|
230 ])
|
|
231 ])
|
|
232
|
|
233 dnl Test whether the *printf family of functions supports infinite and NaN
|
|
234 dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001)
|
|
235 dnl Result is gl_cv_func_printf_infinite_long_double.
|
|
236
|
|
237 AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE],
|
|
238 [
|
|
239 AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
|
|
240 AC_REQUIRE([AC_PROG_CC])
|
|
241 AC_REQUIRE([gl_BIGENDIAN])
|
|
242 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
243 dnl The user can set or unset the variable gl_printf_safe to indicate
|
|
244 dnl that he wishes a safe handling of non-IEEE-754 'long double' values.
|
|
245 if test -n "$gl_printf_safe"; then
|
|
246 AC_DEFINE([CHECK_PRINTF_SAFE], [1],
|
|
247 [Define if you wish *printf() functions that have a safe handling of
|
|
248 non-IEEE-754 'long double' values.])
|
|
249 fi
|
|
250 case "$gl_cv_func_printf_long_double" in
|
|
251 *yes)
|
|
252 AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments],
|
|
253 [gl_cv_func_printf_infinite_long_double],
|
|
254 [
|
|
255 AC_TRY_RUN([
|
|
256 ]GL_NOCRASH[
|
|
257 #include <float.h>
|
|
258 #include <stdio.h>
|
|
259 #include <string.h>
|
|
260 static int
|
|
261 strisnan (const char *string, size_t start_index, size_t end_index)
|
|
262 {
|
|
263 if (start_index < end_index)
|
|
264 {
|
|
265 if (string[start_index] == '-')
|
|
266 start_index++;
|
|
267 if (start_index + 3 <= end_index
|
|
268 && memcmp (string + start_index, "nan", 3) == 0)
|
|
269 {
|
|
270 start_index += 3;
|
|
271 if (start_index == end_index
|
|
272 || (string[start_index] == '(' && string[end_index - 1] == ')'))
|
|
273 return 1;
|
|
274 }
|
|
275 }
|
|
276 return 0;
|
|
277 }
|
|
278 static char buf[10000];
|
|
279 static long double zeroL = 0.0L;
|
|
280 int main ()
|
|
281 {
|
|
282 nocrash_init();
|
|
283 if (sprintf (buf, "%Lf", 1.0L / 0.0L) < 0
|
|
284 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
|
|
285 return 1;
|
|
286 if (sprintf (buf, "%Lf", -1.0L / 0.0L) < 0
|
|
287 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
|
|
288 return 1;
|
|
289 if (sprintf (buf, "%Lf", zeroL / zeroL) < 0
|
|
290 || !strisnan (buf, 0, strlen (buf)))
|
|
291 return 1;
|
|
292 if (sprintf (buf, "%Le", 1.0L / 0.0L) < 0
|
|
293 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
|
|
294 return 1;
|
|
295 if (sprintf (buf, "%Le", -1.0L / 0.0L) < 0
|
|
296 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
|
|
297 return 1;
|
|
298 if (sprintf (buf, "%Le", zeroL / zeroL) < 0
|
|
299 || !strisnan (buf, 0, strlen (buf)))
|
|
300 return 1;
|
|
301 if (sprintf (buf, "%Lg", 1.0L / 0.0L) < 0
|
|
302 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
|
|
303 return 1;
|
|
304 if (sprintf (buf, "%Lg", -1.0L / 0.0L) < 0
|
|
305 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
|
|
306 return 1;
|
|
307 if (sprintf (buf, "%Lg", zeroL / zeroL) < 0
|
|
308 || !strisnan (buf, 0, strlen (buf)))
|
|
309 return 1;
|
|
310 #if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_))
|
|
311 /* Representation of an 80-bit 'long double' as an initializer for a sequence
|
|
312 of 'unsigned int' words. */
|
|
313 # ifdef WORDS_BIGENDIAN
|
|
314 # define LDBL80_WORDS(exponent,manthi,mantlo) \
|
|
315 { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
|
|
316 ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \
|
|
317 (unsigned int) (mantlo) << 16 \
|
|
318 }
|
|
319 # else
|
|
320 # define LDBL80_WORDS(exponent,manthi,mantlo) \
|
|
321 { mantlo, manthi, exponent }
|
|
322 # endif
|
|
323 { /* Quiet NaN. */
|
|
324 static union { unsigned int word[4]; long double value; } x =
|
|
325 { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
|
|
326 if (sprintf (buf, "%Lf", x.value) < 0
|
|
327 || !strisnan (buf, 0, strlen (buf)))
|
|
328 return 1;
|
|
329 if (sprintf (buf, "%Le", x.value) < 0
|
|
330 || !strisnan (buf, 0, strlen (buf)))
|
|
331 return 1;
|
|
332 if (sprintf (buf, "%Lg", x.value) < 0
|
|
333 || !strisnan (buf, 0, strlen (buf)))
|
|
334 return 1;
|
|
335 }
|
|
336 {
|
|
337 /* Signalling NaN. */
|
|
338 static union { unsigned int word[4]; long double value; } x =
|
|
339 { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
|
|
340 if (sprintf (buf, "%Lf", x.value) < 0
|
|
341 || !strisnan (buf, 0, strlen (buf)))
|
|
342 return 1;
|
|
343 if (sprintf (buf, "%Le", x.value) < 0
|
|
344 || !strisnan (buf, 0, strlen (buf)))
|
|
345 return 1;
|
|
346 if (sprintf (buf, "%Lg", x.value) < 0
|
|
347 || !strisnan (buf, 0, strlen (buf)))
|
|
348 return 1;
|
|
349 }
|
|
350 { /* Pseudo-NaN. */
|
|
351 static union { unsigned int word[4]; long double value; } x =
|
|
352 { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
|
|
353 if (sprintf (buf, "%Lf", x.value) < 0
|
|
354 || !strisnan (buf, 0, strlen (buf)))
|
|
355 return 1;
|
|
356 if (sprintf (buf, "%Le", x.value) < 0
|
|
357 || !strisnan (buf, 0, strlen (buf)))
|
|
358 return 1;
|
|
359 if (sprintf (buf, "%Lg", x.value) < 0
|
|
360 || !strisnan (buf, 0, strlen (buf)))
|
|
361 return 1;
|
|
362 }
|
|
363 { /* Pseudo-Infinity. */
|
|
364 static union { unsigned int word[4]; long double value; } x =
|
|
365 { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
|
|
366 if (sprintf (buf, "%Lf", x.value) < 0
|
|
367 || !strisnan (buf, 0, strlen (buf)))
|
|
368 return 1;
|
|
369 if (sprintf (buf, "%Le", x.value) < 0
|
|
370 || !strisnan (buf, 0, strlen (buf)))
|
|
371 return 1;
|
|
372 if (sprintf (buf, "%Lg", x.value) < 0
|
|
373 || !strisnan (buf, 0, strlen (buf)))
|
|
374 return 1;
|
|
375 }
|
|
376 { /* Pseudo-Zero. */
|
|
377 static union { unsigned int word[4]; long double value; } x =
|
|
378 { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
|
|
379 if (sprintf (buf, "%Lf", x.value) < 0
|
|
380 || !strisnan (buf, 0, strlen (buf)))
|
|
381 return 1;
|
|
382 if (sprintf (buf, "%Le", x.value) < 0
|
|
383 || !strisnan (buf, 0, strlen (buf)))
|
|
384 return 1;
|
|
385 if (sprintf (buf, "%Lg", x.value) < 0
|
|
386 || !strisnan (buf, 0, strlen (buf)))
|
|
387 return 1;
|
|
388 }
|
|
389 { /* Unnormalized number. */
|
|
390 static union { unsigned int word[4]; long double value; } x =
|
|
391 { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
|
|
392 if (sprintf (buf, "%Lf", x.value) < 0
|
|
393 || !strisnan (buf, 0, strlen (buf)))
|
|
394 return 1;
|
|
395 if (sprintf (buf, "%Le", x.value) < 0
|
|
396 || !strisnan (buf, 0, strlen (buf)))
|
|
397 return 1;
|
|
398 if (sprintf (buf, "%Lg", x.value) < 0
|
|
399 || !strisnan (buf, 0, strlen (buf)))
|
|
400 return 1;
|
|
401 }
|
|
402 { /* Pseudo-Denormal. */
|
|
403 static union { unsigned int word[4]; long double value; } x =
|
|
404 { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
|
|
405 if (sprintf (buf, "%Lf", x.value) < 0
|
|
406 || !strisnan (buf, 0, strlen (buf)))
|
|
407 return 1;
|
|
408 if (sprintf (buf, "%Le", x.value) < 0
|
|
409 || !strisnan (buf, 0, strlen (buf)))
|
|
410 return 1;
|
|
411 if (sprintf (buf, "%Lg", x.value) < 0
|
|
412 || !strisnan (buf, 0, strlen (buf)))
|
|
413 return 1;
|
|
414 }
|
|
415 #endif
|
|
416 return 0;
|
|
417 }],
|
|
418 [gl_cv_func_printf_infinite_long_double=yes],
|
|
419 [gl_cv_func_printf_infinite_long_double=no],
|
|
420 [
|
|
421 changequote(,)dnl
|
|
422 case "$host_cpu" in
|
|
423 # Guess no on ia64, x86_64, i386.
|
|
424 ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";;
|
|
425 *)
|
|
426 case "$host_os" in
|
|
427 # Guess yes on glibc systems.
|
|
428 *-gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";;
|
|
429 # Guess yes on FreeBSD >= 6.
|
|
430 freebsd[1-5]*) gl_cv_func_printf_infinite_long_double="guessing no";;
|
|
431 freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";;
|
|
432 # Guess yes on MacOS X >= 10.3.
|
|
433 darwin[1-6].*) gl_cv_func_printf_infinite_long_double="guessing no";;
|
|
434 darwin*) gl_cv_func_printf_infinite_long_double="guessing yes";;
|
|
435 # Guess yes on HP-UX >= 11.
|
|
436 hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";;
|
|
437 hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";;
|
|
438 # Guess yes on NetBSD >= 3.
|
|
439 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
|
|
440 gl_cv_func_printf_infinite_long_double="guessing no";;
|
|
441 netbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";;
|
|
442 # If we don't know, assume the worst.
|
|
443 *) gl_cv_func_printf_infinite_long_double="guessing no";;
|
|
444 esac
|
|
445 ;;
|
|
446 esac
|
|
447 changequote([,])dnl
|
|
448 ])
|
|
449 ])
|
|
450 ;;
|
|
451 *)
|
|
452 gl_cv_func_printf_infinite_long_double="irrelevant"
|
|
453 ;;
|
|
454 esac
|
|
455 ])
|
|
456
|
|
457 dnl Test whether the *printf family of functions supports the 'a' and 'A'
|
|
458 dnl conversion specifier for hexadecimal output of floating-point numbers.
|
|
459 dnl (ISO C99, POSIX:2001)
|
|
460 dnl Result is gl_cv_func_printf_directive_a.
|
|
461
|
|
462 AC_DEFUN([gl_PRINTF_DIRECTIVE_A],
|
|
463 [
|
|
464 AC_REQUIRE([AC_PROG_CC])
|
|
465 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
466 AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives],
|
|
467 [gl_cv_func_printf_directive_a],
|
|
468 [
|
|
469 AC_TRY_RUN([
|
|
470 #include <stdio.h>
|
|
471 #include <string.h>
|
|
472 static char buf[100];
|
|
473 int main ()
|
|
474 {
|
|
475 if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0
|
|
476 || (strcmp (buf, "0x1.922p+1 33") != 0
|
|
477 && strcmp (buf, "0x3.244p+0 33") != 0
|
|
478 && strcmp (buf, "0x6.488p-1 33") != 0
|
|
479 && strcmp (buf, "0xc.91p-2 33") != 0))
|
|
480 return 1;
|
|
481 if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0
|
|
482 || (strcmp (buf, "-0X1.922P+1 33") != 0
|
|
483 && strcmp (buf, "-0X3.244P+0 33") != 0
|
|
484 && strcmp (buf, "-0X6.488P-1 33") != 0
|
|
485 && strcmp (buf, "-0XC.91P-2 33") != 0))
|
|
486 return 1;
|
|
487 /* This catches a FreeBSD 6.1 bug: it doesn't round. */
|
|
488 if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0
|
|
489 || (strcmp (buf, "0x1.83p+0 33") != 0
|
|
490 && strcmp (buf, "0x3.05p-1 33") != 0
|
|
491 && strcmp (buf, "0x6.0ap-2 33") != 0
|
|
492 && strcmp (buf, "0xc.14p-3 33") != 0))
|
|
493 return 1;
|
|
494 /* This catches a FreeBSD 6.1 bug. See
|
|
495 <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
|
|
496 if (sprintf (buf, "%010a %d", 1.0 / 0.0, 33, 44, 55) < 0
|
|
497 || buf[0] == '0')
|
|
498 return 1;
|
|
499 /* This catches a MacOS X 10.3.9 (Darwin 7.9) bug. */
|
|
500 if (sprintf (buf, "%.1a", 1.999) < 0
|
|
501 || (strcmp (buf, "0x1.0p+1") != 0
|
|
502 && strcmp (buf, "0x2.0p+0") != 0
|
|
503 && strcmp (buf, "0x4.0p-1") != 0
|
|
504 && strcmp (buf, "0x8.0p-2") != 0))
|
|
505 return 1;
|
|
506 /* This catches the same MacOS X 10.3.9 (Darwin 7.9) bug and also a
|
|
507 glibc 2.4 bug <http://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */
|
|
508 if (sprintf (buf, "%.1La", 1.999L) < 0
|
|
509 || (strcmp (buf, "0x1.0p+1") != 0
|
|
510 && strcmp (buf, "0x2.0p+0") != 0
|
|
511 && strcmp (buf, "0x4.0p-1") != 0
|
|
512 && strcmp (buf, "0x8.0p-2") != 0))
|
|
513 return 1;
|
|
514 return 0;
|
|
515 }], [gl_cv_func_printf_directive_a=yes], [gl_cv_func_printf_directive_a=no],
|
|
516 [
|
|
517 case "$host_os" in
|
|
518 # Guess yes on glibc >= 2.5 systems.
|
|
519 *-gnu*)
|
|
520 AC_EGREP_CPP([BZ2908], [
|
|
521 #include <features.h>
|
|
522 #ifdef __GNU_LIBRARY__
|
|
523 #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)
|
|
524 BZ2908
|
|
525 #endif
|
|
526 #endif
|
|
527 ],
|
|
528 [gl_cv_func_printf_directive_a="guessing yes"],
|
|
529 [gl_cv_func_printf_directive_a="guessing no"])
|
|
530 ;;
|
|
531 # If we don't know, assume the worst.
|
|
532 *) gl_cv_func_printf_directive_a="guessing no";;
|
|
533 esac
|
|
534 ])
|
|
535 ])
|
|
536 ])
|
|
537
|
|
538 dnl Test whether the *printf family of functions supports the %F format
|
|
539 dnl directive. (ISO C99, POSIX:2001)
|
|
540 dnl Result is gl_cv_func_printf_directive_f.
|
|
541
|
|
542 AC_DEFUN([gl_PRINTF_DIRECTIVE_F],
|
|
543 [
|
|
544 AC_REQUIRE([AC_PROG_CC])
|
|
545 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
546 AC_CACHE_CHECK([whether printf supports the 'F' directive],
|
|
547 [gl_cv_func_printf_directive_f],
|
|
548 [
|
|
549 AC_TRY_RUN([
|
|
550 #include <stdio.h>
|
|
551 #include <string.h>
|
|
552 static char buf[100];
|
|
553 int main ()
|
|
554 {
|
|
555 if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0
|
|
556 || strcmp (buf, "1234567.000000 33") != 0)
|
|
557 return 1;
|
|
558 if (sprintf (buf, "%F", 1.0 / 0.0) < 0
|
|
559 || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0))
|
|
560 return 1;
|
|
561 /* This catches a Cygwin 1.5.x bug. */
|
|
562 if (sprintf (buf, "%.F", 1234.0) < 0
|
|
563 || strcmp (buf, "1234") != 0)
|
|
564 return 1;
|
|
565 return 0;
|
|
566 }], [gl_cv_func_printf_directive_f=yes], [gl_cv_func_printf_directive_f=no],
|
|
567 [
|
|
568 changequote(,)dnl
|
|
569 case "$host_os" in
|
|
570 # Guess yes on glibc systems.
|
|
571 *-gnu*) gl_cv_func_printf_directive_f="guessing yes";;
|
|
572 # Guess yes on FreeBSD >= 6.
|
|
573 freebsd[1-5]*) gl_cv_func_printf_directive_f="guessing no";;
|
|
574 freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";;
|
|
575 # Guess yes on MacOS X >= 10.3.
|
|
576 darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";;
|
|
577 darwin*) gl_cv_func_printf_directive_f="guessing yes";;
|
|
578 # Guess yes on Solaris >= 2.10.
|
|
579 solaris2.[0-9]*) gl_cv_func_printf_directive_f="guessing no";;
|
|
580 solaris*) gl_cv_func_printf_directive_f="guessing yes";;
|
|
581 # If we don't know, assume the worst.
|
|
582 *) gl_cv_func_printf_directive_f="guessing no";;
|
|
583 esac
|
|
584 changequote([,])dnl
|
|
585 ])
|
|
586 ])
|
|
587 ])
|
|
588
|
|
589 dnl Test whether the *printf family of functions supports the %n format
|
|
590 dnl directive. (ISO C99, POSIX:2001)
|
|
591 dnl Result is gl_cv_func_printf_directive_n.
|
|
592
|
|
593 AC_DEFUN([gl_PRINTF_DIRECTIVE_N],
|
|
594 [
|
|
595 AC_REQUIRE([AC_PROG_CC])
|
|
596 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
597 AC_CACHE_CHECK([whether printf supports the 'n' directive],
|
|
598 [gl_cv_func_printf_directive_n],
|
|
599 [
|
|
600 AC_TRY_RUN([
|
|
601 #include <stdio.h>
|
|
602 #include <string.h>
|
|
603 static char fmtstring[10];
|
|
604 static char buf[100];
|
|
605 int main ()
|
|
606 {
|
|
607 int count = -1;
|
|
608 /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2)
|
|
609 support %n in format strings in read-only memory but not in writable
|
|
610 memory. */
|
|
611 strcpy (fmtstring, "%d %n");
|
|
612 if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0
|
|
613 || strcmp (buf, "123 ") != 0
|
|
614 || count != 4)
|
|
615 return 1;
|
|
616 return 0;
|
|
617 }], [gl_cv_func_printf_directive_n=yes], [gl_cv_func_printf_directive_n=no],
|
|
618 [
|
|
619 changequote(,)dnl
|
|
620 case "$host_os" in
|
|
621 *) gl_cv_func_printf_directive_n="guessing yes";;
|
|
622 esac
|
|
623 changequote([,])dnl
|
|
624 ])
|
|
625 ])
|
|
626 ])
|
|
627
|
|
628 dnl Test whether the *printf family of functions supports the %ls format
|
|
629 dnl directive and in particular, when a precision is specified, whether
|
|
630 dnl the functions stop converting the wide string argument when the number
|
|
631 dnl of bytes that have been produced by this conversion equals or exceeds
|
|
632 dnl the precision.
|
|
633 dnl Result is gl_cv_func_printf_directive_ls.
|
|
634
|
|
635 AC_DEFUN([gl_PRINTF_DIRECTIVE_LS],
|
|
636 [
|
|
637 AC_REQUIRE([AC_PROG_CC])
|
|
638 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
639 AC_CACHE_CHECK([whether printf supports the 'ls' directive],
|
|
640 [gl_cv_func_printf_directive_ls],
|
|
641 [
|
|
642 AC_TRY_RUN([
|
|
643 /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
|
|
644 <wchar.h>.
|
|
645 BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
|
|
646 included before <wchar.h>. */
|
|
647 #include <stddef.h>
|
|
648 #include <stdio.h>
|
|
649 #include <time.h>
|
|
650 #include <wchar.h>
|
|
651 #include <string.h>
|
|
652 int main ()
|
|
653 {
|
|
654 char buf[100];
|
|
655 /* Test whether %ls works at all.
|
|
656 This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on
|
|
657 Cygwin 1.5. */
|
|
658 {
|
|
659 static const wchar_t wstring[] = { 'a', 'b', 'c', 0 };
|
|
660 buf[0] = '\0';
|
|
661 if (sprintf (buf, "%ls", wstring) < 0
|
|
662 || strcmp (buf, "abc") != 0)
|
|
663 return 1;
|
|
664 }
|
|
665 /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an
|
|
666 assertion failure inside libc), but not on OpenBSD 4.0. */
|
|
667 {
|
|
668 static const wchar_t wstring[] = { 'a', 0 };
|
|
669 buf[0] = '\0';
|
|
670 if (sprintf (buf, "%ls", wstring) < 0
|
|
671 || strcmp (buf, "a") != 0)
|
|
672 return 1;
|
|
673 }
|
|
674 /* Test whether precisions in %ls are supported as specified in ISO C 99
|
|
675 section 7.19.6.1:
|
|
676 "If a precision is specified, no more than that many bytes are written
|
|
677 (including shift sequences, if any), and the array shall contain a
|
|
678 null wide character if, to equal the multibyte character sequence
|
|
679 length given by the precision, the function would need to access a
|
|
680 wide character one past the end of the array."
|
|
681 This test fails on Solaris 10. */
|
|
682 {
|
|
683 static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 };
|
|
684 buf[0] = '\0';
|
|
685 if (sprintf (buf, "%.2ls", wstring) < 0
|
|
686 || strcmp (buf, "ab") != 0)
|
|
687 return 1;
|
|
688 }
|
|
689 return 0;
|
|
690 }], [gl_cv_func_printf_directive_ls=yes], [gl_cv_func_printf_directive_ls=no],
|
|
691 [
|
|
692 changequote(,)dnl
|
|
693 case "$host_os" in
|
|
694 openbsd*) gl_cv_func_printf_directive_ls="guessing no";;
|
|
695 irix*) gl_cv_func_printf_directive_ls="guessing no";;
|
|
696 solaris*) gl_cv_func_printf_directive_ls="guessing no";;
|
|
697 cygwin*) gl_cv_func_printf_directive_ls="guessing no";;
|
|
698 beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";;
|
|
699 *) gl_cv_func_printf_directive_ls="guessing yes";;
|
|
700 esac
|
|
701 changequote([,])dnl
|
|
702 ])
|
|
703 ])
|
|
704 ])
|
|
705
|
|
706 dnl Test whether the *printf family of functions supports POSIX/XSI format
|
|
707 dnl strings with positions. (POSIX:2001)
|
|
708 dnl Result is gl_cv_func_printf_positions.
|
|
709
|
|
710 AC_DEFUN([gl_PRINTF_POSITIONS],
|
|
711 [
|
|
712 AC_REQUIRE([AC_PROG_CC])
|
|
713 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
714 AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions],
|
|
715 [gl_cv_func_printf_positions],
|
|
716 [
|
|
717 AC_TRY_RUN([
|
|
718 #include <stdio.h>
|
|
719 #include <string.h>
|
|
720 /* The string "%2$d %1$d", with dollar characters protected from the shell's
|
|
721 dollar expansion (possibly an autoconf bug). */
|
|
722 static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
|
|
723 static char buf[100];
|
|
724 int main ()
|
|
725 {
|
|
726 sprintf (buf, format, 33, 55);
|
|
727 return (strcmp (buf, "55 33") != 0);
|
|
728 }], [gl_cv_func_printf_positions=yes], [gl_cv_func_printf_positions=no],
|
|
729 [
|
|
730 changequote(,)dnl
|
|
731 case "$host_os" in
|
|
732 netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*)
|
|
733 gl_cv_func_printf_positions="guessing no";;
|
|
734 beos*) gl_cv_func_printf_positions="guessing no";;
|
|
735 mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
|
|
736 *) gl_cv_func_printf_positions="guessing yes";;
|
|
737 esac
|
|
738 changequote([,])dnl
|
|
739 ])
|
|
740 ])
|
|
741 ])
|
|
742
|
|
743 dnl Test whether the *printf family of functions supports POSIX/XSI format
|
|
744 dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001)
|
|
745 dnl Result is gl_cv_func_printf_flag_grouping.
|
|
746
|
|
747 AC_DEFUN([gl_PRINTF_FLAG_GROUPING],
|
|
748 [
|
|
749 AC_REQUIRE([AC_PROG_CC])
|
|
750 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
751 AC_CACHE_CHECK([whether printf supports the grouping flag],
|
|
752 [gl_cv_func_printf_flag_grouping],
|
|
753 [
|
|
754 AC_TRY_RUN([
|
|
755 #include <stdio.h>
|
|
756 #include <string.h>
|
|
757 static char buf[100];
|
|
758 int main ()
|
|
759 {
|
|
760 if (sprintf (buf, "%'d %d", 1234567, 99) < 0
|
|
761 || buf[strlen (buf) - 1] != '9')
|
|
762 return 1;
|
|
763 return 0;
|
|
764 }], [gl_cv_func_printf_flag_grouping=yes], [gl_cv_func_printf_flag_grouping=no],
|
|
765 [
|
|
766 changequote(,)dnl
|
|
767 case "$host_os" in
|
|
768 cygwin*) gl_cv_func_printf_flag_grouping="guessing no";;
|
|
769 netbsd*) gl_cv_func_printf_flag_grouping="guessing no";;
|
|
770 mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";;
|
|
771 *) gl_cv_func_printf_flag_grouping="guessing yes";;
|
|
772 esac
|
|
773 changequote([,])dnl
|
|
774 ])
|
|
775 ])
|
|
776 ])
|
|
777
|
|
778 dnl Test whether the *printf family of functions supports the - flag correctly.
|
|
779 dnl (ISO C99.) See
|
|
780 dnl <http://lists.gnu.org/archive/html/bug-coreutils/2008-02/msg00035.html>
|
|
781 dnl Result is gl_cv_func_printf_flag_leftadjust.
|
|
782
|
|
783 AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST],
|
|
784 [
|
|
785 AC_REQUIRE([AC_PROG_CC])
|
|
786 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
787 AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly],
|
|
788 [gl_cv_func_printf_flag_leftadjust],
|
|
789 [
|
|
790 AC_TRY_RUN([
|
|
791 #include <stdio.h>
|
|
792 #include <string.h>
|
|
793 static char buf[100];
|
|
794 int main ()
|
|
795 {
|
|
796 /* Check that a '-' flag is not annihilated by a negative width. */
|
|
797 if (sprintf (buf, "a%-*sc", -3, "b") < 0
|
|
798 || strcmp (buf, "ab c") != 0)
|
|
799 return 1;
|
|
800 return 0;
|
|
801 }],
|
|
802 [gl_cv_func_printf_flag_leftadjust=yes],
|
|
803 [gl_cv_func_printf_flag_leftadjust=no],
|
|
804 [
|
|
805 changequote(,)dnl
|
|
806 case "$host_os" in
|
|
807 # Guess yes on HP-UX 11.
|
|
808 hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
|
|
809 # Guess no on HP-UX 10 and older.
|
|
810 hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";;
|
|
811 # Guess yes otherwise.
|
|
812 *) gl_cv_func_printf_flag_leftadjust="guessing yes";;
|
|
813 esac
|
|
814 changequote([,])dnl
|
|
815 ])
|
|
816 ])
|
|
817 ])
|
|
818
|
|
819 dnl Test whether the *printf family of functions supports padding of non-finite
|
|
820 dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See
|
|
821 dnl <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html>
|
|
822 dnl Result is gl_cv_func_printf_flag_zero.
|
|
823
|
|
824 AC_DEFUN([gl_PRINTF_FLAG_ZERO],
|
|
825 [
|
|
826 AC_REQUIRE([AC_PROG_CC])
|
|
827 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
828 AC_CACHE_CHECK([whether printf supports the zero flag correctly],
|
|
829 [gl_cv_func_printf_flag_zero],
|
|
830 [
|
|
831 AC_TRY_RUN([
|
|
832 #include <stdio.h>
|
|
833 #include <string.h>
|
|
834 static char buf[100];
|
|
835 int main ()
|
|
836 {
|
|
837 if (sprintf (buf, "%010f", 1.0 / 0.0, 33, 44, 55) < 0
|
|
838 || (strcmp (buf, " inf") != 0
|
|
839 && strcmp (buf, " infinity") != 0))
|
|
840 return 1;
|
|
841 return 0;
|
|
842 }], [gl_cv_func_printf_flag_zero=yes], [gl_cv_func_printf_flag_zero=no],
|
|
843 [
|
|
844 changequote(,)dnl
|
|
845 case "$host_os" in
|
|
846 # Guess yes on glibc systems.
|
|
847 *-gnu*) gl_cv_func_printf_flag_zero="guessing yes";;
|
|
848 # Guess yes on BeOS.
|
|
849 beos*) gl_cv_func_printf_flag_zero="guessing yes";;
|
|
850 # If we don't know, assume the worst.
|
|
851 *) gl_cv_func_printf_flag_zero="guessing no";;
|
|
852 esac
|
|
853 changequote([,])dnl
|
|
854 ])
|
|
855 ])
|
|
856 ])
|
|
857
|
|
858 dnl Test whether the *printf family of functions supports large precisions.
|
|
859 dnl On mingw, precisions larger than 512 are treated like 512, in integer,
|
|
860 dnl floating-point or pointer output. On BeOS, precisions larger than 1044
|
|
861 dnl crash the program.
|
|
862 dnl Result is gl_cv_func_printf_precision.
|
|
863
|
|
864 AC_DEFUN([gl_PRINTF_PRECISION],
|
|
865 [
|
|
866 AC_REQUIRE([AC_PROG_CC])
|
|
867 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
868 AC_CACHE_CHECK([whether printf supports large precisions],
|
|
869 [gl_cv_func_printf_precision],
|
|
870 [
|
|
871 AC_TRY_RUN([
|
|
872 #include <stdio.h>
|
|
873 #include <string.h>
|
|
874 static char buf[5000];
|
|
875 int main ()
|
|
876 {
|
|
877 #ifdef __BEOS__
|
|
878 /* On BeOS, this would crash and show a dialog box. Avoid the crash. */
|
|
879 return 1;
|
|
880 #endif
|
|
881 if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3)
|
|
882 return 1;
|
|
883 return 0;
|
|
884 }], [gl_cv_func_printf_precision=yes], [gl_cv_func_printf_precision=no],
|
|
885 [
|
|
886 changequote(,)dnl
|
|
887 case "$host_os" in
|
|
888 # Guess no only on native Win32 and BeOS systems.
|
|
889 mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;;
|
|
890 beos*) gl_cv_func_printf_precision="guessing no" ;;
|
|
891 *) gl_cv_func_printf_precision="guessing yes" ;;
|
|
892 esac
|
|
893 changequote([,])dnl
|
|
894 ])
|
|
895 ])
|
|
896 ])
|
|
897
|
|
898 dnl Test whether the *printf family of functions recovers gracefully in case
|
|
899 dnl of an out-of-memory condition, or whether it crashes the entire program.
|
|
900 dnl Result is gl_cv_func_printf_enomem.
|
|
901
|
|
902 AC_DEFUN([gl_PRINTF_ENOMEM],
|
|
903 [
|
|
904 AC_REQUIRE([AC_PROG_CC])
|
|
905 AC_REQUIRE([gl_MULTIARCH])
|
|
906 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
907 AC_CACHE_CHECK([whether printf survives out-of-memory conditions],
|
|
908 [gl_cv_func_printf_enomem],
|
|
909 [
|
|
910 gl_cv_func_printf_enomem="guessing no"
|
|
911 if test "$cross_compiling" = no; then
|
|
912 if test $APPLE_UNIVERSAL_BUILD = 0; then
|
|
913 AC_LANG_CONFTEST([AC_LANG_SOURCE([
|
|
914 ]GL_NOCRASH[
|
|
915 changequote(,)dnl
|
|
916 #include <stdio.h>
|
|
917 #include <sys/types.h>
|
|
918 #include <sys/time.h>
|
|
919 #include <sys/resource.h>
|
|
920 #include <errno.h>
|
|
921 int main()
|
|
922 {
|
|
923 struct rlimit limit;
|
|
924 int ret;
|
|
925 nocrash_init ();
|
|
926 /* Some printf implementations allocate temporary space with malloc. */
|
|
927 /* On BSD systems, malloc() is limited by RLIMIT_DATA. */
|
|
928 #ifdef RLIMIT_DATA
|
|
929 if (getrlimit (RLIMIT_DATA, &limit) < 0)
|
|
930 return 77;
|
|
931 if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
|
|
932 limit.rlim_max = 5000000;
|
|
933 limit.rlim_cur = limit.rlim_max;
|
|
934 if (setrlimit (RLIMIT_DATA, &limit) < 0)
|
|
935 return 77;
|
|
936 #endif
|
|
937 /* On Linux systems, malloc() is limited by RLIMIT_AS. */
|
|
938 #ifdef RLIMIT_AS
|
|
939 if (getrlimit (RLIMIT_AS, &limit) < 0)
|
|
940 return 77;
|
|
941 if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
|
|
942 limit.rlim_max = 5000000;
|
|
943 limit.rlim_cur = limit.rlim_max;
|
|
944 if (setrlimit (RLIMIT_AS, &limit) < 0)
|
|
945 return 77;
|
|
946 #endif
|
|
947 /* Some printf implementations allocate temporary space on the stack. */
|
|
948 #ifdef RLIMIT_STACK
|
|
949 if (getrlimit (RLIMIT_STACK, &limit) < 0)
|
|
950 return 77;
|
|
951 if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
|
|
952 limit.rlim_max = 5000000;
|
|
953 limit.rlim_cur = limit.rlim_max;
|
|
954 if (setrlimit (RLIMIT_STACK, &limit) < 0)
|
|
955 return 77;
|
|
956 #endif
|
|
957 ret = printf ("%.5000000f", 1.0);
|
|
958 return !(ret == 5000002 || (ret < 0 && errno == ENOMEM));
|
|
959 }
|
|
960 changequote([,])dnl
|
|
961 ])])
|
|
962 if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
|
|
963 (./conftest
|
|
964 result=$?
|
|
965 if test $result != 0 && test $result != 77; then result=1; fi
|
|
966 exit $result
|
|
967 ) >/dev/null 2>/dev/null
|
|
968 case $? in
|
|
969 0) gl_cv_func_printf_enomem="yes" ;;
|
|
970 77) gl_cv_func_printf_enomem="guessing no" ;;
|
|
971 *) gl_cv_func_printf_enomem="no" ;;
|
|
972 esac
|
|
973 else
|
|
974 gl_cv_func_printf_enomem="guessing no"
|
|
975 fi
|
|
976 rm -fr conftest*
|
|
977 else
|
|
978 dnl A universal build on Apple MacOS X platforms.
|
|
979 dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode.
|
|
980 dnl But we need a configuration result that is valid in both modes.
|
|
981 gl_cv_func_printf_enomem="guessing no"
|
|
982 fi
|
|
983 fi
|
|
984 if test "$gl_cv_func_printf_enomem" = "guessing no"; then
|
|
985 changequote(,)dnl
|
|
986 case "$host_os" in
|
|
987 # Guess yes on glibc systems.
|
|
988 *-gnu*) gl_cv_func_printf_enomem="guessing yes";;
|
|
989 # Guess yes on Solaris.
|
|
990 solaris*) gl_cv_func_printf_enomem="guessing yes";;
|
|
991 # Guess yes on AIX.
|
|
992 aix*) gl_cv_func_printf_enomem="guessing yes";;
|
|
993 # Guess yes on HP-UX/hppa.
|
|
994 hpux*) case "$host_cpu" in
|
|
995 hppa*) gl_cv_func_printf_enomem="guessing yes";;
|
|
996 *) gl_cv_func_printf_enomem="guessing no";;
|
|
997 esac
|
|
998 ;;
|
|
999 # Guess yes on IRIX.
|
|
1000 irix*) gl_cv_func_printf_enomem="guessing yes";;
|
|
1001 # Guess yes on OSF/1.
|
|
1002 osf*) gl_cv_func_printf_enomem="guessing yes";;
|
|
1003 # Guess yes on BeOS.
|
|
1004 beos*) gl_cv_func_printf_enomem="guessing yes";;
|
|
1005 # Guess yes on Haiku.
|
|
1006 haiku*) gl_cv_func_printf_enomem="guessing yes";;
|
|
1007 # If we don't know, assume the worst.
|
|
1008 *) gl_cv_func_printf_enomem="guessing no";;
|
|
1009 esac
|
|
1010 changequote([,])dnl
|
|
1011 fi
|
|
1012 ])
|
|
1013 ])
|
|
1014
|
|
1015 dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001)
|
|
1016 dnl Result is ac_cv_func_snprintf.
|
|
1017
|
|
1018 AC_DEFUN([gl_SNPRINTF_PRESENCE],
|
|
1019 [
|
|
1020 AC_CHECK_FUNCS_ONCE([snprintf])
|
|
1021 ])
|
|
1022
|
|
1023 dnl Test whether the string produced by the snprintf function is always NUL
|
|
1024 dnl terminated. (ISO C99, POSIX:2001)
|
|
1025 dnl Result is gl_cv_func_snprintf_truncation_c99.
|
|
1026
|
|
1027 AC_DEFUN([gl_SNPRINTF_TRUNCATION_C99],
|
|
1028 [
|
|
1029 AC_REQUIRE([AC_PROG_CC])
|
|
1030 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
1031 AC_CACHE_CHECK([whether snprintf truncates the result as in C99],
|
|
1032 [gl_cv_func_snprintf_truncation_c99],
|
|
1033 [
|
|
1034 AC_TRY_RUN([
|
|
1035 #include <stdio.h>
|
|
1036 #include <string.h>
|
|
1037 static char buf[100];
|
|
1038 int main ()
|
|
1039 {
|
|
1040 strcpy (buf, "ABCDEF");
|
|
1041 snprintf (buf, 3, "%d %d", 4567, 89);
|
|
1042 if (memcmp (buf, "45\0DEF", 6) != 0)
|
|
1043 return 1;
|
|
1044 return 0;
|
|
1045 }], [gl_cv_func_snprintf_truncation_c99=yes], [gl_cv_func_snprintf_truncation_c99=no],
|
|
1046 [
|
|
1047 changequote(,)dnl
|
|
1048 case "$host_os" in
|
|
1049 # Guess yes on glibc systems.
|
|
1050 *-gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
|
1051 # Guess yes on FreeBSD >= 5.
|
|
1052 freebsd[1-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";;
|
|
1053 freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
|
1054 # Guess yes on MacOS X >= 10.3.
|
|
1055 darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";;
|
|
1056 darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
|
1057 # Guess yes on OpenBSD >= 3.9.
|
|
1058 openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
|
|
1059 gl_cv_func_snprintf_truncation_c99="guessing no";;
|
|
1060 openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
|
1061 # Guess yes on Solaris >= 2.6.
|
|
1062 solaris2.[0-5]*) gl_cv_func_snprintf_truncation_c99="guessing no";;
|
|
1063 solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
|
1064 # Guess yes on AIX >= 4.
|
|
1065 aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";;
|
|
1066 aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
|
1067 # Guess yes on HP-UX >= 11.
|
|
1068 hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";;
|
|
1069 hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
|
1070 # Guess yes on IRIX >= 6.5.
|
|
1071 irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
|
1072 # Guess yes on OSF/1 >= 5.
|
|
1073 osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";;
|
|
1074 osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
|
1075 # Guess yes on NetBSD >= 3.
|
|
1076 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
|
|
1077 gl_cv_func_snprintf_truncation_c99="guessing no";;
|
|
1078 netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
|
1079 # Guess yes on BeOS.
|
|
1080 beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
|
|
1081 # If we don't know, assume the worst.
|
|
1082 *) gl_cv_func_snprintf_truncation_c99="guessing no";;
|
|
1083 esac
|
|
1084 changequote([,])dnl
|
|
1085 ])
|
|
1086 ])
|
|
1087 ])
|
|
1088
|
|
1089 dnl Test whether the return value of the snprintf function is the number
|
|
1090 dnl of bytes (excluding the terminating NUL) that would have been produced
|
|
1091 dnl if the buffer had been large enough. (ISO C99, POSIX:2001)
|
|
1092 dnl For example, this test program fails on IRIX 6.5:
|
|
1093 dnl ---------------------------------------------------------------------
|
|
1094 dnl #include <stdio.h>
|
|
1095 dnl int main()
|
|
1096 dnl {
|
|
1097 dnl static char buf[8];
|
|
1098 dnl int retval = snprintf (buf, 3, "%d", 12345);
|
|
1099 dnl return retval >= 0 && retval < 3;
|
|
1100 dnl }
|
|
1101 dnl ---------------------------------------------------------------------
|
|
1102 dnl Result is gl_cv_func_snprintf_retval_c99.
|
|
1103
|
|
1104 AC_DEFUN([gl_SNPRINTF_RETVAL_C99],
|
|
1105 [
|
|
1106 AC_REQUIRE([AC_PROG_CC])
|
|
1107 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
1108 AC_CACHE_CHECK([whether snprintf returns a byte count as in C99],
|
|
1109 [gl_cv_func_snprintf_retval_c99],
|
|
1110 [
|
|
1111 AC_TRY_RUN([
|
|
1112 #include <stdio.h>
|
|
1113 #include <string.h>
|
|
1114 static char buf[100];
|
|
1115 int main ()
|
|
1116 {
|
|
1117 strcpy (buf, "ABCDEF");
|
|
1118 if (snprintf (buf, 3, "%d %d", 4567, 89) != 7)
|
|
1119 return 1;
|
|
1120 return 0;
|
|
1121 }], [gl_cv_func_snprintf_retval_c99=yes], [gl_cv_func_snprintf_retval_c99=no],
|
|
1122 [
|
|
1123 changequote(,)dnl
|
|
1124 case "$host_os" in
|
|
1125 # Guess yes on glibc systems.
|
|
1126 *-gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
|
1127 # Guess yes on FreeBSD >= 5.
|
|
1128 freebsd[1-4]*) gl_cv_func_snprintf_retval_c99="guessing no";;
|
|
1129 freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
|
1130 # Guess yes on MacOS X >= 10.3.
|
|
1131 darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";;
|
|
1132 darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
|
1133 # Guess yes on OpenBSD >= 3.9.
|
|
1134 openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
|
|
1135 gl_cv_func_snprintf_retval_c99="guessing no";;
|
|
1136 openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
|
1137 # Guess yes on Solaris >= 2.6.
|
|
1138 solaris2.[0-5]*) gl_cv_func_snprintf_retval_c99="guessing no";;
|
|
1139 solaris*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
|
1140 # Guess yes on AIX >= 4.
|
|
1141 aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";;
|
|
1142 aix*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
|
1143 # Guess yes on NetBSD >= 3.
|
|
1144 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
|
|
1145 gl_cv_func_snprintf_retval_c99="guessing no";;
|
|
1146 netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
|
1147 # Guess yes on BeOS.
|
|
1148 beos*) gl_cv_func_snprintf_retval_c99="guessing yes";;
|
|
1149 # If we don't know, assume the worst.
|
|
1150 *) gl_cv_func_snprintf_retval_c99="guessing no";;
|
|
1151 esac
|
|
1152 changequote([,])dnl
|
|
1153 ])
|
|
1154 ])
|
|
1155 ])
|
|
1156
|
|
1157 dnl Test whether the snprintf function supports the %n format directive
|
|
1158 dnl also in truncated portions of the format string. (ISO C99, POSIX:2001)
|
|
1159 dnl Result is gl_cv_func_snprintf_directive_n.
|
|
1160
|
|
1161 AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N],
|
|
1162 [
|
|
1163 AC_REQUIRE([AC_PROG_CC])
|
|
1164 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
1165 AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive],
|
|
1166 [gl_cv_func_snprintf_directive_n],
|
|
1167 [
|
|
1168 AC_TRY_RUN([
|
|
1169 #include <stdio.h>
|
|
1170 #include <string.h>
|
|
1171 static char fmtstring[10];
|
|
1172 static char buf[100];
|
|
1173 int main ()
|
|
1174 {
|
|
1175 int count = -1;
|
|
1176 /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2)
|
|
1177 support %n in format strings in read-only memory but not in writable
|
|
1178 memory. */
|
|
1179 strcpy (fmtstring, "%d %n");
|
|
1180 snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55);
|
|
1181 if (count != 6)
|
|
1182 return 1;
|
|
1183 return 0;
|
|
1184 }], [gl_cv_func_snprintf_directive_n=yes], [gl_cv_func_snprintf_directive_n=no],
|
|
1185 [
|
|
1186 changequote(,)dnl
|
|
1187 case "$host_os" in
|
|
1188 # Guess yes on glibc systems.
|
|
1189 *-gnu*) gl_cv_func_snprintf_directive_n="guessing yes";;
|
|
1190 # Guess yes on FreeBSD >= 5.
|
|
1191 freebsd[1-4]*) gl_cv_func_snprintf_directive_n="guessing no";;
|
|
1192 freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
|
|
1193 # Guess yes on MacOS X >= 10.3.
|
|
1194 darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";;
|
|
1195 darwin*) gl_cv_func_snprintf_directive_n="guessing yes";;
|
|
1196 # Guess yes on Solaris >= 2.6.
|
|
1197 solaris2.[0-5]*) gl_cv_func_snprintf_directive_n="guessing no";;
|
|
1198 solaris*) gl_cv_func_snprintf_directive_n="guessing yes";;
|
|
1199 # Guess yes on AIX >= 4.
|
|
1200 aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";;
|
|
1201 aix*) gl_cv_func_snprintf_directive_n="guessing yes";;
|
|
1202 # Guess yes on IRIX >= 6.5.
|
|
1203 irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";;
|
|
1204 # Guess yes on OSF/1 >= 5.
|
|
1205 osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";;
|
|
1206 osf*) gl_cv_func_snprintf_directive_n="guessing yes";;
|
|
1207 # Guess yes on NetBSD >= 3.
|
|
1208 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
|
|
1209 gl_cv_func_snprintf_directive_n="guessing no";;
|
|
1210 netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
|
|
1211 # Guess yes on BeOS.
|
|
1212 beos*) gl_cv_func_snprintf_directive_n="guessing yes";;
|
|
1213 # If we don't know, assume the worst.
|
|
1214 *) gl_cv_func_snprintf_directive_n="guessing no";;
|
|
1215 esac
|
|
1216 changequote([,])dnl
|
|
1217 ])
|
|
1218 ])
|
|
1219 ])
|
|
1220
|
|
1221 dnl Test whether the snprintf function, when passed a size = 1, writes any
|
|
1222 dnl output without bounds in this case, behaving like sprintf. This is the
|
|
1223 dnl case on Linux libc5.
|
|
1224 dnl Result is gl_cv_func_snprintf_size1.
|
|
1225
|
|
1226 AC_DEFUN([gl_SNPRINTF_SIZE1],
|
|
1227 [
|
|
1228 AC_REQUIRE([AC_PROG_CC])
|
|
1229 AC_CACHE_CHECK([whether snprintf respects a size of 1],
|
|
1230 [gl_cv_func_snprintf_size1],
|
|
1231 [
|
|
1232 AC_TRY_RUN([
|
|
1233 #include <stdio.h>
|
|
1234 int main()
|
|
1235 {
|
|
1236 static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
|
|
1237 snprintf (buf, 1, "%d", 12345);
|
|
1238 return buf[1] != 'E';
|
|
1239 }],
|
|
1240 [gl_cv_func_snprintf_size1=yes],
|
|
1241 [gl_cv_func_snprintf_size1=no],
|
|
1242 [gl_cv_func_snprintf_size1="guessing yes"])
|
|
1243 ])
|
|
1244 ])
|
|
1245
|
|
1246 dnl Test whether the vsnprintf function, when passed a zero size, produces no
|
|
1247 dnl output. (ISO C99, POSIX:2001)
|
|
1248 dnl For example, snprintf nevertheless writes a NUL byte in this case
|
|
1249 dnl on OSF/1 5.1:
|
|
1250 dnl ---------------------------------------------------------------------
|
|
1251 dnl #include <stdio.h>
|
|
1252 dnl int main()
|
|
1253 dnl {
|
|
1254 dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
|
|
1255 dnl snprintf (buf, 0, "%d", 12345);
|
|
1256 dnl return buf[0] != 'D';
|
|
1257 dnl }
|
|
1258 dnl ---------------------------------------------------------------------
|
|
1259 dnl And vsnprintf writes any output without bounds in this case, behaving like
|
|
1260 dnl vsprintf, on HP-UX 11 and OSF/1 5.1:
|
|
1261 dnl ---------------------------------------------------------------------
|
|
1262 dnl #include <stdarg.h>
|
|
1263 dnl #include <stdio.h>
|
|
1264 dnl static int my_snprintf (char *buf, int size, const char *format, ...)
|
|
1265 dnl {
|
|
1266 dnl va_list args;
|
|
1267 dnl int ret;
|
|
1268 dnl va_start (args, format);
|
|
1269 dnl ret = vsnprintf (buf, size, format, args);
|
|
1270 dnl va_end (args);
|
|
1271 dnl return ret;
|
|
1272 dnl }
|
|
1273 dnl int main()
|
|
1274 dnl {
|
|
1275 dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
|
|
1276 dnl my_snprintf (buf, 0, "%d", 12345);
|
|
1277 dnl return buf[0] != 'D';
|
|
1278 dnl }
|
|
1279 dnl ---------------------------------------------------------------------
|
|
1280 dnl Result is gl_cv_func_vsnprintf_zerosize_c99.
|
|
1281
|
|
1282 AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99],
|
|
1283 [
|
|
1284 AC_REQUIRE([AC_PROG_CC])
|
|
1285 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
|
|
1286 AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99],
|
|
1287 [gl_cv_func_vsnprintf_zerosize_c99],
|
|
1288 [
|
|
1289 AC_TRY_RUN([
|
|
1290 #include <stdarg.h>
|
|
1291 #include <stdio.h>
|
|
1292 static int my_snprintf (char *buf, int size, const char *format, ...)
|
|
1293 {
|
|
1294 va_list args;
|
|
1295 int ret;
|
|
1296 va_start (args, format);
|
|
1297 ret = vsnprintf (buf, size, format, args);
|
|
1298 va_end (args);
|
|
1299 return ret;
|
|
1300 }
|
|
1301 int main()
|
|
1302 {
|
|
1303 static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
|
|
1304 my_snprintf (buf, 0, "%d", 12345);
|
|
1305 return buf[0] != 'D';
|
|
1306 }],
|
|
1307 [gl_cv_func_vsnprintf_zerosize_c99=yes],
|
|
1308 [gl_cv_func_vsnprintf_zerosize_c99=no],
|
|
1309 [
|
|
1310 changequote(,)dnl
|
|
1311 case "$host_os" in
|
|
1312 # Guess yes on glibc systems.
|
|
1313 *-gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
|
1314 # Guess yes on FreeBSD >= 5.
|
|
1315 freebsd[1-4]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
|
|
1316 freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
|
1317 # Guess yes on MacOS X >= 10.3.
|
|
1318 darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
|
|
1319 darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
|
1320 # Guess yes on Cygwin.
|
|
1321 cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
|
1322 # Guess yes on Solaris >= 2.6.
|
|
1323 solaris2.[0-5]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
|
|
1324 solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
|
1325 # Guess yes on AIX >= 4.
|
|
1326 aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
|
|
1327 aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
|
1328 # Guess yes on IRIX >= 6.5.
|
|
1329 irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
|
1330 # Guess yes on NetBSD >= 3.
|
|
1331 netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
|
|
1332 gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
|
|
1333 netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
|
1334 # Guess yes on BeOS.
|
|
1335 beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
|
1336 # Guess yes on mingw.
|
|
1337 mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
|
|
1338 # If we don't know, assume the worst.
|
|
1339 *) gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
|
|
1340 esac
|
|
1341 changequote([,])dnl
|
|
1342 ])
|
|
1343 ])
|
|
1344 ])
|
|
1345
|
|
1346 dnl The results of these tests on various platforms are:
|
|
1347 dnl
|
|
1348 dnl 1 = gl_PRINTF_SIZES_C99
|
|
1349 dnl 2 = gl_PRINTF_LONG_DOUBLE
|
|
1350 dnl 3 = gl_PRINTF_INFINITE
|
|
1351 dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE
|
|
1352 dnl 5 = gl_PRINTF_DIRECTIVE_A
|
|
1353 dnl 6 = gl_PRINTF_DIRECTIVE_F
|
|
1354 dnl 7 = gl_PRINTF_DIRECTIVE_N
|
|
1355 dnl 8 = gl_PRINTF_DIRECTIVE_LS
|
|
1356 dnl 9 = gl_PRINTF_POSITIONS
|
|
1357 dnl 10 = gl_PRINTF_FLAG_GROUPING
|
|
1358 dnl 11 = gl_PRINTF_FLAG_LEFTADJUST
|
|
1359 dnl 12 = gl_PRINTF_FLAG_ZERO
|
|
1360 dnl 13 = gl_PRINTF_PRECISION
|
|
1361 dnl 14 = gl_PRINTF_ENOMEM
|
|
1362 dnl 15 = gl_SNPRINTF_PRESENCE
|
|
1363 dnl 16 = gl_SNPRINTF_TRUNCATION_C99
|
|
1364 dnl 17 = gl_SNPRINTF_RETVAL_C99
|
|
1365 dnl 18 = gl_SNPRINTF_DIRECTIVE_N
|
|
1366 dnl 19 = gl_SNPRINTF_SIZE1
|
|
1367 dnl 20 = gl_VSNPRINTF_ZEROSIZE_C99
|
|
1368 dnl
|
|
1369 dnl 1 = checking whether printf supports size specifiers as in C99...
|
|
1370 dnl 2 = checking whether printf supports 'long double' arguments...
|
|
1371 dnl 3 = checking whether printf supports infinite 'double' arguments...
|
|
1372 dnl 4 = checking whether printf supports infinite 'long double' arguments...
|
|
1373 dnl 5 = checking whether printf supports the 'a' and 'A' directives...
|
|
1374 dnl 6 = checking whether printf supports the 'F' directive...
|
|
1375 dnl 7 = checking whether printf supports the 'n' directive...
|
|
1376 dnl 8 = checking whether printf supports the 'ls' directive...
|
|
1377 dnl 9 = checking whether printf supports POSIX/XSI format strings with positions...
|
|
1378 dnl 10 = checking whether printf supports the grouping flag...
|
|
1379 dnl 11 = checking whether printf supports the left-adjust flag correctly...
|
|
1380 dnl 12 = checking whether printf supports the zero flag correctly...
|
|
1381 dnl 13 = checking whether printf supports large precisions...
|
|
1382 dnl 14 = checking whether printf survives out-of-memory conditions...
|
|
1383 dnl 15 = checking for snprintf...
|
|
1384 dnl 16 = checking whether snprintf truncates the result as in C99...
|
|
1385 dnl 17 = checking whether snprintf returns a byte count as in C99...
|
|
1386 dnl 18 = checking whether snprintf fully supports the 'n' directive...
|
|
1387 dnl 19 = checking whether snprintf respects a size of 1...
|
|
1388 dnl 20 = checking whether vsnprintf respects a zero size as in C99...
|
|
1389 dnl
|
|
1390 dnl . = yes, # = no.
|
|
1391 dnl
|
|
1392 dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
|
1393 dnl glibc 2.5 . . . . . . . . . . . . . . . . . . . .
|
|
1394 dnl glibc 2.3.6 . . . . # . . . . . . . . . . . . . . .
|
|
1395 dnl FreeBSD 5.4, 6.1 . . . . # . . . . . . # . # . . . . . .
|
|
1396 dnl MacOS X 10.3.9 . . . . # . . . . . . # . # . . . . . .
|
|
1397 dnl OpenBSD 3.9, 4.0 . . # # # # . # . # . # . # . . . . . .
|
|
1398 dnl Cygwin 1.7.0 (2009) . . . # . . . ? . . . . . ? . . . . . .
|
|
1399 dnl Cygwin 1.5.25 (2008) . . . # # . . # . . . . . # . . . . . .
|
|
1400 dnl Cygwin 1.5.19 (2006) # . . # # # . # . # . # # # . . . . . .
|
|
1401 dnl Solaris 10 . . # # # . . # . . . # . . . . . . . .
|
|
1402 dnl Solaris 2.6 ... 9 # . # # # # . # . . . # . . . . . . . .
|
|
1403 dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # #
|
|
1404 dnl AIX 5.2 . . # # # . . . . . . # . . . . . . . .
|
|
1405 dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . . . . .
|
|
1406 dnl HP-UX 11.31 . . . . # . . . . . . # . . . . # # . .
|
|
1407 dnl HP-UX 11.{00,11,23} # . . . # # . . . . . # . . . . # # . #
|
|
1408 dnl HP-UX 10.20 # . # . # # . ? . . # # . . . . # # ? #
|
|
1409 dnl IRIX 6.5 # . # # # # . # . . . # . . . . # . . .
|
|
1410 dnl OSF/1 5.1 # . # # # # . . . . . # . . . . # . . #
|
|
1411 dnl OSF/1 4.0d # . # # # # . . . . . # . . # # # # # #
|
|
1412 dnl NetBSD 4.0 . ? ? ? ? ? . ? . ? ? ? ? ? . . . ? ? ?
|
|
1413 dnl NetBSD 3.0 . . . . # # . ? # # ? # . # . . . . . .
|
|
1414 dnl Haiku . . . # # # . # . . . . . ? . . . . . .
|
|
1415 dnl BeOS # # . # # # . ? # . ? . # ? . . . . . .
|
|
1416 dnl mingw # # # # # # . . # # . # # ? . # # # . .
|