Blame m4/vasnprintf.m4

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