Blame m4/vasnprintf.m4

Packit aea12f
# vasnprintf.m4 serial 36
Packit aea12f
dnl Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc.
Packit aea12f
dnl This file is free software; the Free Software Foundation
Packit aea12f
dnl gives unlimited permission to copy and/or distribute it,
Packit aea12f
dnl with or without modifications, as long as this notice is preserved.
Packit aea12f
Packit aea12f
AC_DEFUN([gl_FUNC_VASNPRINTF],
Packit aea12f
[
Packit aea12f
  AC_CHECK_FUNCS_ONCE([vasnprintf])
Packit aea12f
  if test $ac_cv_func_vasnprintf = no; then
Packit aea12f
    gl_REPLACE_VASNPRINTF
Packit aea12f
  fi
Packit aea12f
])
Packit aea12f
Packit aea12f
AC_DEFUN([gl_REPLACE_VASNPRINTF],
Packit aea12f
[
Packit aea12f
  AC_CHECK_FUNCS_ONCE([vasnprintf])
Packit aea12f
  AC_LIBOBJ([vasnprintf])
Packit aea12f
  AC_LIBOBJ([printf-args])
Packit aea12f
  AC_LIBOBJ([printf-parse])
Packit aea12f
  AC_LIBOBJ([asnprintf])
Packit aea12f
  if test $ac_cv_func_vasnprintf = yes; then
Packit aea12f
    AC_DEFINE([REPLACE_VASNPRINTF], [1],
Packit aea12f
      [Define if vasnprintf exists but is overridden by gnulib.])
Packit aea12f
  fi
Packit aea12f
  gl_PREREQ_PRINTF_ARGS
Packit aea12f
  gl_PREREQ_PRINTF_PARSE
Packit aea12f
  gl_PREREQ_VASNPRINTF
Packit aea12f
  gl_PREREQ_ASNPRINTF
Packit aea12f
])
Packit aea12f
Packit aea12f
# Prerequisites of lib/printf-args.h, lib/printf-args.c.
Packit aea12f
AC_DEFUN([gl_PREREQ_PRINTF_ARGS],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
Packit aea12f
  AC_REQUIRE([gt_TYPE_WCHAR_T])
Packit aea12f
  AC_REQUIRE([gt_TYPE_WINT_T])
Packit aea12f
])
Packit aea12f
Packit aea12f
# Prerequisites of lib/printf-parse.h, lib/printf-parse.c.
Packit aea12f
AC_DEFUN([gl_PREREQ_PRINTF_PARSE],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_FEATURES_H])
Packit aea12f
  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
Packit aea12f
  AC_REQUIRE([gt_TYPE_WCHAR_T])
Packit aea12f
  AC_REQUIRE([gt_TYPE_WINT_T])
Packit aea12f
  AC_REQUIRE([AC_TYPE_SIZE_T])
Packit aea12f
  AC_CHECK_TYPE([ptrdiff_t], ,
Packit aea12f
    [AC_DEFINE([ptrdiff_t], [long],
Packit aea12f
       [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
Packit aea12f
    ])
Packit aea12f
  AC_REQUIRE([gt_AC_TYPE_INTMAX_T])
Packit aea12f
])
Packit aea12f
Packit aea12f
# Prerequisites of lib/vasnprintf.c.
Packit aea12f
AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([AC_FUNC_ALLOCA])
Packit aea12f
  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
Packit aea12f
  AC_REQUIRE([gt_TYPE_WCHAR_T])
Packit aea12f
  AC_REQUIRE([gt_TYPE_WINT_T])
Packit aea12f
  AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb])
Packit aea12f
  dnl Use the _snprintf function only if it is declared (because on NetBSD it
Packit aea12f
  dnl is defined as a weak alias of snprintf; we prefer to use the latter).
Packit aea12f
  AC_CHECK_DECLS([_snprintf], , , [[#include <stdio.h>]])
Packit aea12f
  dnl Knowing DBL_EXPBIT0_WORD and DBL_EXPBIT0_BIT enables an optimization
Packit aea12f
  dnl in the code for NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE.
Packit aea12f
  AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION])
Packit aea12f
  dnl We can avoid a lot of code by assuming that snprintf's return value
Packit aea12f
  dnl conforms to ISO C99. So check that.
Packit aea12f
  AC_REQUIRE([gl_SNPRINTF_RETVAL_C99])
Packit aea12f
  case "$gl_cv_func_snprintf_retval_c99" in
Packit aea12f
    *yes)
