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