Do the Windows oldnames workaround through the C++ GNULIB_NAMESPACE.
[gnulib.git] / m4 / vasnprintf.m4
blob43f070e6302486b0bf10bb409fbfa7c31b4eb610
1 # vasnprintf.m4 serial 38
2 dnl Copyright (C) 2002-2004, 2006-2020 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.
7 AC_DEFUN([gl_FUNC_VASNPRINTF],
9   AC_CHECK_FUNCS_ONCE([vasnprintf])
10   if test $ac_cv_func_vasnprintf = no; then
11     gl_REPLACE_VASNPRINTF
12   fi
15 AC_DEFUN([gl_REPLACE_VASNPRINTF],
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
32 # Prerequisites of lib/printf-args.h, lib/printf-args.c.
33 AC_DEFUN([gl_PREREQ_PRINTF_ARGS],
35   AC_REQUIRE([gt_TYPE_WCHAR_T])
36   AC_REQUIRE([gt_TYPE_WINT_T])
39 # Prerequisites of lib/printf-parse.h, lib/printf-parse.c.
40 AC_DEFUN([gl_PREREQ_PRINTF_PARSE],
42   AC_REQUIRE([gl_FEATURES_H])
43   AC_REQUIRE([gt_TYPE_WCHAR_T])
44   AC_REQUIRE([gt_TYPE_WINT_T])
45   AC_REQUIRE([AC_TYPE_SIZE_T])
46   AC_CHECK_TYPE([ptrdiff_t], ,
47     [AC_DEFINE([ptrdiff_t], [long],
48        [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
49     ])
50   AC_REQUIRE([gt_AC_TYPE_INTMAX_T])
53 # Prerequisites of lib/vasnprintf.c.
54 AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF],
56   AC_REQUIRE([AC_FUNC_ALLOCA])
57   AC_REQUIRE([gt_TYPE_WCHAR_T])
58   AC_REQUIRE([gt_TYPE_WINT_T])
59   AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb])
60   dnl Use the _snprintf function only if it is declared (because on NetBSD it
61   dnl is defined as a weak alias of snprintf; we prefer to use the latter).
62   AC_CHECK_DECLS([_snprintf], , , [[#include <stdio.h>]])
63   dnl Knowing DBL_EXPBIT0_WORD and DBL_EXPBIT0_BIT enables an optimization
64   dnl in the code for NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE.
65   AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION])
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   dnl Additionally, the use of %n can be eliminated by assuming that snprintf
78   dnl always produces NUL-terminated strings (no truncation).
79   AC_REQUIRE([gl_SNPRINTF_TRUNCATION_C99])
80   case "$gl_cv_func_snprintf_truncation_c99" in
81     *yes)
82       AC_DEFINE([HAVE_SNPRINTF_TRUNCATION_C99], [1],
83         [Define if the string produced by the snprintf function is always NUL
84          terminated.])
85       ;;
86   esac
89 # Extra prerequisites of lib/vasnprintf.c for supporting 'long double'
90 # arguments.
91 AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE],
93   AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
94   case "$gl_cv_func_printf_long_double" in
95     *yes)
96       ;;
97     *)
98       AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
99         [Define if the vasnprintf implementation needs special code for
100          'long double' arguments.])
101       ;;
102   esac
105 # Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double'
106 # arguments.
107 AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE],
109   AC_REQUIRE([gl_PRINTF_INFINITE])
110   case "$gl_cv_func_printf_infinite" in
111     *yes)
112       ;;
113     *)
114       AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1],
115         [Define if the vasnprintf implementation needs special code for
116          infinite 'double' arguments.])
117       ;;
118   esac
121 # Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double'
122 # arguments.
123 AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE],
125   AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
126   dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if
127   dnl NEED_PRINTF_LONG_DOUBLE is already set.
128   AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE])
129   case "$gl_cv_func_printf_long_double" in
130     *yes)
131       case "$gl_cv_func_printf_infinite_long_double" in
132         *yes)
133           ;;
134         *)
135           AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1],
136             [Define if the vasnprintf implementation needs special code for
137              infinite 'long double' arguments.])
138           ;;
139       esac
140       ;;
141   esac
144 # Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive.
145 AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A],
147   AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
148   case "$gl_cv_func_printf_directive_a" in
149     *yes)
150       ;;
151     *)
152       AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1],
153         [Define if the vasnprintf implementation needs special code for
154          the 'a' and 'A' directives.])
155       AC_CHECK_FUNCS([nl_langinfo])
156       ;;
157   esac
160 # Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive.
161 AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F],
163   AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
164   case "$gl_cv_func_printf_directive_f" in
165     *yes)
166       ;;
167     *)
168       AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1],
169         [Define if the vasnprintf implementation needs special code for
170          the 'F' directive.])
171       ;;
172   esac
175 # Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive.
176 AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS],
178   AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
179   case "$gl_cv_func_printf_directive_ls" in
180     *yes)
181       ;;
182     *)
183       AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1],
184         [Define if the vasnprintf implementation needs special code for
185          the 'ls' directive.])
186       ;;
187   esac
190 # Extra prerequisites of lib/vasnprintf.c for supporting the ' flag.
191 AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING],
193   AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
194   case "$gl_cv_func_printf_flag_grouping" in
195     *yes)
196       ;;
197     *)
198       AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1],
199         [Define if the vasnprintf implementation needs special code for the
200          ' flag.])
201       ;;
202   esac
205 # Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag.
206 AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST],
208   AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST])
209   case "$gl_cv_func_printf_flag_leftadjust" in
210     *yes)
211       ;;
212     *)
213       AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1],
214         [Define if the vasnprintf implementation needs special code for the
215          '-' flag.])
216       ;;
217   esac
220 # Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag.
221 AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO],
223   AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
224   case "$gl_cv_func_printf_flag_zero" in
225     *yes)
226       ;;
227     *)
228       AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1],
229         [Define if the vasnprintf implementation needs special code for the
230          0 flag.])
231       ;;
232   esac
235 # Extra prerequisites of lib/vasnprintf.c for supporting large precisions.
236 AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION],
238   AC_REQUIRE([gl_PRINTF_PRECISION])
239   case "$gl_cv_func_printf_precision" in
240     *yes)
241       ;;
242     *)
243       AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1],
244         [Define if the vasnprintf implementation needs special code for
245          supporting large precisions without arbitrary bounds.])
246       AC_DEFINE([NEED_PRINTF_DOUBLE], [1],
247         [Define if the vasnprintf implementation needs special code for
248          'double' arguments.])
249       AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
250         [Define if the vasnprintf implementation needs special code for
251          'long double' arguments.])
252       ;;
253   esac
256 # Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory
257 # conditions.
258 AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM],
260   AC_REQUIRE([gl_PRINTF_ENOMEM])
261   case "$gl_cv_func_printf_enomem" in
262     *yes)
263       ;;
264     *)
265       AC_DEFINE([NEED_PRINTF_ENOMEM], [1],
266         [Define if the vasnprintf implementation needs special code for
267          surviving out-of-memory conditions.])
268       AC_DEFINE([NEED_PRINTF_DOUBLE], [1],
269         [Define if the vasnprintf implementation needs special code for
270          'double' arguments.])
271       AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
272         [Define if the vasnprintf implementation needs special code for
273          'long double' arguments.])
274       ;;
275   esac
278 # Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance.
279 AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS],
281   AC_REQUIRE([gl_PREREQ_VASNPRINTF])
282   gl_PREREQ_VASNPRINTF_LONG_DOUBLE
283   gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
284   gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
285   gl_PREREQ_VASNPRINTF_DIRECTIVE_A
286   gl_PREREQ_VASNPRINTF_DIRECTIVE_F
287   gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
288   gl_PREREQ_VASNPRINTF_FLAG_GROUPING
289   gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
290   gl_PREREQ_VASNPRINTF_FLAG_ZERO
291   gl_PREREQ_VASNPRINTF_PRECISION
292   gl_PREREQ_VASNPRINTF_ENOMEM
295 # Prerequisites of lib/asnprintf.c.
296 AC_DEFUN([gl_PREREQ_ASNPRINTF],