1# vasnprintf.m4 serial 38 2dnl Copyright (C) 2002-2004, 2006-2020 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([gt_TYPE_WCHAR_T]) 36 AC_REQUIRE([gt_TYPE_WINT_T]) 37]) 38 39# Prerequisites of lib/printf-parse.h, lib/printf-parse.c. 40AC_DEFUN([gl_PREREQ_PRINTF_PARSE], 41[ 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]) 51]) 52 53# Prerequisites of lib/vasnprintf.c. 54AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF], 55[ 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 87]) 88 89# Extra prerequisites of lib/vasnprintf.c for supporting 'long double' 90# arguments. 91AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE], 92[ 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 103]) 104 105# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double' 106# arguments. 107AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE], 108[ 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 119]) 120 121# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double' 122# arguments. 123AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE], 124[ 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 142]) 143 144# Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive. 145AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A], 146[ 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 158]) 159 160# Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive. 161AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F], 162[ 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 173]) 174 175# Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive. 176AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS], 177[ 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 188]) 189 190# Extra prerequisites of lib/vasnprintf.c for supporting the ' flag. 191AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING], 192[ 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 203]) 204 205# Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag. 206AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST], 207[ 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 218]) 219 220# Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag. 221AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO], 222[ 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 233]) 234 235# Extra prerequisites of lib/vasnprintf.c for supporting large precisions. 236AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION], 237[ 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 254]) 255 256# Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory 257# conditions. 258AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM], 259[ 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 276]) 277 278# Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance. 279AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS], 280[ 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 293]) 294 295# Prerequisites of lib/asnprintf.c. 296AC_DEFUN([gl_PREREQ_ASNPRINTF], 297[ 298]) 299