Packit aea12f
      AC_DEFINE([HAVE_SNPRINTF_RETVAL_C99], [1],
Packit aea12f
        [Define if the return value of the snprintf function is the number of
Packit aea12f
         of bytes (excluding the terminating NUL) that would have been produced
Packit aea12f
         if the buffer had been large enough.])
Packit aea12f
      ;;
Packit aea12f
  esac
Packit aea12f
])
Packit aea12f
Packit aea12f
# Extra prerequisites of lib/vasnprintf.c for supporting 'long double'
Packit aea12f
# arguments.
Packit aea12f
AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
Packit aea12f
  case "$gl_cv_func_printf_long_double" in
Packit aea12f
    *yes)
Packit aea12f
      ;;
Packit aea12f
    *)
Packit aea12f
      AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
Packit aea12f
        [Define if the vasnprintf implementation needs special code for
Packit aea12f
         'long double' arguments.])
Packit aea12f
      ;;
Packit aea12f
  esac
Packit aea12f
])
Packit aea12f
Packit aea12f
# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double'
Packit aea12f
# arguments.
Packit aea12f
AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_PRINTF_INFINITE])
Packit aea12f
  case "$gl_cv_func_printf_infinite" in
Packit aea12f
    *yes)
Packit aea12f
      ;;
Packit aea12f
    *)
Packit aea12f
      AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1],
Packit aea12f
        [Define if the vasnprintf implementation needs special code for
Packit aea12f
         infinite 'double' arguments.])
Packit aea12f
      ;;
Packit aea12f
  esac
Packit aea12f
])
Packit aea12f
Packit aea12f
# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double'
Packit aea12f
# arguments.
Packit aea12f
AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
Packit aea12f
  dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if
Packit aea12f
  dnl NEED_PRINTF_LONG_DOUBLE is already set.
Packit aea12f
  AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE])
Packit aea12f
  case "$gl_cv_func_printf_long_double" in
Packit aea12f
    *yes)
Packit aea12f
      case "$gl_cv_func_printf_infinite_long_double" in
Packit aea12f
        *yes)
Packit aea12f
          ;;
Packit aea12f
        *)
Packit aea12f
          AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1],
Packit aea12f
            [Define if the vasnprintf implementation needs special code for
Packit aea12f
             infinite 'long double' arguments.])
Packit aea12f
          ;;
Packit aea12f
      esac
Packit aea12f
      ;;
Packit aea12f
  esac
Packit aea12f
])
Packit aea12f
Packit aea12f
# Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive.
Packit aea12f
AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
Packit aea12f
  case "$gl_cv_func_printf_directive_a" in
Packit aea12f
    *yes)
Packit aea12f
      ;;
Packit aea12f
    *)
Packit aea12f
      AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1],
Packit aea12f
        [Define if the vasnprintf implementation needs special code for
Packit aea12f
         the 'a' and 'A' directives.])
Packit aea12f
      AC_CHECK_FUNCS([nl_langinfo])
Packit aea12f
      ;;
Packit aea12f
  esac
Packit aea12f
])
Packit aea12f
Packit aea12f
# Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive.
Packit aea12f
AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
Packit aea12f
  case "$gl_cv_func_printf_directive_f" in
Packit aea12f
    *yes)
Packit aea12f
      ;;
Packit aea12f
    *)
Packit aea12f
      AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1],
Packit aea12f
        [Define if the vasnprintf implementation needs special code for
Packit aea12f
         the 'F' directive.])
Packit aea12f
      ;;
Packit aea12f
  esac
Packit aea12f
])
Packit aea12f
Packit aea12f
# Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive.
Packit aea12f
AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
Packit aea12f
  case "$gl_cv_func_printf_directive_ls" in
Packit aea12f
    *yes)
Packit aea12f
      ;;
Packit aea12f
    *)
Packit aea12f
      AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1],
Packit aea12f
        [Define if the vasnprintf implementation needs special code for
Packit aea12f
         the 'ls' directive.])
Packit aea12f
      ;;
Packit aea12f
  esac
Packit aea12f
])
Packit aea12f
Packit aea12f
# Extra prerequisites of lib/vasnprintf.c for supporting the ' flag.
Packit aea12f
AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
Packit aea12f
  case "$gl_cv_func_printf_flag_grouping" in
Packit aea12f
    *yes)
Packit aea12f
      ;;
