1# vasnprintf.m4 serial 31
2dnl Copyright (C) 2002-2004, 2006-2010 Free Software Foundation, Inc.
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_VASNPRINTF],
8[
9  AC_CHECK_FUNCS_ONCE([vasnprintf])
10  if test $ac_cv_func_vasnprintf = no; then
11    gl_REPLACE_VASNPRINTF
12  fi
13])
14
15AC_DEFUN([gl_REPLACE_VASNPRINTF],
16[
17  AC_CHECK_FUNCS_ONCE([vasnprintf])
18  AC_LIBOBJ([vasnprintf])
19  AC_LIBOBJ([printf-args])
20  AC_LIBOBJ([printf-parse])
21  AC_LIBOBJ([asnprintf])
22  if test $ac_cv_func_vasnprintf = yes; then
23    AC_DEFINE([REPLACE_VASNPRINTF], [1],
24      [Define if vasnprintf exists but is overridden by gnulib.])
25  fi
26  gl_PREREQ_PRINTF_ARGS
27  gl_PREREQ_PRINTF_PARSE
28  gl_PREREQ_VASNPRINTF
29  gl_PREREQ_ASNPRINTF
30])
31
32# Prequisites of lib/printf-args.h, lib/printf-args.c.
33AC_DEFUN([gl_PREREQ_PRINTF_ARGS],
34[
35  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
36  AC_REQUIRE([gt_TYPE_WCHAR_T])
37  AC_REQUIRE([gt_TYPE_WINT_T])
38])
39
40# Prequisites of lib/printf-parse.h, lib/printf-parse.c.
41AC_DEFUN([gl_PREREQ_PRINTF_PARSE],
42[
43  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
44  AC_REQUIRE([gt_TYPE_WCHAR_T])
45  AC_REQUIRE([gt_TYPE_WINT_T])
46  AC_REQUIRE([AC_TYPE_SIZE_T])
47  AC_CHECK_TYPE([ptrdiff_t], ,
48    [AC_DEFINE([ptrdiff_t], [long],
49       [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
50    ])
51  AC_REQUIRE([gt_AC_TYPE_INTMAX_T])
52])
53
54# Prerequisites of lib/vasnprintf.c.
55AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF],
56[
57  AC_REQUIRE([AC_C_INLINE])
58  AC_REQUIRE([AC_FUNC_ALLOCA])
59  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
60  AC_REQUIRE([gt_TYPE_WCHAR_T])
61  AC_REQUIRE([gt_TYPE_WINT_T])
62  AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb])
63  dnl Use the _snprintf function only if it is declared (because on NetBSD it
64  dnl is defined as a weak alias of snprintf; we prefer to use the latter).
65  AC_CHECK_DECLS([_snprintf], , , [#include <stdio.h>])
66  dnl We can avoid a lot of code by assuming that snprintf's return value
67  dnl conforms to ISO C99. So check that.
68  AC_REQUIRE([gl_SNPRINTF_RETVAL_C99])
69  case "$gl_cv_func_snprintf_retval_c99" in
70    *yes)
71      AC_DEFINE([HAVE_SNPRINTF_RETVAL_C99], [1],
72        [Define if the return value of the snprintf function is the number of
73         of bytes (excluding the terminating NUL) that would have been produced
74         if the buffer had been large enough.])
75      ;;
76  esac
77])
78
79# Extra prerequisites of lib/vasnprintf.c for supporting 'long double'
80# arguments.
81AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE],
82[
83  AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
84  case "$gl_cv_func_printf_long_double" in
85    *yes)
86      ;;
87    *)
88      AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
89        [Define if the vasnprintf implementation needs special code for
90         'long double' arguments.])
91      ;;
92  esac
93])
94
95# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double'
96# arguments.
97AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE],
98[
99  AC_REQUIRE([gl_PRINTF_INFINITE])
100  case "$gl_cv_func_printf_infinite" in
101    *yes)
102      ;;
103    *)
104      AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1],
105        [Define if the vasnprintf implementation needs special code for
106         infinite 'double' arguments.])
107      ;;
108  esac
109])
110
111# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double'
112# arguments.
113AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE],
114[
115  AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
116  dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if
117  dnl NEED_PRINTF_LONG_DOUBLE is already set.
118  AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE])
119  case "$gl_cv_func_printf_long_double" in
120    *yes)
121      case "$gl_cv_func_printf_infinite_long_double" in
122        *yes)
123          ;;
124        *)
125          AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1],
126            [Define if the vasnprintf implementation needs special code for
127             infinite 'long double' arguments.])
128          ;;
129      esac
130      ;;
131  esac
132])
133
134# Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive.
135AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A],
136[
137  AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
138  case "$gl_cv_func_printf_directive_a" in
139    *yes)
140      ;;
141    *)
142      AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1],
143        [Define if the vasnprintf implementation needs special code for
144         the 'a' and 'A' directives.])
145      AC_CHECK_FUNCS([nl_langinfo])
146      ;;
147  esac
148])
149
150# Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive.
151AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F],
152[
153  AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
154  case "$gl_cv_func_printf_directive_f" in
155    *yes)
156      ;;
157    *)
158      AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1],
159        [Define if the vasnprintf implementation needs special code for
160         the 'F' directive.])
161      ;;
162  esac
163])
164
165# Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive.
166AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS],
167[
168  AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
169  case "$gl_cv_func_printf_directive_ls" in
170    *yes)
171      ;;
172    *)
173      AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1],
174        [Define if the vasnprintf implementation needs special code for
175         the 'ls' directive.])
176      ;;
177  esac
178])
179
180# Extra prerequisites of lib/vasnprintf.c for supporting the ' flag.
181AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING],
182[
183  AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
184  case "$gl_cv_func_printf_flag_grouping" in
185    *yes)
186      ;;
187    *)
188      AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1],
189        [Define if the vasnprintf implementation needs special code for the
190         ' flag.])
191      ;;
192  esac
193])
194
195# Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag.
196AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST],
197[
198  AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST])
199  case "$gl_cv_func_printf_flag_leftadjust" in
200    *yes)
201      ;;
202    *)
203      AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1],
204        [Define if the vasnprintf implementation needs special code for the
205         '-' flag.])
206      ;;
207  esac
208])
209
210# Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag.
211AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO],
212[
213  AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
214  case "$gl_cv_func_printf_flag_zero" in
215    *yes)
216      ;;
217    *)
218      AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1],
219        [Define if the vasnprintf implementation needs special code for the
220         0 flag.])
221      ;;
222  esac
223])
224
225# Extra prerequisites of lib/vasnprintf.c for supporting large precisions.
226AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION],
227[
228  AC_REQUIRE([gl_PRINTF_PRECISION])
229  case "$gl_cv_func_printf_precision" in
230    *yes)
231      ;;
232    *)
233      AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1],
234        [Define if the vasnprintf implementation needs special code for
235         supporting large precisions without arbitrary bounds.])
236      AC_DEFINE([NEED_PRINTF_DOUBLE], [1],
237        [Define if the vasnprintf implementation needs special code for
238         'double' arguments.])
239      AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
240        [Define if the vasnprintf implementation needs special code for
241         'long double' arguments.])
242      ;;
243  esac
244])
245
246# Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory
247# conditions.
248AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM],
249[
250  AC_REQUIRE([gl_PRINTF_ENOMEM])
251  case "$gl_cv_func_printf_enomem" in
252    *yes)
253      ;;
254    *)
255      AC_DEFINE([NEED_PRINTF_ENOMEM], [1],
256        [Define if the vasnprintf implementation needs special code for
257         surviving out-of-memory conditions.])
258      AC_DEFINE([NEED_PRINTF_DOUBLE], [1],
259        [Define if the vasnprintf implementation needs special code for
260         'double' arguments.])
261      AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
262        [Define if the vasnprintf implementation needs special code for
263         'long double' arguments.])
264      ;;
265  esac
266])
267
268# Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance.
269AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS],
270[
271  AC_REQUIRE([gl_PREREQ_VASNPRINTF])
272  gl_PREREQ_VASNPRINTF_LONG_DOUBLE
273  gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
274  gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
275  gl_PREREQ_VASNPRINTF_DIRECTIVE_A
276  gl_PREREQ_VASNPRINTF_DIRECTIVE_F
277  gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
278  gl_PREREQ_VASNPRINTF_FLAG_GROUPING
279  gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
280  gl_PREREQ_VASNPRINTF_FLAG_ZERO
281  gl_PREREQ_VASNPRINTF_PRECISION
282  gl_PREREQ_VASNPRINTF_ENOMEM
283])
284
285# Prerequisites of lib/asnprintf.c.
286AC_DEFUN([gl_PREREQ_ASNPRINTF],
287[
288])
289