Packit aea12f
    *)
Packit aea12f
      AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1],
Packit aea12f
        [Define if the vasnprintf implementation needs special code for the
Packit aea12f
         ' flag.])
Packit aea12f
      ;;
Packit aea12f
  esac
Packit aea12f
])
Packit aea12f
Packit aea12f
# Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag.
Packit aea12f
AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST])
Packit aea12f
  case "$gl_cv_func_printf_flag_leftadjust" in
Packit aea12f
    *yes)
Packit aea12f
      ;;
Packit aea12f
    *)
Packit aea12f
      AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1],
Packit aea12f
        [Define if the vasnprintf implementation needs special code for the
Packit aea12f
         '-' flag.])
Packit aea12f
      ;;
Packit aea12f
  esac
Packit aea12f
])
Packit aea12f
Packit aea12f
# Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag.
Packit aea12f
AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
Packit aea12f
  case "$gl_cv_func_printf_flag_zero" in
Packit aea12f
    *yes)
Packit aea12f
      ;;
Packit aea12f
    *)
Packit aea12f
      AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1],
Packit aea12f
        [Define if the vasnprintf implementation needs special code for the
Packit aea12f
         0 flag.])
Packit aea12f
      ;;
Packit aea12f
  esac
Packit aea12f
])
Packit aea12f
Packit aea12f
# Extra prerequisites of lib/vasnprintf.c for supporting large precisions.
Packit aea12f
AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_PRINTF_PRECISION])
Packit aea12f
  case "$gl_cv_func_printf_precision" in
Packit aea12f
    *yes)
Packit aea12f
      ;;
Packit aea12f
    *)
Packit aea12f
      AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1],
Packit aea12f
        [Define if the vasnprintf implementation needs special code for
Packit aea12f
         supporting large precisions without arbitrary bounds.])
Packit aea12f
      AC_DEFINE([NEED_PRINTF_DOUBLE], [1],
Packit aea12f
        [Define if the vasnprintf implementation needs special code for
Packit aea12f
         'double' arguments.])
Packit aea12f
      AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
Packit aea12f
        [Define if the vasnprintf implementation needs special code for
Packit aea12f
         'long double' arguments.])
Packit aea12f
      ;;
Packit aea12f
  esac
Packit aea12f
])
Packit aea12f
Packit aea12f
# Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory
Packit aea12f
# conditions.
Packit aea12f
AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_PRINTF_ENOMEM])
Packit aea12f
  case "$gl_cv_func_printf_enomem" in
Packit aea12f
    *yes)
Packit aea12f
      ;;
Packit aea12f
    *)
Packit aea12f
      AC_DEFINE([NEED_PRINTF_ENOMEM], [1],
Packit aea12f
        [Define if the vasnprintf implementation needs special code for
Packit aea12f
         surviving out-of-memory conditions.])
Packit aea12f
      AC_DEFINE([NEED_PRINTF_DOUBLE], [1],
Packit aea12f
        [Define if the vasnprintf implementation needs special code for
Packit aea12f
         'double' arguments.])
Packit aea12f
      AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
Packit aea12f
        [Define if the vasnprintf implementation needs special code for
Packit aea12f
         'long double' arguments.])
Packit aea12f
      ;;
Packit aea12f
  esac
Packit aea12f
])
Packit aea12f
Packit aea12f
# Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance.
Packit aea12f
AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_PREREQ_VASNPRINTF])
Packit aea12f
  gl_PREREQ_VASNPRINTF_LONG_DOUBLE
Packit aea12f
  gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
Packit aea12f
  gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
Packit aea12f
  gl_PREREQ_VASNPRINTF_DIRECTIVE_A
Packit aea12f
  gl_PREREQ_VASNPRINTF_DIRECTIVE_F
Packit aea12f
  gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
Packit aea12f
  gl_PREREQ_VASNPRINTF_FLAG_GROUPING
Packit aea12f
  gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
Packit aea12f
  gl_PREREQ_VASNPRINTF_FLAG_ZERO
Packit aea12f
  gl_PREREQ_VASNPRINTF_PRECISION
Packit aea12f
  gl_PREREQ_VASNPRINTF_ENOMEM
Packit aea12f
])
Packit aea12f
Packit aea12f
# Prerequisites of lib/asnprintf.c.
Packit aea12f
AC_DEFUN([gl_PREREQ_ASNPRINTF],
Packit aea12f
[
Packit aea12f
])