1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

Import gnulib modules printf-posix and vasprintf-posix

These are neccessary because Android's printf is missing basic format
modifiers such as t.

* admin/merge-gnulib (GNULIB_MODULES): Add printf-posix and
vasprintf-posix.  Update from gnulib.
* configure.ac (CFLAGS): Add -DHAVE_CONFIG_H.
This commit is contained in:
Po Lu 2023-01-25 18:39:36 +08:00
parent 9082b4e6ee
commit 6f9a2a8f29
111 changed files with 36064 additions and 3 deletions

83
m4/asm-underscore.m4 Normal file
View file

@ -0,0 +1,83 @@
# asm-underscore.m4 serial 5
dnl Copyright (C) 2010-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible. Based on as-underscore.m4 in GNU clisp.
# gl_ASM_SYMBOL_PREFIX
# Tests for the prefix of C symbols at the assembly language level and the
# linker level. This prefix is either an underscore or empty. Defines the
# C macro USER_LABEL_PREFIX to this prefix, and sets ASM_SYMBOL_PREFIX to
# a stringified variant of this prefix.
AC_DEFUN([gl_ASM_SYMBOL_PREFIX],
[
AC_REQUIRE([AC_PROG_EGREP])
dnl We don't use GCC's __USER_LABEL_PREFIX__ here, because
dnl 1. It works only for GCC.
dnl 2. It is incorrectly defined on some platforms, in some GCC versions.
AC_REQUIRE([gl_C_ASM])
AC_CACHE_CHECK(
[whether C symbols are prefixed with underscore at the linker level],
[gl_cv_prog_as_underscore],
[cat > conftest.c <<EOF
#ifdef __cplusplus
extern "C" int foo (void);
#endif
int foo(void) { return 0; }
EOF
# Look for the assembly language name in the .s file.
AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1
if LC_ALL=C $EGREP '(^|[[^a-zA-Z0-9_]])_foo([[^a-zA-Z0-9_]]|$)' conftest.$gl_asmext >/dev/null; then
gl_cv_prog_as_underscore=yes
else
gl_cv_prog_as_underscore=no
fi
rm -f conftest*
])
if test $gl_cv_prog_as_underscore = yes; then
USER_LABEL_PREFIX=_
else
USER_LABEL_PREFIX=
fi
AC_DEFINE_UNQUOTED([USER_LABEL_PREFIX], [$USER_LABEL_PREFIX],
[Define to the prefix of C symbols at the assembler and linker level,
either an underscore or empty.])
ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"'
AC_SUBST([ASM_SYMBOL_PREFIX])
])
# gl_C_ASM
# Determines how to produce an assembly language file from C source code.
# Sets the variables:
# gl_asmext - the extension of assembly language output,
# gl_c_asm_opt - the C compiler option that produces assembly language output.
AC_DEFUN([gl_C_ASM],
[
AC_EGREP_CPP([MicrosoftCompiler],
[
#ifdef _MSC_VER
MicrosoftCompiler
#endif
],
[dnl Microsoft's 'cl' and 'clang-cl' produce an .asm file, whereas 'clang'
dnl produces a .s file. Need to distinguish 'clang' and 'clang-cl'.
rm -f conftest*
echo 'int dummy;' > conftest.c
AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c) >/dev/null 2>&1
if test -f conftest.o; then
gl_asmext='s'
gl_c_asm_opt='-S'
else
gl_asmext='asm'
gl_c_asm_opt='-c -Fa'
fi
rm -f conftest*
],
[gl_asmext='s'
gl_c_asm_opt='-S'
])
])

116
m4/exponentd.m4 Normal file
View file

@ -0,0 +1,116 @@
# exponentd.m4 serial 3
dnl Copyright (C) 2007-2008, 2010-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_DOUBLE_EXPONENT_LOCATION],
[
AC_CACHE_CHECK([where to find the exponent in a 'double'],
[gl_cv_cc_double_expbit0],
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include <float.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#define NWORDS \
((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
typedef union { double value; unsigned int word[NWORDS]; } memory_double;
static unsigned int ored_words[NWORDS];
static unsigned int anded_words[NWORDS];
static void add_to_ored_words (double x)
{
memory_double m;
size_t i;
/* Clear it first, in case sizeof (double) < sizeof (memory_double). */
memset (&m, 0, sizeof (memory_double));
m.value = x;
for (i = 0; i < NWORDS; i++)
{
ored_words[i] |= m.word[i];
anded_words[i] &= m.word[i];
}
}
int main ()
{
size_t j;
FILE *fp = fopen ("conftest.out", "w");
if (fp == NULL)
return 1;
for (j = 0; j < NWORDS; j++)
anded_words[j] = ~ (unsigned int) 0;
add_to_ored_words (0.25);
add_to_ored_words (0.5);
add_to_ored_words (1.0);
add_to_ored_words (2.0);
add_to_ored_words (4.0);
/* Remove bits that are common (e.g. if representation of the first mantissa
bit is explicit). */
for (j = 0; j < NWORDS; j++)
ored_words[j] &= ~anded_words[j];
/* Now find the nonzero word. */
for (j = 0; j < NWORDS; j++)
if (ored_words[j] != 0)
break;
if (j < NWORDS)
{
size_t i;
for (i = j + 1; i < NWORDS; i++)
if (ored_words[i] != 0)
{
fprintf (fp, "unknown");
return (fclose (fp) != 0);
}
for (i = 0; ; i++)
if ((ored_words[j] >> i) & 1)
{
fprintf (fp, "word %d bit %d", (int) j, (int) i);
return (fclose (fp) != 0);
}
}
fprintf (fp, "unknown");
return (fclose (fp) != 0);
}
]])],
[gl_cv_cc_double_expbit0=`cat conftest.out`],
[gl_cv_cc_double_expbit0="unknown"],
[
dnl On ARM, there are two 'double' floating-point formats, used by
dnl different sets of instructions: The older FPA instructions assume
dnl that they are stored in big-endian word order, while the words
dnl (like integer types) are stored in little-endian byte order.
dnl The newer VFP instructions assume little-endian order
dnl consistently.
AC_EGREP_CPP([mixed_endianness], [
#if defined arm || defined __arm || defined __arm__
mixed_endianness
#endif
],
[gl_cv_cc_double_expbit0="unknown"],
[
pushdef([AC_MSG_CHECKING],[:])dnl
pushdef([AC_MSG_RESULT],[:])dnl
pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl
AC_C_BIGENDIAN(
[gl_cv_cc_double_expbit0="word 0 bit 20"],
[gl_cv_cc_double_expbit0="word 1 bit 20"],
[gl_cv_cc_double_expbit0="unknown"])
popdef([AC_MSG_RESULT_UNQUOTED])dnl
popdef([AC_MSG_RESULT])dnl
popdef([AC_MSG_CHECKING])dnl
])
])
rm -f conftest.out
])
case "$gl_cv_cc_double_expbit0" in
word*bit*)
word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'`
AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word],
[Define as the word index where to find the exponent of 'double'.])
AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit],
[Define as the bit index in the word where to find bit 0 of the exponent of 'double'.])
;;
esac
])

92
m4/exponentf.m4 Normal file
View file

@ -0,0 +1,92 @@
# exponentf.m4 serial 2
dnl Copyright (C) 2007-2008, 2010-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FLOAT_EXPONENT_LOCATION],
[
AC_CACHE_CHECK([where to find the exponent in a 'float'],
[gl_cv_cc_float_expbit0],
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include <float.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#define NWORDS \
((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
typedef union { float value; unsigned int word[NWORDS]; } memory_float;
static unsigned int ored_words[NWORDS];
static unsigned int anded_words[NWORDS];
static void add_to_ored_words (float x)
{
memory_float m;
size_t i;
/* Clear it first, in case
sizeof (float) < sizeof (memory_float). */
memset (&m, 0, sizeof (memory_float));
m.value = x;
for (i = 0; i < NWORDS; i++)
{
ored_words[i] |= m.word[i];
anded_words[i] &= m.word[i];
}
}
int main ()
{
size_t j;
FILE *fp = fopen ("conftest.out", "w");
if (fp == NULL)
return 1;
for (j = 0; j < NWORDS; j++)
anded_words[j] = ~ (unsigned int) 0;
add_to_ored_words (0.25f);
add_to_ored_words (0.5f);
add_to_ored_words (1.0f);
add_to_ored_words (2.0f);
add_to_ored_words (4.0f);
/* Remove bits that are common (e.g. if representation of the first mantissa
bit is explicit). */
for (j = 0; j < NWORDS; j++)
ored_words[j] &= ~anded_words[j];
/* Now find the nonzero word. */
for (j = 0; j < NWORDS; j++)
if (ored_words[j] != 0)
break;
if (j < NWORDS)
{
size_t i;
for (i = j + 1; i < NWORDS; i++)
if (ored_words[i] != 0)
{
fprintf (fp, "unknown");
return (fclose (fp) != 0);
}
for (i = 0; ; i++)
if ((ored_words[j] >> i) & 1)
{
fprintf (fp, "word %d bit %d", (int) j, (int) i);
return (fclose (fp) != 0);
}
}
fprintf (fp, "unknown");
return (fclose (fp) != 0);
}
]])],
[gl_cv_cc_float_expbit0=`cat conftest.out`],
[gl_cv_cc_float_expbit0="unknown"],
[gl_cv_cc_float_expbit0="word 0 bit 23"])
rm -f conftest.out
])
case "$gl_cv_cc_float_expbit0" in
word*bit*)
word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'`
AC_DEFINE_UNQUOTED([FLT_EXPBIT0_WORD], [$word],
[Define as the word index where to find the exponent of 'float'.])
AC_DEFINE_UNQUOTED([FLT_EXPBIT0_BIT], [$bit],
[Define as the bit index in the word where to find bit 0 of the exponent of 'float'.])
;;
esac
])

112
m4/exponentl.m4 Normal file
View file

@ -0,0 +1,112 @@
# exponentl.m4 serial 5
dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_LONG_DOUBLE_EXPONENT_LOCATION],
[
AC_REQUIRE([gl_BIGENDIAN])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
AC_CACHE_CHECK([where to find the exponent in a 'long double'],
[gl_cv_cc_long_double_expbit0],
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include <float.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#define NWORDS \
((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
typedef union { long double value; unsigned int word[NWORDS]; }
memory_long_double;
static unsigned int ored_words[NWORDS];
static unsigned int anded_words[NWORDS];
static void add_to_ored_words (long double *x)
{
memory_long_double m;
size_t i;
/* Clear it first, in case
sizeof (long double) < sizeof (memory_long_double). */
memset (&m, 0, sizeof (memory_long_double));
m.value = *x;
for (i = 0; i < NWORDS; i++)
{
ored_words[i] |= m.word[i];
anded_words[i] &= m.word[i];
}
}
int main ()
{
static long double samples[5] = { 0.25L, 0.5L, 1.0L, 2.0L, 4.0L };
size_t j;
FILE *fp = fopen ("conftest.out", "w");
if (fp == NULL)
return 1;
for (j = 0; j < NWORDS; j++)
anded_words[j] = ~ (unsigned int) 0;
for (j = 0; j < 5; j++)
add_to_ored_words (&samples[j]);
/* Remove bits that are common (e.g. if representation of the first mantissa
bit is explicit). */
for (j = 0; j < NWORDS; j++)
ored_words[j] &= ~anded_words[j];
/* Now find the nonzero word. */
for (j = 0; j < NWORDS; j++)
if (ored_words[j] != 0)
break;
if (j < NWORDS)
{
size_t i;
for (i = j + 1; i < NWORDS; i++)
if (ored_words[i] != 0)
{
fprintf (fp, "unknown");
return (fclose (fp) != 0);
}
for (i = 0; ; i++)
if ((ored_words[j] >> i) & 1)
{
fprintf (fp, "word %d bit %d", (int) j, (int) i);
return (fclose (fp) != 0);
}
}
fprintf (fp, "unknown");
return (fclose (fp) != 0);
}
]])],
[gl_cv_cc_long_double_expbit0=`cat conftest.out`],
[gl_cv_cc_long_double_expbit0="unknown"],
[
dnl When cross-compiling, in general we don't know. It depends on the
dnl ABI and compiler version. There are too many cases.
gl_cv_cc_long_double_expbit0="unknown"
case "$host_os" in
mingw*) # On native Windows (little-endian), we know the result
# in two cases: mingw, MSVC.
AC_EGREP_CPP([Known], [
#ifdef __MINGW32__
Known
#endif
], [gl_cv_cc_long_double_expbit0="word 2 bit 0"])
AC_EGREP_CPP([Known], [
#ifdef _MSC_VER
Known
#endif
], [gl_cv_cc_long_double_expbit0="word 1 bit 20"])
;;
esac
])
rm -f conftest.out
])
case "$gl_cv_cc_long_double_expbit0" in
word*bit*)
word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'`
AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_WORD], [$word],
[Define as the word index where to find the exponent of 'long double'.])
AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_BIT], [$bit],
[Define as the bit index in the word where to find bit 0 of the exponent of 'long double'.])
;;
esac
])

106
m4/float_h.m4 Normal file
View file

@ -0,0 +1,106 @@
# float_h.m4 serial 13
dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FLOAT_H],
[
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_CANONICAL_HOST])
GL_GENERATE_FLOAT_H=false
REPLACE_FLOAT_LDBL=0
case "$host_os" in
aix* | beos* | openbsd* | mirbsd* | irix*)
GL_GENERATE_FLOAT_H=true
;;
freebsd* | dragonfly*)
case "$host_cpu" in
changequote(,)dnl
i[34567]86 )
changequote([,])dnl
GL_GENERATE_FLOAT_H=true
;;
x86_64 )
# On x86_64 systems, the C compiler may still be generating
# 32-bit code.
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if defined __LP64__ || defined __x86_64__ || defined __amd64__
int ok;
#else
error fail
#endif
]])],
[],
[GL_GENERATE_FLOAT_H=true])
;;
esac
;;
linux*)
case "$host_cpu" in
powerpc*)
GL_GENERATE_FLOAT_H=true
;;
esac
;;
esac
case "$host_os" in
aix* | freebsd* | dragonfly* | linux*)
if $GL_GENERATE_FLOAT_H; then
REPLACE_FLOAT_LDBL=1
fi
;;
esac
dnl Test against glibc-2.7 Linux/SPARC64 bug.
REPLACE_ITOLD=0
AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works],
[gl_cv_func_itold_works],
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
int i = -1;
volatile long double ld;
int main ()
{
ld += i * 1.0L;
if (ld > 0)
return 1;
return 0;
}]])],
[gl_cv_func_itold_works=yes],
[gl_cv_func_itold_works=no],
[case "$host" in
sparc*-*-linux*)
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if defined __LP64__ || defined __arch64__
int ok;
#else
error fail
#endif
]])],
[gl_cv_func_itold_works="guessing no"],
[gl_cv_func_itold_works="guessing yes"])
;;
# Guess yes on native Windows.
mingw*) gl_cv_func_itold_works="guessing yes" ;;
*) gl_cv_func_itold_works="guessing yes" ;;
esac
])
])
case "$gl_cv_func_itold_works" in
*no)
REPLACE_ITOLD=1
dnl We add the workaround to <float.h> but also to <math.h>,
dnl to increase the chances that the fix function gets pulled in.
GL_GENERATE_FLOAT_H=true
;;
esac
if $GL_GENERATE_FLOAT_H; then
gl_NEXT_HEADERS([float.h])
fi
AC_SUBST([REPLACE_ITOLD])
])

181
m4/frexp.m4 Normal file
View file

@ -0,0 +1,181 @@
# frexp.m4 serial 16
dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_FREXP],
[
AC_REQUIRE([gl_MATH_H_DEFAULTS])
AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM])
FREXP_LIBM=
if test $gl_cv_func_frexp_no_libm = no; then
AC_CACHE_CHECK([whether frexp() can be used with libm],
[gl_cv_func_frexp_in_libm],
[
save_LIBS="$LIBS"
LIBS="$LIBS -lm"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
double x;]],
[[int e; return frexp (x, &e) > 0;]])],
[gl_cv_func_frexp_in_libm=yes],
[gl_cv_func_frexp_in_libm=no])
LIBS="$save_LIBS"
])
if test $gl_cv_func_frexp_in_libm = yes; then
FREXP_LIBM=-lm
fi
fi
if test $gl_cv_func_frexp_no_libm = yes \
|| test $gl_cv_func_frexp_in_libm = yes; then
save_LIBS="$LIBS"
LIBS="$LIBS $FREXP_LIBM"
gl_FUNC_FREXP_WORKS
LIBS="$save_LIBS"
case "$gl_cv_func_frexp_works" in
*yes) gl_func_frexp=yes ;;
*) gl_func_frexp=no; REPLACE_FREXP=1; FREXP_LIBM= ;;
esac
else
gl_func_frexp=no
fi
if test $gl_func_frexp = yes; then
AC_DEFINE([HAVE_FREXP], [1],
[Define if the frexp() function is available and works.])
fi
AC_SUBST([FREXP_LIBM])
])
AC_DEFUN([gl_FUNC_FREXP_NO_LIBM],
[
AC_REQUIRE([gl_MATH_H_DEFAULTS])
AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM])
if test $gl_cv_func_frexp_no_libm = yes; then
gl_FUNC_FREXP_WORKS
case "$gl_cv_func_frexp_works" in
*yes) gl_func_frexp_no_libm=yes ;;
*) gl_func_frexp_no_libm=no; REPLACE_FREXP=1 ;;
esac
else
gl_func_frexp_no_libm=no
dnl Set REPLACE_FREXP here because the system may have frexp in libm.
REPLACE_FREXP=1
fi
if test $gl_func_frexp_no_libm = yes; then
AC_DEFINE([HAVE_FREXP_IN_LIBC], [1],
[Define if the frexp() function is available in libc.])
fi
])
dnl Test whether frexp() can be used without linking with libm.
dnl Set gl_cv_func_frexp_no_libm to 'yes' or 'no' accordingly.
AC_DEFUN([gl_CHECK_FREXP_NO_LIBM],
[
AC_CACHE_CHECK([whether frexp() can be used without linking with libm],
[gl_cv_func_frexp_no_libm],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
double x;]],
[[int e; return frexp (x, &e) > 0;]])],
[gl_cv_func_frexp_no_libm=yes],
[gl_cv_func_frexp_no_libm=no])
])
])
dnl Test whether frexp() works also on denormalized numbers (this fails e.g. on
dnl NetBSD 3.0), on infinite numbers (this fails e.g. on IRIX 6.5 and mingw),
dnl and on negative zero (this fails e.g. on NetBSD 4.99 and mingw).
AC_DEFUN([gl_FUNC_FREXP_WORKS],
[
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
AC_CHECK_DECLS_ONCE([alarm])
AC_CACHE_CHECK([whether frexp works], [gl_cv_func_frexp_works],
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include <float.h>
#include <math.h>
#include <string.h>
#if HAVE_DECL_ALARM
# include <signal.h>
# include <unistd.h>
#endif
/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
ICC 10.0 has a bug when optimizing the expression -zero.
The expression -DBL_MIN * DBL_MIN does not work when cross-compiling
to PowerPC on Mac OS X 10.5. */
#if defined __hpux || defined __sgi || defined __ICC
static double
compute_minus_zero (void)
{
return -DBL_MIN * DBL_MIN;
}
# define minus_zero compute_minus_zero ()
#else
double minus_zero = -0.0;
#endif
int main()
{
int result = 0;
int i;
volatile double x;
double zero = 0.0;
#if HAVE_DECL_ALARM
/* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite
number. Let the test fail in this case. */
signal (SIGALRM, SIG_DFL);
alarm (5);
#endif
/* Test on denormalized numbers. */
for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5)
;
if (x > 0.0)
{
int exp;
double y = frexp (x, &exp);
/* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022.
On NetBSD: y = 0.75. Correct: y = 0.5. */
if (y != 0.5)
result |= 1;
}
/* Test on infinite numbers. */
x = 1.0 / zero;
{
int exp;
double y = frexp (x, &exp);
if (y != x)
result |= 2;
}
/* Test on negative zero. */
x = minus_zero;
{
int exp;
double y = frexp (x, &exp);
if (memcmp (&y, &x, sizeof x))
result |= 4;
}
return result;
}]])],
[gl_cv_func_frexp_works=yes],
[gl_cv_func_frexp_works=no],
[case "$host_os" in
netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;;
mingw*) # Guess yes with MSVC, no with mingw.
AC_EGREP_CPP([Good], [
#ifdef _MSC_VER
Good
#endif
],
[gl_cv_func_frexp_works="guessing yes"],
[gl_cv_func_frexp_works="guessing no"])
;;
*) gl_cv_func_frexp_works="guessing yes" ;;
esac
])
])
])

233
m4/frexpl.m4 Normal file
View file

@ -0,0 +1,233 @@
# frexpl.m4 serial 22
dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_FREXPL],
[
AC_REQUIRE([gl_MATH_H_DEFAULTS])
AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
dnl Persuade glibc <math.h> to declare frexpl().
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
dnl Check whether it's declared.
dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>.
AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]])
FREXPL_LIBM=
if test $HAVE_DECL_FREXPL = 1; then
gl_CHECK_FREXPL_NO_LIBM
if test $gl_cv_func_frexpl_no_libm = no; then
AC_CACHE_CHECK([whether frexpl() can be used with libm],
[gl_cv_func_frexpl_in_libm],
[
save_LIBS="$LIBS"
LIBS="$LIBS -lm"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
long double x;]],
[[int e; return frexpl (x, &e) > 0;]])],
[gl_cv_func_frexpl_in_libm=yes],
[gl_cv_func_frexpl_in_libm=no])
LIBS="$save_LIBS"
])
if test $gl_cv_func_frexpl_in_libm = yes; then
FREXPL_LIBM=-lm
fi
fi
if test $gl_cv_func_frexpl_no_libm = yes \
|| test $gl_cv_func_frexpl_in_libm = yes; then
save_LIBS="$LIBS"
LIBS="$LIBS $FREXPL_LIBM"
gl_FUNC_FREXPL_WORKS
LIBS="$save_LIBS"
case "$gl_cv_func_frexpl_works" in
*yes) gl_func_frexpl=yes ;;
*) gl_func_frexpl=no; REPLACE_FREXPL=1 ;;
esac
else
gl_func_frexpl=no
fi
if test $gl_func_frexpl = yes; then
AC_DEFINE([HAVE_FREXPL], [1],
[Define if the frexpl() function is available.])
fi
fi
if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; then
dnl Find libraries needed to link lib/frexpl.c.
if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then
AC_REQUIRE([gl_FUNC_FREXP])
FREXPL_LIBM="$FREXP_LIBM"
else
FREXPL_LIBM=
fi
fi
AC_SUBST([FREXPL_LIBM])
])
AC_DEFUN([gl_FUNC_FREXPL_NO_LIBM],
[
AC_REQUIRE([gl_MATH_H_DEFAULTS])
AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
dnl Check whether it's declared.
dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>.
AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]])
if test $HAVE_DECL_FREXPL = 1; then
gl_CHECK_FREXPL_NO_LIBM
if test $gl_cv_func_frexpl_no_libm = yes; then
gl_FUNC_FREXPL_WORKS
case "$gl_cv_func_frexpl_works" in
*yes) gl_func_frexpl_no_libm=yes ;;
*) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;;
esac
else
gl_func_frexpl_no_libm=no
dnl Set REPLACE_FREXPL here because the system may have frexpl in libm.
REPLACE_FREXPL=1
fi
if test $gl_func_frexpl_no_libm = yes; then
AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1],
[Define if the frexpl() function is available in libc.])
fi
fi
])
dnl Test whether frexpl() can be used without linking with libm.
dnl Set gl_cv_func_frexpl_no_libm to 'yes' or 'no' accordingly.
AC_DEFUN([gl_CHECK_FREXPL_NO_LIBM],
[
AC_CACHE_CHECK([whether frexpl() can be used without linking with libm],
[gl_cv_func_frexpl_no_libm],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
long double x;]],
[[int e; return frexpl (x, &e) > 0;]])],
[gl_cv_func_frexpl_no_libm=yes],
[gl_cv_func_frexpl_no_libm=no])
])
])
dnl Test whether frexpl() works on finite numbers (this fails on
dnl Mac OS X 10.4/PowerPC, on AIX 5.1, and on BeOS), on denormalized numbers
dnl (this fails on Mac OS X 10.5/i386), and also on infinite numbers (this
dnl fails e.g. on IRIX 6.5 and mingw).
AC_DEFUN([gl_FUNC_FREXPL_WORKS],
[
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
AC_CACHE_CHECK([whether frexpl works], [gl_cv_func_frexpl_works],
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include <float.h>
#include <math.h>
/* Override the values of <float.h>, like done in float.in.h. */
#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__)
# undef LDBL_MIN_EXP
# define LDBL_MIN_EXP (-16381)
#endif
#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__)
# undef LDBL_MIN_EXP
# define LDBL_MIN_EXP (-16381)
#endif
#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__
# undef LDBL_MIN_EXP
# define LDBL_MIN_EXP DBL_MIN_EXP
#endif
#if defined __sgi && (LDBL_MANT_DIG >= 106)
# if defined __GNUC__
# undef LDBL_MIN_EXP
# define LDBL_MIN_EXP DBL_MIN_EXP
# endif
#endif
extern
#ifdef __cplusplus
"C"
#endif
long double frexpl (long double, int *);
long double zero = 0.0L;
int main()
{
int result = 0;
volatile long double x;
/* Test on finite numbers that fails on AIX 5.1. */
x = 16.0L;
{
int exp = -9999;
frexpl (x, &exp);
if (exp != 5)
result |= 1;
}
/* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl
function returns an invalid (incorrectly normalized) value: it returns
y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 }
but the correct result is
0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */
x = 1.01L;
{
int exp = -9999;
long double y = frexpl (x, &exp);
if (!(exp == 1 && y == 0.505L))
result |= 2;
}
/* Test on large finite numbers. This fails on BeOS at i = 16322, while
LDBL_MAX_EXP = 16384.
In the loop end test, we test x against Infinity, rather than comparing
i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP. */
{
int i;
for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L)
{
int exp = -9999;
frexpl (x, &exp);
if (exp != i)
{
result |= 4;
break;
}
}
}
/* Test on denormalized numbers. */
{
int i;
for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L)
;
if (x > 0.0L)
{
int exp;
long double y = frexpl (x, &exp);
/* On machines with IEEE854 arithmetic: x = 1.68105e-4932,
exp = -16382, y = 0.5. On Mac OS X 10.5: exp = -16384, y = 0.5. */
if (exp != LDBL_MIN_EXP - 1)
result |= 8;
}
}
/* Test on infinite numbers. */
/* The Microsoft MSVC 14 compiler chokes on the expression 1.0 / 0.0. */
x = 1.0L / zero;
{
int exp;
long double y = frexpl (x, &exp);
if (y != x)
result |= 16;
}
return result;
}]])],
[gl_cv_func_frexpl_works=yes],
[gl_cv_func_frexpl_works=no],
[
changequote(,)dnl
case "$host_os" in
aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*)
gl_cv_func_frexpl_works="guessing no";;
*) gl_cv_func_frexpl_works="guessing yes";;
esac
changequote([,])dnl
])
])
])

13
m4/fseterr.m4 Normal file
View file

@ -0,0 +1,13 @@
# fseterr.m4 serial 2
dnl Copyright (C) 2012-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_FSETERR],
[
gl_CHECK_FUNCS_ANDROID([__fseterr],
[[#include <stdio.h>
#include <stdio_ext.h>
]])
])

View file

@ -95,10 +95,15 @@ AC_DEFUN([gl_EARLY],
# Code from module filename:
# Code from module filevercmp:
# Code from module flexmember:
# Code from module float:
# Code from module fpending:
# Code from module fpieee:
AC_REQUIRE([gl_FP_IEEE])
# Code from module fpucw:
# Code from module free-posix:
# Code from module frexp-nolibm:
# Code from module frexpl-nolibm:
# Code from module fseterr:
# Code from module fstatat:
# Code from module fsusage:
# Code from module fsync:
@ -125,6 +130,9 @@ AC_DEFUN([gl_EARLY],
# Code from module include_next:
# Code from module intprops:
# Code from module inttypes-incomplete:
# Code from module isnand-nolibm:
# Code from module isnanf-nolibm:
# Code from module isnanl-nolibm:
# Code from module largefile:
AC_REQUIRE([AC_SYS_LARGEFILE])
# Code from module lchmod:
@ -135,6 +143,7 @@ AC_DEFUN([gl_EARLY],
# Code from module malloc-gnu:
# Code from module malloc-posix:
# Code from module manywarnings:
# Code from module math:
# Code from module memmem-simple:
# Code from module mempcpy:
# Code from module memrchr:
@ -152,6 +161,10 @@ AC_DEFUN([gl_EARLY],
# Code from module openat-h:
# Code from module pathmax:
# Code from module pipe2:
# Code from module printf-frexp:
# Code from module printf-frexpl:
# Code from module printf-posix:
# Code from module printf-safe:
# Code from module pselect:
# Code from module pthread_sigmask:
# Code from module qcopy-acl:
@ -165,6 +178,8 @@ AC_DEFUN([gl_EARLY],
# Code from module sig2str:
# Code from module sigdescr_np:
# Code from module signal-h:
# Code from module signbit:
# Code from module size_max:
# Code from module snippet/_Noreturn:
# Code from module snippet/arg-nonnull:
# Code from module snippet/c++defs:
@ -208,10 +223,15 @@ AC_DEFUN([gl_EARLY],
# Code from module utimens:
# Code from module utimensat:
# Code from module vararrays:
# Code from module vasnprintf:
# Code from module vasprintf:
# Code from module vasprintf-posix:
# Code from module verify:
# Code from module vfprintf-posix:
# Code from module vla:
# Code from module warnings:
# Code from module xalloc-oversized:
# Code from module xsize:
])
# This macro should be invoked from .//configure.ac, in the section
@ -319,6 +339,11 @@ AC_DEFUN([gl_INIT],
gl_FILE_HAS_ACL
gl_FILEMODE
AC_C_FLEXIBLE_ARRAY_MEMBER
gl_FLOAT_H
gl_CONDITIONAL_HEADER([float.h])
AC_PROG_MKDIR_P
gl_CONDITIONAL([GL_COND_OBJ_FLOAT], [test $REPLACE_FLOAT_LDBL = 1])
gl_CONDITIONAL([GL_COND_OBJ_ITOLD], [test $REPLACE_ITOLD = 1])
gl_FUNC_FPENDING
gl_CONDITIONAL([GL_COND_OBJ_FPENDING], [test $gl_cv_func___fpending = no])
gl_FUNC_FREE
@ -327,6 +352,16 @@ AC_DEFUN([gl_INIT],
gl_PREREQ_FREE
])
gl_STDLIB_MODULE_INDICATOR([free-posix])
gl_FUNC_FREXP_NO_LIBM
if test $gl_func_frexp_no_libm != yes; then
AC_LIBOBJ([frexp])
fi
gl_MATH_MODULE_INDICATOR([frexp])
gl_FUNC_FREXPL_NO_LIBM
if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl_no_libm = no; then
AC_LIBOBJ([frexpl])
fi
gl_MATH_MODULE_INDICATOR([frexpl])
gl_FUNC_FSTATAT
gl_CONDITIONAL([GL_COND_OBJ_FSTATAT],
[test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1])
@ -394,6 +429,16 @@ AC_DEFUN([gl_INIT],
gl_INTTYPES_INCOMPLETE
gl_INTTYPES_H_REQUIRE_DEFAULTS
AC_PROG_MKDIR_P
gl_FUNC_ISNAND_NO_LIBM
if test $gl_func_isnand_no_libm != yes; then
AC_LIBOBJ([isnand])
gl_PREREQ_ISNAND
fi
gl_FUNC_ISNANL_NO_LIBM
if test $gl_func_isnanl_no_libm != yes; then
AC_LIBOBJ([isnanl])
gl_PREREQ_ISNANL
fi
AC_REQUIRE([gl_LARGEFILE])
gl___INLINE
gl_LIBGMP
@ -409,6 +454,9 @@ AC_DEFUN([gl_INIT],
gl_PREREQ_LSTAT
])
gl_SYS_STAT_MODULE_INDICATOR([lstat])
gl_MATH_H
gl_MATH_H_REQUIRE_DEFAULTS
AC_PROG_MKDIR_P
gl_FUNC_MEMMEM_SIMPLE
if test $HAVE_MEMMEM = 0 || test $REPLACE_MEMMEM = 1; then
AC_LIBOBJ([memmem])
@ -458,6 +506,11 @@ AC_DEFUN([gl_INIT],
gl_PATHMAX
gl_FUNC_PIPE2
gl_UNISTD_MODULE_INDICATOR([pipe2])
gl_FUNC_PRINTF_FREXP
gl_FUNC_PRINTF_FREXPL
gl_FUNC_PRINTF_POSIX
gl_STDIO_MODULE_INDICATOR([printf-posix])
m4_divert_text([INIT_PREPARE], [gl_printf_safe=yes])
gl_FUNC_PSELECT
gl_CONDITIONAL([GL_COND_OBJ_PSELECT],
[test $HAVE_PSELECT = 0 || test $REPLACE_PSELECT = 1])
@ -504,6 +557,9 @@ AC_DEFUN([gl_INIT],
gl_SIGNAL_H
gl_SIGNAL_H_REQUIRE_DEFAULTS
AC_PROG_MKDIR_P
gl_SIGNBIT
gl_CONDITIONAL([GL_COND_OBJ_SIGNBIT3], [test $REPLACE_SIGNBIT = 1])
gl_MATH_MODULE_INDICATOR([signbit])
gl_TYPE_SOCKLEN_T
gt_TYPE_SSIZE_T
gl_STAT_TIME
@ -646,11 +702,18 @@ AC_DEFUN([gl_INIT],
[test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1])
gl_SYS_STAT_MODULE_INDICATOR([utimensat])
AC_C_VARARRAYS
gl_FUNC_VASPRINTF
gl_STDIO_MODULE_INDICATOR([vasprintf])
m4_ifdef([AM_XGETTEXT_OPTION],
[AM_][XGETTEXT_OPTION([--flag=asprintf:2:c-format])
AM_][XGETTEXT_OPTION([--flag=vasprintf:2:c-format])])
gl_FUNC_VASPRINTF_POSIX
gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b=false
gl_gnulib_enabled_cloexec=false
gl_gnulib_enabled_dirfd=false
gl_gnulib_enabled_925677f0343de64b89a9f0c790b4104c=false
gl_gnulib_enabled_euidaccess=false
gl_gnulib_enabled_fseterr=false
gl_gnulib_enabled_getdelim=false
gl_gnulib_enabled_getdtablesize=false
gl_gnulib_enabled_getgroups=false
@ -658,6 +721,7 @@ AC_DEFUN([gl_INIT],
gl_gnulib_enabled_fd38c7e463b54744b77b98aeafb4fa7c=false
gl_gnulib_enabled_8444034ea779b88768865bb60b4fb8c9=false
gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1=false
gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66=false
gl_gnulib_enabled_lchmod=false
gl_gnulib_enabled_e80bf6f757095d2e5fc94dafb8f8fc8b=false
gl_gnulib_enabled_ef455225c00f5049c808c2eda3e76866=false
@ -668,9 +732,13 @@ AC_DEFUN([gl_INIT],
gl_gnulib_enabled_d3b2383720ee0e541357aa2aac598e2b=false
gl_gnulib_enabled_61bcaca76b3e6f9ae55d57a1c3193bc4=false
gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c=false
gl_gnulib_enabled_size_max=false
gl_gnulib_enabled_strtoll=false
gl_gnulib_enabled_utimens=false
gl_gnulib_enabled_vasnprintf=false
gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b=false
gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec=false
gl_gnulib_enabled_xsize=false
func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b ()
{
if ! $gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b; then
@ -723,6 +791,14 @@ AC_DEFUN([gl_INIT],
func_gl_gnulib_m4code_6099e9737f757db36c47fa9d9f02e88c
fi
}
func_gl_gnulib_m4code_fseterr ()
{
if ! $gl_gnulib_enabled_fseterr; then
gl_FUNC_FSETERR
gl_CONDITIONAL([GL_COND_OBJ_FSETERR], [test $ac_cv_func___fseterr = no])
gl_gnulib_enabled_fseterr=true
fi
}
func_gl_gnulib_m4code_getdelim ()
{
if ! $gl_gnulib_enabled_getdelim; then
@ -804,6 +880,17 @@ AC_DEFUN([gl_INIT],
fi
fi
}
func_gl_gnulib_m4code_3f0e593033d1fc2c127581960f641b66 ()
{
if ! $gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66; then
gl_FUNC_ISNANF_NO_LIBM
if test $gl_func_isnanf_no_libm != yes; then
AC_LIBOBJ([isnanf])
gl_PREREQ_ISNANF
fi
gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66=true
fi
}
func_gl_gnulib_m4code_lchmod ()
{
if ! $gl_gnulib_enabled_lchmod; then
@ -930,6 +1017,13 @@ AC_DEFUN([gl_INIT],
gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c=true
fi
}
func_gl_gnulib_m4code_size_max ()
{
if ! $gl_gnulib_enabled_size_max; then
gl_SIZE_MAX
gl_gnulib_enabled_size_max=true
fi
}
func_gl_gnulib_m4code_strtoll ()
{
if ! $gl_gnulib_enabled_strtoll; then
@ -950,12 +1044,44 @@ AC_DEFUN([gl_INIT],
gl_gnulib_enabled_utimens=true
fi
}
func_gl_gnulib_m4code_vasnprintf ()
{
if ! $gl_gnulib_enabled_vasnprintf; then
AC_REQUIRE([AC_C_RESTRICT])
gl_FUNC_VASNPRINTF
gl_gnulib_enabled_vasnprintf=true
func_gl_gnulib_m4code_xsize
fi
}
func_gl_gnulib_m4code_ed5616be3593d355b981ffab56b9f37b ()
{
if ! $gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b; then
gl_FUNC_VFPRINTF_POSIX
gl_STDIO_MODULE_INDICATOR([vfprintf-posix])
gl_MODULE_INDICATOR([vfprintf-posix])
gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b=true
if test $REPLACE_VFPRINTF = 1; then
func_gl_gnulib_m4code_fseterr
fi
if test $REPLACE_VFPRINTF = 1; then
func_gl_gnulib_m4code_vasnprintf
fi
fi
}
func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec ()
{
if ! $gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec; then
gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec=true
fi
}
func_gl_gnulib_m4code_xsize ()
{
if ! $gl_gnulib_enabled_xsize; then
gl_XSIZE
gl_gnulib_enabled_xsize=true
func_gl_gnulib_m4code_size_max
fi
}
if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
func_gl_gnulib_m4code_925677f0343de64b89a9f0c790b4104c
fi
@ -1013,6 +1139,9 @@ AC_DEFUN([gl_INIT],
if case $host_os in mingw*) false;; *) test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1;; esac; then
func_gl_gnulib_m4code_open
fi
if test $REPLACE_PRINTF = 1; then
func_gl_gnulib_m4code_ed5616be3593d355b981ffab56b9f37b
fi
if test $HAVE_READLINKAT = 0 || test $REPLACE_READLINKAT = 1; then
func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b
fi
@ -1022,6 +1151,9 @@ AC_DEFUN([gl_INIT],
if test $ac_use_included_regex = yes; then
func_gl_gnulib_m4code_fd38c7e463b54744b77b98aeafb4fa7c
fi
if test $REPLACE_SIGNBIT = 1; then
func_gl_gnulib_m4code_3f0e593033d1fc2c127581960f641b66
fi
if { test $HAVE_DECL_STRTOIMAX = 0 || test $REPLACE_STRTOIMAX = 1; } && test $ac_cv_type_long_long_int = yes; then
func_gl_gnulib_m4code_strtoll
fi
@ -1037,12 +1169,19 @@ AC_DEFUN([gl_INIT],
if test $HAVE_UTIMENSAT = 0 || test $REPLACE_UTIMENSAT = 1; then
func_gl_gnulib_m4code_utimens
fi
if test $HAVE_VASPRINTF = 0 || test $REPLACE_VASPRINTF = 1; then
func_gl_gnulib_m4code_vasnprintf
fi
if test $HAVE_VASPRINTF = 0 || test $REPLACE_VASPRINTF = 1; then
func_gl_gnulib_m4code_vasnprintf
fi
m4_pattern_allow([^gl_GNULIB_ENABLED_])
AM_CONDITIONAL([gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b], [$gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b])
AM_CONDITIONAL([gl_GNULIB_ENABLED_cloexec], [$gl_gnulib_enabled_cloexec])
AM_CONDITIONAL([gl_GNULIB_ENABLED_dirfd], [$gl_gnulib_enabled_dirfd])
AM_CONDITIONAL([gl_GNULIB_ENABLED_925677f0343de64b89a9f0c790b4104c], [$gl_gnulib_enabled_925677f0343de64b89a9f0c790b4104c])
AM_CONDITIONAL([gl_GNULIB_ENABLED_euidaccess], [$gl_gnulib_enabled_euidaccess])
AM_CONDITIONAL([gl_GNULIB_ENABLED_fseterr], [$gl_gnulib_enabled_fseterr])
AM_CONDITIONAL([gl_GNULIB_ENABLED_getdelim], [$gl_gnulib_enabled_getdelim])
AM_CONDITIONAL([gl_GNULIB_ENABLED_getdtablesize], [$gl_gnulib_enabled_getdtablesize])
AM_CONDITIONAL([gl_GNULIB_ENABLED_getgroups], [$gl_gnulib_enabled_getgroups])
@ -1050,6 +1189,7 @@ AC_DEFUN([gl_INIT],
AM_CONDITIONAL([gl_GNULIB_ENABLED_fd38c7e463b54744b77b98aeafb4fa7c], [$gl_gnulib_enabled_fd38c7e463b54744b77b98aeafb4fa7c])
AM_CONDITIONAL([gl_GNULIB_ENABLED_8444034ea779b88768865bb60b4fb8c9], [$gl_gnulib_enabled_8444034ea779b88768865bb60b4fb8c9])
AM_CONDITIONAL([gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1], [$gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1])
AM_CONDITIONAL([gl_GNULIB_ENABLED_3f0e593033d1fc2c127581960f641b66], [$gl_gnulib_enabled_3f0e593033d1fc2c127581960f641b66])
AM_CONDITIONAL([gl_GNULIB_ENABLED_lchmod], [$gl_gnulib_enabled_lchmod])
AM_CONDITIONAL([gl_GNULIB_ENABLED_e80bf6f757095d2e5fc94dafb8f8fc8b], [$gl_gnulib_enabled_e80bf6f757095d2e5fc94dafb8f8fc8b])
AM_CONDITIONAL([gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866], [$gl_gnulib_enabled_ef455225c00f5049c808c2eda3e76866])
@ -1060,9 +1200,13 @@ AC_DEFUN([gl_INIT],
AM_CONDITIONAL([gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b], [$gl_gnulib_enabled_d3b2383720ee0e541357aa2aac598e2b])
AM_CONDITIONAL([gl_GNULIB_ENABLED_61bcaca76b3e6f9ae55d57a1c3193bc4], [$gl_gnulib_enabled_61bcaca76b3e6f9ae55d57a1c3193bc4])
AM_CONDITIONAL([gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c], [$gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c])
AM_CONDITIONAL([gl_GNULIB_ENABLED_size_max], [$gl_gnulib_enabled_size_max])
AM_CONDITIONAL([gl_GNULIB_ENABLED_strtoll], [$gl_gnulib_enabled_strtoll])
AM_CONDITIONAL([gl_GNULIB_ENABLED_utimens], [$gl_gnulib_enabled_utimens])
AM_CONDITIONAL([gl_GNULIB_ENABLED_vasnprintf], [$gl_gnulib_enabled_vasnprintf])
AM_CONDITIONAL([gl_GNULIB_ENABLED_ed5616be3593d355b981ffab56b9f37b], [$gl_gnulib_enabled_ed5616be3593d355b981ffab56b9f37b])
AM_CONDITIONAL([gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec], [$gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec])
AM_CONDITIONAL([gl_GNULIB_ENABLED_xsize], [$gl_gnulib_enabled_xsize])
# End of code from modules
m4_ifval(gl_LIBSOURCES_LIST, [
m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
@ -1248,6 +1392,8 @@ AC_DEFUN([gl_FILE_LIST], [
lib/allocator.c
lib/allocator.h
lib/arg-nonnull.h
lib/asnprintf.c
lib/asprintf.c
lib/assert.in.h
lib/at-func.c
lib/attribute.h
@ -1299,9 +1445,17 @@ AC_DEFUN([gl_FILE_LIST], [
lib/filevercmp.c
lib/filevercmp.h
lib/flexmember.h
lib/float+.h
lib/float.c
lib/float.in.h
lib/fpending.c
lib/fpending.h
lib/fpucw.h
lib/free.c
lib/frexp.c
lib/frexpl.c
lib/fseterr.c
lib/fseterr.h
lib/fstatat.c
lib/fsusage.c
lib/fsusage.h
@ -1336,6 +1490,14 @@ AC_DEFUN([gl_FILE_LIST], [
lib/intprops-internal.h
lib/intprops.h
lib/inttypes.in.h
lib/isnan.c
lib/isnand-nolibm.h
lib/isnand.c
lib/isnanf-nolibm.h
lib/isnanf.c
lib/isnanl-nolibm.h
lib/isnanl.c
lib/itold.c
lib/lchmod.c
lib/libc-config.h
lib/limits.in.h
@ -1352,6 +1514,8 @@ AC_DEFUN([gl_FILE_LIST], [
lib/malloc/scratch_buffer_grow.c
lib/malloc/scratch_buffer_grow_preserve.c
lib/malloc/scratch_buffer_set_array_size.c
lib/math.c
lib/math.in.h
lib/md5-stream.c
lib/md5.c
lib/md5.h
@ -1376,6 +1540,15 @@ AC_DEFUN([gl_FILE_LIST], [
lib/openat.h
lib/pathmax.h
lib/pipe2.c
lib/printf-args.c
lib/printf-args.h
lib/printf-frexp.c
lib/printf-frexp.h
lib/printf-frexpl.c
lib/printf-frexpl.h
lib/printf-parse.c
lib/printf-parse.h
lib/printf.c
lib/pselect.c
lib/pthread_sigmask.c
lib/qcopy-acl.c
@ -1403,6 +1576,10 @@ AC_DEFUN([gl_FILE_LIST], [
lib/sig2str.h
lib/sigdescr_np.c
lib/signal.in.h
lib/signbitd.c
lib/signbitf.c
lib/signbitl.c
lib/size_max.h
lib/stat-time.c
lib/stat-time.h
lib/stdalign.in.h
@ -1447,15 +1624,22 @@ AC_DEFUN([gl_FILE_LIST], [
lib/utimens.c
lib/utimens.h
lib/utimensat.c
lib/vasnprintf.c
lib/vasnprintf.h
lib/vasprintf.c
lib/verify.h
lib/vfprintf.c
lib/vla.h
lib/warn-on-use.h
lib/xalloc-oversized.h
lib/xsize.c
lib/xsize.h
m4/00gnulib.m4
m4/__inline.m4
m4/absolute-header.m4
m4/acl.m4
m4/alloca.m4
m4/asm-underscore.m4
m4/assert_h.m4
m4/builtin-expect.m4
m4/byteswap.m4
@ -1473,6 +1657,9 @@ AC_DEFUN([gl_FILE_LIST], [
m4/errno_h.m4
m4/euidaccess.m4
m4/execinfo.m4
m4/exponentd.m4
m4/exponentf.m4
m4/exponentl.m4
m4/extensions.m4
m4/extern-inline.m4
m4/faccessat.m4
@ -1483,9 +1670,13 @@ AC_DEFUN([gl_FILE_LIST], [
m4/fdopendir.m4
m4/filemode.m4
m4/flexmember.m4
m4/float_h.m4
m4/fpending.m4
m4/fpieee.m4
m4/free.m4
m4/frexp.m4
m4/frexpl.m4
m4/fseterr.m4
m4/fstatat.m4
m4/fsusage.m4
m4/fsync.m4
@ -1504,15 +1695,22 @@ AC_DEFUN([gl_FILE_LIST], [
m4/group-member.m4
m4/ieee754-h.m4
m4/include_next.m4
m4/intmax_t.m4
m4/inttypes.m4
m4/inttypes_h.m4
m4/isnand.m4
m4/isnanf.m4
m4/isnanl.m4
m4/largefile.m4
m4/lchmod.m4
m4/ldexpl.m4
m4/libgmp.m4
m4/limits-h.m4
m4/lstat.m4
m4/malloc.m4
m4/manywarnings-c++.m4
m4/manywarnings.m4
m4/math_h.m4
m4/mbstate_t.m4
m4/md5.m4
m4/memmem.m4
@ -1535,6 +1733,10 @@ AC_DEFUN([gl_FILE_LIST], [
m4/pathmax.m4
m4/pid_t.m4
m4/pipe2.m4
m4/printf-frexp.m4
m4/printf-frexpl.m4
m4/printf-posix-rpl.m4
m4/printf.m4
m4/pselect.m4
m4/pthread_sigmask.m4
m4/rawmemchr.m4
@ -1548,6 +1750,8 @@ AC_DEFUN([gl_FILE_LIST], [
m4/sig2str.m4
m4/sigdescr_np.m4
m4/signal_h.m4
m4/signbit.m4
m4/size_max.m4
m4/socklen.m4
m4/ssize_t.m4
m4/stat-time.m4
@ -1555,6 +1759,7 @@ AC_DEFUN([gl_FILE_LIST], [
m4/stdalign.m4
m4/stddef_h.m4
m4/stdint.m4
m4/stdint_h.m4
m4/stdio_h.m4
m4/stdlib_h.m4
m4/stpcpy.m4
@ -1583,10 +1788,15 @@ AC_DEFUN([gl_FILE_LIST], [
m4/utimensat.m4
m4/utimes.m4
m4/vararrays.m4
m4/vasnprintf.m4
m4/vasprintf-posix.m4
m4/vasprintf.m4
m4/vfprintf-posix.m4
m4/warn-on-use.m4
m4/warnings.m4
m4/wchar_t.m4
m4/wint_t.m4
m4/xattr.m4
m4/xsize.m4
m4/zzgnulib.m4
])

59
m4/intmax_t.m4 Normal file
View file

@ -0,0 +1,59 @@
# intmax_t.m4 serial 9
dnl Copyright (C) 1997-2004, 2006-2007, 2009-2023 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Paul Eggert.
AC_PREREQ([2.53])
# Define intmax_t to 'long' or 'long long'
# if it is not already defined in <stdint.h> or <inttypes.h>.
AC_DEFUN([gl_AC_TYPE_INTMAX_T],
[
dnl For simplicity, we assume that a header file defines 'intmax_t' if and
dnl only if it defines 'uintmax_t'.
AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
AC_REQUIRE([gl_AC_HEADER_STDINT_H])
if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
AC_DEFINE_UNQUOTED([intmax_t], [long long],
[Define to long or long long if <inttypes.h> and <stdint.h> don't define.])
else
AC_DEFINE([HAVE_INTMAX_T], [1],
[Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
fi
])
dnl An alternative would be to explicitly test for 'intmax_t'.
AC_DEFUN([gt_AC_TYPE_INTMAX_T],
[
AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
AC_REQUIRE([gl_AC_HEADER_STDINT_H])
AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[
#include <stddef.h>
#include <stdlib.h>
#if HAVE_STDINT_H_WITH_UINTMAX
#include <stdint.h>
#endif
#if HAVE_INTTYPES_H_WITH_UINTMAX
#include <inttypes.h>
#endif
]],
[[intmax_t x = -1; return !x;]])],
[gt_cv_c_intmax_t=yes],
[gt_cv_c_intmax_t=no])])
if test $gt_cv_c_intmax_t = yes; then
AC_DEFINE([HAVE_INTMAX_T], [1],
[Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
else
AC_DEFINE_UNQUOTED([intmax_t], [long long],
[Define to long or long long if <stdint.h> and <inttypes.h> don't define.])
fi
])

29
m4/inttypes_h.m4 Normal file
View file

@ -0,0 +1,29 @@
# inttypes_h.m4 serial 10
dnl Copyright (C) 1997-2004, 2006, 2008-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Paul Eggert.
# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
# doesn't clash with <sys/types.h>, and declares uintmax_t.
AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
[
AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[
#include <sys/types.h>
#include <inttypes.h>
]],
[[uintmax_t i = (uintmax_t) -1; return !i;]])],
[gl_cv_header_inttypes_h=yes],
[gl_cv_header_inttypes_h=no])])
if test $gl_cv_header_inttypes_h = yes; then
AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1],
[Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
and declares uintmax_t. ])
fi
])

96
m4/isnand.m4 Normal file
View file

@ -0,0 +1,96 @@
# isnand.m4 serial 12
dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Check how to get or define isnand().
AC_DEFUN([gl_FUNC_ISNAND],
[
AC_REQUIRE([gl_MATH_H_DEFAULTS])
ISNAND_LIBM=
gl_HAVE_ISNAND_NO_LIBM
if test $gl_cv_func_isnand_no_libm = no; then
gl_HAVE_ISNAND_IN_LIBM
if test $gl_cv_func_isnand_in_libm = yes; then
ISNAND_LIBM=-lm
fi
fi
dnl The variable gl_func_isnand set here is used by isnan.m4.
if test $gl_cv_func_isnand_no_libm = yes \
|| test $gl_cv_func_isnand_in_libm = yes; then
gl_func_isnand=yes
else
gl_func_isnand=no
HAVE_ISNAND=0
fi
AC_SUBST([ISNAND_LIBM])
])
dnl Check how to get or define isnand() without linking with libm.
AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM],
[
gl_HAVE_ISNAND_NO_LIBM
gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm
if test $gl_cv_func_isnand_no_libm = yes; then
AC_DEFINE([HAVE_ISNAND_IN_LIBC], [1],
[Define if the isnan(double) function is available in libc.])
fi
])
dnl Prerequisites of replacement isnand definition. It does not need -lm.
AC_DEFUN([gl_PREREQ_ISNAND],
[
AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION])
])
dnl Test whether isnand() can be used with libm.
AC_DEFUN([gl_HAVE_ISNAND_IN_LIBM],
[
AC_CACHE_CHECK([whether isnan(double) can be used with libm],
[gl_cv_func_isnand_in_libm],
[
save_LIBS="$LIBS"
LIBS="$LIBS -lm"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
#if (__GNUC__ >= 4) || (__clang_major__ >= 4)
# undef isnand
# define isnand(x) __builtin_isnan ((double)(x))
#elif defined isnan
# undef isnand
# define isnand(x) isnan ((double)(x))
#endif
double x;]],
[[return isnand (x);]])],
[gl_cv_func_isnand_in_libm=yes],
[gl_cv_func_isnand_in_libm=no])
LIBS="$save_LIBS"
])
])
AC_DEFUN([gl_HAVE_ISNAND_NO_LIBM],
[
AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm],
[gl_cv_func_isnand_no_libm],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
#if (__GNUC__ >= 4) || (__clang_major__ >= 4)
# undef isnand
# define isnand(x) __builtin_isnan ((double)(x))
#else
# undef isnand
# define isnand(x) isnan ((double)(x))
#endif
double x;]],
[[return isnand (x);]])],
[gl_cv_func_isnand_no_libm=yes],
[gl_cv_func_isnand_no_libm=no])
])
])

197
m4/isnanf.m4 Normal file
View file

@ -0,0 +1,197 @@
# isnanf.m4 serial 18
dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Check how to get or define isnanf().
AC_DEFUN([gl_FUNC_ISNANF],
[
AC_REQUIRE([gl_MATH_H_DEFAULTS])
ISNANF_LIBM=
gl_HAVE_ISNANF_NO_LIBM
if test $gl_cv_func_isnanf_no_libm = no; then
gl_HAVE_ISNANF_IN_LIBM
if test $gl_cv_func_isnanf_in_libm = yes; then
ISNANF_LIBM=-lm
fi
fi
dnl The variable gl_func_isnanf set here is used by isnan.m4.
if test $gl_cv_func_isnanf_no_libm = yes \
|| test $gl_cv_func_isnanf_in_libm = yes; then
save_LIBS="$LIBS"
LIBS="$LIBS $ISNANF_LIBM"
gl_ISNANF_WORKS
LIBS="$save_LIBS"
case "$gl_cv_func_isnanf_works" in
*yes) gl_func_isnanf=yes ;;
*) gl_func_isnanf=no; ISNANF_LIBM= ;;
esac
else
gl_func_isnanf=no
fi
if test $gl_func_isnanf != yes; then
HAVE_ISNANF=0
fi
AC_SUBST([ISNANF_LIBM])
])
dnl Check how to get or define isnanf() without linking with libm.
AC_DEFUN([gl_FUNC_ISNANF_NO_LIBM],
[
gl_HAVE_ISNANF_NO_LIBM
if test $gl_cv_func_isnanf_no_libm = yes; then
gl_ISNANF_WORKS
fi
if test $gl_cv_func_isnanf_no_libm = yes \
&& { case "$gl_cv_func_isnanf_works" in
*yes) true;;
*) false;;
esac
}; then
gl_func_isnanf_no_libm=yes
AC_DEFINE([HAVE_ISNANF_IN_LIBC], [1],
[Define if the isnan(float) function is available in libc.])
else
gl_func_isnanf_no_libm=no
fi
])
dnl Prerequisites of replacement isnanf definition. It does not need -lm.
AC_DEFUN([gl_PREREQ_ISNANF],
[
gl_FLOAT_EXPONENT_LOCATION
])
dnl Test whether isnanf() can be used without libm.
AC_DEFUN([gl_HAVE_ISNANF_NO_LIBM],
[
AC_CACHE_CHECK([whether isnan(float) can be used without linking with libm],
[gl_cv_func_isnanf_no_libm],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
#if (__GNUC__ >= 4) || (__clang_major__ >= 4)
# undef isnanf
# define isnanf(x) __builtin_isnan ((float)(x))
#elif defined isnan
# undef isnanf
# define isnanf(x) isnan ((float)(x))
#endif
float x;]],
[[return isnanf (x);]])],
[gl_cv_func_isnanf_no_libm=yes],
[gl_cv_func_isnanf_no_libm=no])
])
])
dnl Test whether isnanf() can be used with libm.
AC_DEFUN([gl_HAVE_ISNANF_IN_LIBM],
[
AC_CACHE_CHECK([whether isnan(float) can be used with libm],
[gl_cv_func_isnanf_in_libm],
[
save_LIBS="$LIBS"
LIBS="$LIBS -lm"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
#if (__GNUC__ >= 4) || (__clang_major__ >= 4)
# undef isnanf
# define isnanf(x) __builtin_isnan ((float)(x))
#elif defined isnan
# undef isnanf
# define isnanf(x) isnan ((float)(x))
#endif
float x;]],
[[return isnanf (x);]])],
[gl_cv_func_isnanf_in_libm=yes],
[gl_cv_func_isnanf_in_libm=no])
LIBS="$save_LIBS"
])
])
dnl Test whether isnanf() rejects Infinity (this fails on Solaris 2.5.1),
dnl recognizes a NaN (this fails on IRIX 6.5 with cc), and recognizes a NaN
dnl with in-memory representation 0x7fbfffff (this fails on IRIX 6.5).
AC_DEFUN([gl_ISNANF_WORKS],
[
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION])
AC_CACHE_CHECK([whether isnan(float) works], [gl_cv_func_isnanf_works],
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include <math.h>
#if (__GNUC__ >= 4) || (__clang_major__ >= 4)
# undef isnanf
# define isnanf(x) __builtin_isnan ((float)(x))
#elif defined isnan
# undef isnanf
# define isnanf(x) isnan ((float)(x))
#endif
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
#ifdef __DECC
static float
NaN ()
{
static float zero = 0.0f;
return zero / zero;
}
#else
# define NaN() (0.0f / 0.0f)
#endif
#define NWORDS \
((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
typedef union { unsigned int word[NWORDS]; float value; } memory_float;
int main()
{
int result = 0;
if (isnanf (1.0f / 0.0f))
result |= 1;
if (!isnanf (NaN ()))
result |= 2;
#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT
/* The isnanf function should be immune against changes in the sign bit and
in the mantissa bits. The xor operation twiddles a bit that can only be
a sign bit or a mantissa bit. */
if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0)
{
memory_float m;
m.value = NaN ();
/* Set the bits below the exponent to 01111...111. */
m.word[0] &= -1U << FLT_EXPBIT0_BIT;
m.word[0] |= (1U << (FLT_EXPBIT0_BIT - 1)) - 1;
if (!isnanf (m.value))
result |= 4;
}
#endif
return result;
}]])],
[gl_cv_func_isnanf_works=yes],
[gl_cv_func_isnanf_works=no],
[case "$host_os" in
irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;;
mingw*) # Guess yes on mingw, no on MSVC.
AC_EGREP_CPP([Known], [
#ifdef __MINGW32__
Known
#endif
],
[gl_cv_func_isnanf_works="guessing yes"],
[gl_cv_func_isnanf_works="guessing no"])
;;
*) gl_cv_func_isnanf_works="guessing yes" ;;
esac
])
])
])

248
m4/isnanl.m4 Normal file
View file

@ -0,0 +1,248 @@
# isnanl.m4 serial 22
dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_ISNANL],
[
AC_REQUIRE([gl_MATH_H_DEFAULTS])
ISNANL_LIBM=
gl_HAVE_ISNANL_NO_LIBM
if test $gl_cv_func_isnanl_no_libm = no; then
gl_HAVE_ISNANL_IN_LIBM
if test $gl_cv_func_isnanl_in_libm = yes; then
ISNANL_LIBM=-lm
fi
fi
dnl The variable gl_func_isnanl set here is used by isnan.m4.
if test $gl_cv_func_isnanl_no_libm = yes \
|| test $gl_cv_func_isnanl_in_libm = yes; then
save_LIBS="$LIBS"
LIBS="$LIBS $ISNANL_LIBM"
gl_FUNC_ISNANL_WORKS
LIBS="$save_LIBS"
case "$gl_cv_func_isnanl_works" in
*yes) gl_func_isnanl=yes ;;
*) gl_func_isnanl=no; ISNANL_LIBM= ;;
esac
else
gl_func_isnanl=no
fi
if test $gl_func_isnanl != yes; then
HAVE_ISNANL=0
fi
AC_SUBST([ISNANL_LIBM])
])
AC_DEFUN([gl_FUNC_ISNANL_NO_LIBM],
[
gl_HAVE_ISNANL_NO_LIBM
gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm
if test $gl_func_isnanl_no_libm = yes; then
gl_FUNC_ISNANL_WORKS
case "$gl_cv_func_isnanl_works" in
*yes) ;;
*) gl_func_isnanl_no_libm=no ;;
esac
fi
if test $gl_func_isnanl_no_libm = yes; then
AC_DEFINE([HAVE_ISNANL_IN_LIBC], [1],
[Define if the isnan(long double) function is available in libc.])
fi
])
dnl Prerequisites of replacement isnanl definition. It does not need -lm.
AC_DEFUN([gl_PREREQ_ISNANL],
[
gl_LONG_DOUBLE_EXPONENT_LOCATION
AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
])
dnl Test whether isnanl() can be used without libm.
AC_DEFUN([gl_HAVE_ISNANL_NO_LIBM],
[
AC_CACHE_CHECK([whether isnan(long double) can be used without linking with libm],
[gl_cv_func_isnanl_no_libm],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
#if (__GNUC__ >= 4) || (__clang_major__ >= 4)
# undef isnanl
# define isnanl(x) __builtin_isnan ((long double)(x))
#elif defined isnan
# undef isnanl
# define isnanl(x) isnan ((long double)(x))
#endif
long double x;]],
[[return isnanl (x);]])],
[gl_cv_func_isnanl_no_libm=yes],
[gl_cv_func_isnanl_no_libm=no])
])
])
dnl Test whether isnanl() can be used with libm.
AC_DEFUN([gl_HAVE_ISNANL_IN_LIBM],
[
AC_CACHE_CHECK([whether isnan(long double) can be used with libm],
[gl_cv_func_isnanl_in_libm],
[
save_LIBS="$LIBS"
LIBS="$LIBS -lm"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
#if (__GNUC__ >= 4) || (__clang_major__ >= 4)
# undef isnanl
# define isnanl(x) __builtin_isnan ((long double)(x))
#elif defined isnan
# undef isnanl
# define isnanl(x) isnan ((long double)(x))
#endif
long double x;]],
[[return isnanl (x);]])],
[gl_cv_func_isnanl_in_libm=yes],
[gl_cv_func_isnanl_in_libm=no])
LIBS="$save_LIBS"
])
])
dnl Test whether isnanl() recognizes all canonical numbers which are neither
dnl finite nor infinite.
AC_DEFUN([gl_FUNC_ISNANL_WORKS],
[
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([gl_BIGENDIAN])
AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
AC_CACHE_CHECK([whether isnanl works], [gl_cv_func_isnanl_works],
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include <float.h>
#include <limits.h>
#include <math.h>
#if (__GNUC__ >= 4) || (__clang_major__ >= 4)
# undef isnanl
# define isnanl(x) __builtin_isnan ((long double)(x))
#elif defined isnan
# undef isnanl
# define isnanl(x) isnan ((long double)(x))
#endif
#define NWORDS \
((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
typedef union { unsigned int word[NWORDS]; long double value; }
memory_long_double;
/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the
runtime type conversion. */
#ifdef __sgi
static long double NaNl ()
{
double zero = 0.0;
return zero / zero;
}
#else
# define NaNl() (0.0L / 0.0L)
#endif
int main ()
{
int result = 0;
if (!isnanl (NaNl ()))
result |= 1;
{
memory_long_double m;
unsigned int i;
/* The isnanl function should be immune against changes in the sign bit and
in the mantissa bits. The xor operation twiddles a bit that can only be
a sign bit or a mantissa bit (since the exponent never extends to
bit 31). */
m.value = NaNl ();
m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
for (i = 0; i < NWORDS; i++)
m.word[i] |= 1;
if (!isnanl (m.value))
result |= 1;
}
#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
/* Representation of an 80-bit 'long double' as an initializer for a sequence
of 'unsigned int' words. */
# ifdef WORDS_BIGENDIAN
# define LDBL80_WORDS(exponent,manthi,mantlo) \
{ ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \
(unsigned int) (mantlo) << 16 \
}
# else
# define LDBL80_WORDS(exponent,manthi,mantlo) \
{ mantlo, manthi, exponent }
# endif
{ /* Quiet NaN. */
static memory_long_double x =
{ LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
if (!isnanl (x.value))
result |= 2;
}
{
/* Signalling NaN. */
static memory_long_double x =
{ LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
if (!isnanl (x.value))
result |= 2;
}
/* isnanl should return something even for noncanonical values. */
{ /* Pseudo-NaN. */
static memory_long_double x =
{ LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
if (isnanl (x.value) && !isnanl (x.value))
result |= 4;
}
{ /* Pseudo-Infinity. */
static memory_long_double x =
{ LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
if (isnanl (x.value) && !isnanl (x.value))
result |= 8;
}
{ /* Pseudo-Zero. */
static memory_long_double x =
{ LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
if (isnanl (x.value) && !isnanl (x.value))
result |= 16;
}
{ /* Unnormalized number. */
static memory_long_double x =
{ LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
if (isnanl (x.value) && !isnanl (x.value))
result |= 32;
}
{ /* Pseudo-Denormal. */
static memory_long_double x =
{ LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
if (isnanl (x.value) && !isnanl (x.value))
result |= 64;
}
#endif
return result;
}]])],
[gl_cv_func_isnanl_works=yes],
[gl_cv_func_isnanl_works=no],
[case "$host_os" in
mingw*) # Guess yes on mingw, no on MSVC.
AC_EGREP_CPP([Known], [
#ifdef __MINGW32__
Known
#endif
],
[gl_cv_func_isnanl_works="guessing yes"],
[gl_cv_func_isnanl_works="guessing no"])
;;
*) gl_cv_func_isnanl_works="guessing yes" ;;
esac
])
])
])

135
m4/ldexpl.m4 Normal file
View file

@ -0,0 +1,135 @@
# ldexpl.m4 serial 17
dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_LDEXPL],
[
AC_REQUIRE([gl_MATH_H_DEFAULTS])
AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
AC_REQUIRE([gl_FUNC_ISNANL]) dnl for ISNANL_LIBM
dnl Persuade glibc <math.h> to declare ldexpl().
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
dnl Check whether it's declared.
dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in <math.h>.
AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include <math.h>]])
LDEXPL_LIBM=
if test $HAVE_DECL_LDEXPL = 1; then
gl_CHECK_LDEXPL_NO_LIBM
if test $gl_cv_func_ldexpl_no_libm = no; then
AC_CACHE_CHECK([whether ldexpl() can be used with libm],
[gl_cv_func_ldexpl_in_libm],
[
save_LIBS="$LIBS"
LIBS="$LIBS -lm"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
long double x;]],
[[return ldexpl (x, -1) > 0;]])],
[gl_cv_func_ldexpl_in_libm=yes],
[gl_cv_func_ldexpl_in_libm=no])
LIBS="$save_LIBS"
])
if test $gl_cv_func_ldexpl_in_libm = yes; then
LDEXPL_LIBM=-lm
fi
fi
if test $gl_cv_func_ldexpl_no_libm = yes \
|| test $gl_cv_func_ldexpl_in_libm = yes; then
save_LIBS="$LIBS"
LIBS="$LIBS $LDEXPL_LIBM"
gl_FUNC_LDEXPL_WORKS
LIBS="$save_LIBS"
case "$gl_cv_func_ldexpl_works" in
*yes) gl_func_ldexpl=yes ;;
*) gl_func_ldexpl=no; REPLACE_LDEXPL=1 ;;
esac
else
gl_func_ldexpl=no
fi
if test $gl_func_ldexpl = yes; then
AC_DEFINE([HAVE_LDEXPL], [1],
[Define if the ldexpl() function is available.])
fi
fi
if test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; then
dnl Find libraries needed to link lib/ldexpl.c.
if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then
AC_REQUIRE([gl_FUNC_LDEXP])
LDEXPL_LIBM="$LDEXP_LIBM"
else
LDEXPL_LIBM="$ISNANL_LIBM"
fi
fi
AC_SUBST([LDEXPL_LIBM])
])
dnl Test whether ldexpl() can be used without linking with libm.
dnl Set gl_cv_func_ldexpl_no_libm to 'yes' or 'no' accordingly.
AC_DEFUN([gl_CHECK_LDEXPL_NO_LIBM],
[
AC_CACHE_CHECK([whether ldexpl() can be used without linking with libm],
[gl_cv_func_ldexpl_no_libm],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
long double x;]],
[[return ldexpl (x, -1) > 0;]])],
[gl_cv_func_ldexpl_no_libm=yes],
[gl_cv_func_ldexpl_no_libm=no])
])
])
dnl Test whether ldexpl() works on finite numbers (this fails on AIX 5.1
dnl and Mac OS X 10.4/PowerPC).
AC_DEFUN([gl_FUNC_LDEXPL_WORKS],
[
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
AC_CACHE_CHECK([whether ldexpl works], [gl_cv_func_ldexpl_works],
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include <math.h>
extern
#ifdef __cplusplus
"C"
#endif
long double ldexpl (long double, int);
int main()
{
int result = 0;
{
volatile long double x = 1.0;
volatile long double y = ldexpl (x, -1);
if (y != 0.5L)
result |= 1;
}
{
volatile long double x = 1.73205L;
volatile long double y = ldexpl (x, 0);
if (y != x)
result |= 2;
}
return result;
}]])],
[gl_cv_func_ldexpl_works=yes],
[gl_cv_func_ldexpl_works=no],
[
changequote(,)dnl
case "$host_os" in
aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no" ;;
# Guess yes on native Windows.
mingw*) gl_cv_func_ldexpl_works="guessing yes" ;;
*) gl_cv_func_ldexpl_works="guessing yes" ;;
esac
changequote([,])dnl
])
])
])

391
m4/math_h.m4 Normal file
View file

@ -0,0 +1,391 @@
# math_h.m4 serial 125
dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN_ONCE([gl_MATH_H],
[
AC_REQUIRE([gl_MATH_H_DEFAULTS])
gl_CHECK_NEXT_HEADERS([math.h])
AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works],
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]],
[[/* Solaris 10 has a broken definition of NAN. Other platforms
fail to provide NAN, or provide it only in C99 mode; this
test only needs to fail when NAN is provided but wrong. */
float f = 1.0f;
#ifdef NAN
f = NAN;
#endif
return f == 0;]])],
[gl_cv_header_math_nan_works=yes],
[gl_cv_header_math_nan_works=no])])
if test $gl_cv_header_math_nan_works = no; then
REPLACE_NAN=1
fi
AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works],
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]],
[[/* Solaris 10 has a broken definition of HUGE_VAL. */
double d = HUGE_VAL;
return d == 0;]])],
[gl_cv_header_math_huge_val_works=yes],
[gl_cv_header_math_huge_val_works=no])])
if test $gl_cv_header_math_huge_val_works = no; then
REPLACE_HUGE_VAL=1
fi
dnl Check for declarations of anything we want to poison if the
dnl corresponding gnulib module is not in use.
gl_WARN_ON_USE_PREPARE([[#include <math.h>]],
[acosf acosl asinf asinl atanf atanl
cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf
expf expl exp2 exp2f exp2l expm1 expm1f expm1l
fabsf fabsl floorf floorl fma fmaf fmal
fmod fmodf fmodl frexpf frexpl hypotf hypotl
ilogb ilogbf ilogbl
ldexpf ldexpl
log logf logl log10 log10f log10l log1p log1pf log1pl log2 log2f log2l
logb logbf logbl
modf modff modfl powf
remainder remainderf remainderl
rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl
tanf tanl tanhf trunc truncf truncl])
])
# gl_MATH_MODULE_INDICATOR([modulename])
# sets the shell variable that indicates the presence of the given module
# to a C preprocessor expression that will evaluate to 1.
# This macro invocation must not occur in macros that are AC_REQUIREd.
AC_DEFUN([gl_MATH_MODULE_INDICATOR],
[
dnl Ensure to expand the default settings once only.
gl_MATH_H_REQUIRE_DEFAULTS
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
# Initializes the default values for AC_SUBSTed shell variables.
# This macro must not be AC_REQUIREd. It must only be invoked, and only
# outside of macros or in macros that are not AC_REQUIREd.
AC_DEFUN([gl_MATH_H_REQUIRE_DEFAULTS],
[
m4_defun(GL_MODULE_INDICATOR_PREFIX[_MATH_H_MODULE_INDICATOR_DEFAULTS], [
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACOSF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACOSL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ASINF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ASINL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATANF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATANL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATAN2F])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRT])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRTF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRTL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEIL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEILF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEILL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGN])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGNF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGNL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSHF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2F])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2L])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1F])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1L])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FABSF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FABSL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOOR])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOORF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOORL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMA])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMAF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMAL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMOD])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMODF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMODL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXPF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXP])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXPL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOT])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOTF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOTL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGB])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGBF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGBL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISFINITE])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISINF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNAN])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNANF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNAND])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNANL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXPF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXPL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10F])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10L])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1P])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1PF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1PL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2F])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2L])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGB])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGBF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGBL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODFF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODFL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POWF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDER])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDERF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDERL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINT])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINTF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINTL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUND])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUNDF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUNDL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGNBIT])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINHF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SQRTF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SQRTL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANHF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNC])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCF])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCL])
dnl Support Microsoft deprecated alias function names by default.
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_J0], [1])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_J1], [1])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_JN], [1])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_Y0], [1])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_Y1], [1])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_YN], [1])
])
m4_require(GL_MODULE_INDICATOR_PREFIX[_MATH_H_MODULE_INDICATOR_DEFAULTS])
AC_REQUIRE([gl_MATH_H_DEFAULTS])
])
AC_DEFUN([gl_MATH_H_DEFAULTS],
[
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF])
HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL])
HAVE_ASINF=1; AC_SUBST([HAVE_ASINF])
HAVE_ASINL=1; AC_SUBST([HAVE_ASINL])
HAVE_ATANF=1; AC_SUBST([HAVE_ATANF])
HAVE_ATANL=1; AC_SUBST([HAVE_ATANL])
HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F])
HAVE_CBRT=1; AC_SUBST([HAVE_CBRT])
HAVE_CBRTF=1; AC_SUBST([HAVE_CBRTF])
HAVE_CBRTL=1; AC_SUBST([HAVE_CBRTL])
HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN])
HAVE_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL])
HAVE_COSF=1; AC_SUBST([HAVE_COSF])
HAVE_COSL=1; AC_SUBST([HAVE_COSL])
HAVE_COSHF=1; AC_SUBST([HAVE_COSHF])
HAVE_EXPF=1; AC_SUBST([HAVE_EXPF])
HAVE_EXPL=1; AC_SUBST([HAVE_EXPL])
HAVE_EXPM1=1; AC_SUBST([HAVE_EXPM1])
HAVE_EXPM1F=1; AC_SUBST([HAVE_EXPM1F])
HAVE_FABSF=1; AC_SUBST([HAVE_FABSF])
HAVE_FABSL=1; AC_SUBST([HAVE_FABSL])
HAVE_FMA=1; AC_SUBST([HAVE_FMA])
HAVE_FMAF=1; AC_SUBST([HAVE_FMAF])
HAVE_FMAL=1; AC_SUBST([HAVE_FMAL])
HAVE_FMODF=1; AC_SUBST([HAVE_FMODF])
HAVE_FMODL=1; AC_SUBST([HAVE_FMODL])
HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF])
HAVE_HYPOTF=1; AC_SUBST([HAVE_HYPOTF])
HAVE_HYPOTL=1; AC_SUBST([HAVE_HYPOTL])
HAVE_ILOGB=1; AC_SUBST([HAVE_ILOGB])
HAVE_ILOGBF=1; AC_SUBST([HAVE_ILOGBF])
HAVE_ILOGBL=1; AC_SUBST([HAVE_ILOGBL])
HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF])
HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND])
HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL])
HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF])
HAVE_LOGF=1; AC_SUBST([HAVE_LOGF])
HAVE_LOGL=1; AC_SUBST([HAVE_LOGL])
HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F])
HAVE_LOG10L=1; AC_SUBST([HAVE_LOG10L])
HAVE_LOG1P=1; AC_SUBST([HAVE_LOG1P])
HAVE_LOG1PF=1; AC_SUBST([HAVE_LOG1PF])
HAVE_LOG1PL=1; AC_SUBST([HAVE_LOG1PL])
HAVE_LOGBF=1; AC_SUBST([HAVE_LOGBF])
HAVE_LOGBL=1; AC_SUBST([HAVE_LOGBL])
HAVE_MODFF=1; AC_SUBST([HAVE_MODFF])
HAVE_MODFL=1; AC_SUBST([HAVE_MODFL])
HAVE_POWF=1; AC_SUBST([HAVE_POWF])
HAVE_REMAINDER=1; AC_SUBST([HAVE_REMAINDER])
HAVE_REMAINDERF=1; AC_SUBST([HAVE_REMAINDERF])
HAVE_RINT=1; AC_SUBST([HAVE_RINT])
HAVE_RINTL=1; AC_SUBST([HAVE_RINTL])
HAVE_SINF=1; AC_SUBST([HAVE_SINF])
HAVE_SINL=1; AC_SUBST([HAVE_SINL])
HAVE_SINHF=1; AC_SUBST([HAVE_SINHF])
HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF])
HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL])
HAVE_TANF=1; AC_SUBST([HAVE_TANF])
HAVE_TANL=1; AC_SUBST([HAVE_TANL])
HAVE_TANHF=1; AC_SUBST([HAVE_TANHF])
HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL])
HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL])
HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL])
HAVE_DECL_CBRTF=1; AC_SUBST([HAVE_DECL_CBRTF])
HAVE_DECL_CBRTL=1; AC_SUBST([HAVE_DECL_CBRTL])
HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF])
HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL])
HAVE_DECL_COPYSIGNF=1; AC_SUBST([HAVE_DECL_COPYSIGNF])
HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL])
HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL])
HAVE_DECL_EXP2=1; AC_SUBST([HAVE_DECL_EXP2])
HAVE_DECL_EXP2F=1; AC_SUBST([HAVE_DECL_EXP2F])
HAVE_DECL_EXP2L=1; AC_SUBST([HAVE_DECL_EXP2L])
HAVE_DECL_EXPM1L=1; AC_SUBST([HAVE_DECL_EXPM1L])
HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF])
HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL])
HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL])
HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL])
HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL])
HAVE_DECL_LOG10L=1; AC_SUBST([HAVE_DECL_LOG10L])
HAVE_DECL_LOG2=1; AC_SUBST([HAVE_DECL_LOG2])
HAVE_DECL_LOG2F=1; AC_SUBST([HAVE_DECL_LOG2F])
HAVE_DECL_LOG2L=1; AC_SUBST([HAVE_DECL_LOG2L])
HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB])
HAVE_DECL_REMAINDER=1; AC_SUBST([HAVE_DECL_REMAINDER])
HAVE_DECL_REMAINDERL=1; AC_SUBST([HAVE_DECL_REMAINDERL])
HAVE_DECL_RINTF=1; AC_SUBST([HAVE_DECL_RINTF])
HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND])
HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF])
HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL])
HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL])
HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL])
HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL])
HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC])
HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF])
HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL])
REPLACE_ACOSF=0; AC_SUBST([REPLACE_ACOSF])
REPLACE_ASINF=0; AC_SUBST([REPLACE_ASINF])
REPLACE_ATANF=0; AC_SUBST([REPLACE_ATANF])
REPLACE_ATAN2F=0; AC_SUBST([REPLACE_ATAN2F])
REPLACE_CBRTF=0; AC_SUBST([REPLACE_CBRTF])
REPLACE_CBRTL=0; AC_SUBST([REPLACE_CBRTL])
REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL])
REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF])
REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL])
REPLACE_COSF=0; AC_SUBST([REPLACE_COSF])
REPLACE_COSHF=0; AC_SUBST([REPLACE_COSHF])
REPLACE_EXPF=0; AC_SUBST([REPLACE_EXPF])
REPLACE_EXPL=0; AC_SUBST([REPLACE_EXPL])
REPLACE_EXPM1=0; AC_SUBST([REPLACE_EXPM1])
REPLACE_EXPM1F=0; AC_SUBST([REPLACE_EXPM1F])
REPLACE_EXPM1L=0; AC_SUBST([REPLACE_EXPM1L])
REPLACE_EXP2=0; AC_SUBST([REPLACE_EXP2])
REPLACE_EXP2L=0; AC_SUBST([REPLACE_EXP2L])
REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL])
REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR])
REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF])
REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL])
REPLACE_FMA=0; AC_SUBST([REPLACE_FMA])
REPLACE_FMAF=0; AC_SUBST([REPLACE_FMAF])
REPLACE_FMAL=0; AC_SUBST([REPLACE_FMAL])
REPLACE_FMOD=0; AC_SUBST([REPLACE_FMOD])
REPLACE_FMODF=0; AC_SUBST([REPLACE_FMODF])
REPLACE_FMODL=0; AC_SUBST([REPLACE_FMODL])
REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF])
REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP])
REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL])
REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL])
REPLACE_HYPOT=0; AC_SUBST([REPLACE_HYPOT])
REPLACE_HYPOTF=0; AC_SUBST([REPLACE_HYPOTF])
REPLACE_HYPOTL=0; AC_SUBST([REPLACE_HYPOTL])
REPLACE_ILOGB=0; AC_SUBST([REPLACE_ILOGB])
REPLACE_ILOGBF=0; AC_SUBST([REPLACE_ILOGBF])
REPLACE_ILOGBL=0; AC_SUBST([REPLACE_ILOGBL])
REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE])
REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF])
REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN])
REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL])
REPLACE_LOG=0; AC_SUBST([REPLACE_LOG])
REPLACE_LOGF=0; AC_SUBST([REPLACE_LOGF])
REPLACE_LOGL=0; AC_SUBST([REPLACE_LOGL])
REPLACE_LOG10=0; AC_SUBST([REPLACE_LOG10])
REPLACE_LOG10F=0; AC_SUBST([REPLACE_LOG10F])
REPLACE_LOG10L=0; AC_SUBST([REPLACE_LOG10L])
REPLACE_LOG1P=0; AC_SUBST([REPLACE_LOG1P])
REPLACE_LOG1PF=0; AC_SUBST([REPLACE_LOG1PF])
REPLACE_LOG1PL=0; AC_SUBST([REPLACE_LOG1PL])
REPLACE_LOG2=0; AC_SUBST([REPLACE_LOG2])
REPLACE_LOG2F=0; AC_SUBST([REPLACE_LOG2F])
REPLACE_LOG2L=0; AC_SUBST([REPLACE_LOG2L])
REPLACE_LOGB=0; AC_SUBST([REPLACE_LOGB])
REPLACE_LOGBF=0; AC_SUBST([REPLACE_LOGBF])
REPLACE_LOGBL=0; AC_SUBST([REPLACE_LOGBL])
REPLACE_MODF=0; AC_SUBST([REPLACE_MODF])
REPLACE_MODFF=0; AC_SUBST([REPLACE_MODFF])
REPLACE_MODFL=0; AC_SUBST([REPLACE_MODFL])
REPLACE_NAN=0; AC_SUBST([REPLACE_NAN])
REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER])
REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF])
REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL])
REPLACE_RINTL=0; AC_SUBST([REPLACE_RINTL])
REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND])
REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF])
REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL])
REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT])
REPLACE_SIGNBIT_USING_BUILTINS=0; AC_SUBST([REPLACE_SIGNBIT_USING_BUILTINS])
REPLACE_SINF=0; AC_SUBST([REPLACE_SINF])
REPLACE_SINHF=0; AC_SUBST([REPLACE_SINHF])
REPLACE_SQRTF=0; AC_SUBST([REPLACE_SQRTF])
REPLACE_SQRTL=0; AC_SUBST([REPLACE_SQRTL])
REPLACE_TANF=0; AC_SUBST([REPLACE_TANF])
REPLACE_TANHF=0; AC_SUBST([REPLACE_TANHF])
REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC])
REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF])
REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL])
])
# gl_LONG_DOUBLE_VS_DOUBLE
# determines whether 'long double' and 'double' have the same representation.
# Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines
# HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly.
# The currently known platforms where this is the case are:
# Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9.
AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE],
[
AC_CACHE_CHECK([whether long double and double are the same],
[gl_cv_long_double_equals_double],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[#include <float.h>]],
[[typedef int check[sizeof (long double) == sizeof (double)
&& LDBL_MANT_DIG == DBL_MANT_DIG
&& LDBL_MAX_EXP == DBL_MAX_EXP
&& LDBL_MIN_EXP == DBL_MIN_EXP
? 1 : -1];
]])],
[gl_cv_long_double_equals_double=yes],
[gl_cv_long_double_equals_double=no])
])
if test $gl_cv_long_double_equals_double = yes; then
AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1],
[Define to 1 if 'long double' and 'double' have the same representation.])
HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1
else
HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
fi
AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE])
])

38
m4/printf-frexp.m4 Normal file
View file

@ -0,0 +1,38 @@
# printf-frexp.m4 serial 5
dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Check how to define printf_frexp() without linking with libm.
AC_DEFUN([gl_FUNC_PRINTF_FREXP],
[
AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM])
if test $gl_cv_func_frexp_no_libm = yes; then
gl_FUNC_FREXP_WORKS
case "$gl_cv_func_frexp_works" in
*yes)
AC_DEFINE([HAVE_FREXP_IN_LIBC], [1],
[Define if the frexp function is available in libc.])
;;
esac
fi
AC_CACHE_CHECK([whether ldexp can be used without linking with libm],
[gl_cv_func_ldexp_no_libm],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
double x;
int y;]],
[[return ldexp (x, y) < 1;]])],
[gl_cv_func_ldexp_no_libm=yes],
[gl_cv_func_ldexp_no_libm=no])
])
if test $gl_cv_func_ldexp_no_libm = yes; then
AC_DEFINE([HAVE_LDEXP_IN_LIBC], [1],
[Define if the ldexp function is available in libc.])
fi
])

48
m4/printf-frexpl.m4 Normal file
View file

@ -0,0 +1,48 @@
# printf-frexpl.m4 serial 10
dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Check how to define printf_frexpl() without linking with libm.
AC_DEFUN([gl_FUNC_PRINTF_FREXPL],
[
AC_REQUIRE([gl_MATH_H_DEFAULTS])
AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
dnl Subset of gl_FUNC_FREXPL_NO_LIBM.
gl_CHECK_FREXPL_NO_LIBM
if test $gl_cv_func_frexpl_no_libm = yes; then
gl_FUNC_FREXPL_WORKS
case "$gl_cv_func_frexpl_works" in
*yes) gl_func_frexpl_no_libm=yes ;;
*) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;;
esac
else
gl_func_frexpl_no_libm=no
dnl Set REPLACE_FREXPL here because the system may have frexpl in libm.
REPLACE_FREXPL=1
fi
if test $gl_func_frexpl_no_libm = yes; then
AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1],
[Define if the frexpl function is available in libc.])
dnl Also check whether it's declared.
dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>.
AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]])
fi
gl_CHECK_LDEXPL_NO_LIBM
if test $gl_cv_func_ldexpl_no_libm = yes; then
gl_FUNC_LDEXPL_WORKS
case "$gl_cv_func_ldexpl_works" in
*yes)
AC_DEFINE([HAVE_LDEXPL_IN_LIBC], [1],
[Define if the ldexpl function is available in libc.])
dnl Also check whether it's declared.
dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in <math.h>.
AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include <math.h>]])
;;
esac
fi
])

26
m4/printf-posix-rpl.m4 Normal file
View file

@ -0,0 +1,26 @@
# printf-posix-rpl.m4 serial 4
dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_PRINTF_POSIX],
[
AC_REQUIRE([gl_FUNC_VFPRINTF_POSIX])
if test $gl_cv_func_vfprintf_posix = no; then
gl_REPLACE_PRINTF
fi
])
AC_DEFUN([gl_REPLACE_PRINTF],
[
AC_REQUIRE([gl_STDIO_H_DEFAULTS])
AC_REQUIRE([gl_ASM_SYMBOL_PREFIX])
AC_LIBOBJ([printf])
REPLACE_PRINTF=1
AC_DEFINE([REPLACE_PRINTF_POSIX], [1],
[Define if printf is overridden by a POSIX compliant gnulib implementation.])
gl_PREREQ_PRINTF
])
AC_DEFUN([gl_PREREQ_PRINTF], [:])

1728
m4/printf.m4 Normal file

File diff suppressed because it is too large Load diff

393
m4/signbit.m4 Normal file
View file

@ -0,0 +1,393 @@
# signbit.m4 serial 20
dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_SIGNBIT],
[
AC_REQUIRE([gl_MATH_H_DEFAULTS])
AC_REQUIRE([AC_CANONICAL_HOST])
AC_CACHE_CHECK([for signbit macro], [gl_cv_func_signbit],
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include <math.h>
/* If signbit is defined as a function, don't use it, since calling it for
'float' or 'long double' arguments would involve conversions.
If signbit is not declared at all but exists as a library function, don't
use it, since the prototype may not match.
If signbit is not declared at all but exists as a compiler built-in, don't
use it, since it's preferable to use __builtin_signbit* (no warnings,
no conversions). */
#ifndef signbit
# error "signbit should be a macro"
#endif
#include <string.h>
]gl_SIGNBIT_TEST_PROGRAM
])],
[gl_cv_func_signbit=yes],
[gl_cv_func_signbit=no],
[case "$host_os" in
# Guess yes on glibc systems.
*-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;;
# Guess yes on musl systems.
*-musl*) gl_cv_func_signbit="guessing yes" ;;
# Guess yes on native Windows.
mingw*) gl_cv_func_signbit="guessing yes" ;;
# If we don't know, obey --enable-cross-guesses.
*) gl_cv_func_signbit="$gl_cross_guess_normal" ;;
esac
])
])
dnl GCC >= 4.0 and clang provide three built-ins for signbit.
dnl They can be used without warnings, also in C++, regardless of <math.h>.
dnl But they may expand to calls to functions, which may or may not be in
dnl libc.
AC_CACHE_CHECK([for signbit compiler built-ins],
[gl_cv_func_signbit_builtins],
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#if (__GNUC__ >= 4) || (__clang_major__ >= 4)
# define signbit(x) \
(sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \
sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \
__builtin_signbitf (x))
#else
# error "signbit should be three compiler built-ins"
#endif
#include <string.h>
]gl_SIGNBIT_TEST_PROGRAM
])],
[gl_cv_func_signbit_builtins=yes],
[gl_cv_func_signbit_builtins=no],
[case "$host_os" in
# Guess yes on glibc systems.
*-gnu* | gnu*) gl_cv_func_signbit_builtins="guessing yes" ;;
# Guess yes on musl systems.
*-musl*) gl_cv_func_signbit_builtins="guessing yes" ;;
# Guess yes on mingw, no on MSVC.
mingw*) if test -n "$GCC"; then
gl_cv_func_signbit_builtins="guessing yes"
else
gl_cv_func_signbit_builtins="guessing no"
fi
;;
# If we don't know, obey --enable-cross-guesses.
*) gl_cv_func_signbit_builtins="$gl_cross_guess_normal" ;;
esac
])
])
dnl Use the compiler built-ins whenever possible, because they are more
dnl efficient than the system library functions (if they exist).
case "$gl_cv_func_signbit_builtins" in
*yes)
REPLACE_SIGNBIT_USING_BUILTINS=1
;;
*)
case "$gl_cv_func_signbit" in
*yes) ;;
*)
dnl REPLACE_SIGNBIT=1 makes sure the signbit[fdl] functions get built.
REPLACE_SIGNBIT=1
;;
esac
;;
esac
dnl On Solaris 10, with CC in C++ mode, signbit is not available although
dnl is with cc in C mode. This cannot be worked around by defining
dnl _XOPEN_SOURCE=600, because the latter does not work in C++ mode on
dnl Solaris 11.0. Therefore use the replacement functions on Solaris.
case "$host_os" in
solaris*)
REPLACE_SIGNBIT=1
;;
esac
if test $REPLACE_SIGNBIT = 1; then
gl_FLOAT_SIGN_LOCATION
gl_DOUBLE_SIGN_LOCATION
gl_LONG_DOUBLE_SIGN_LOCATION
if test "$gl_cv_cc_float_signbit" = unknown; then
dnl Test whether copysignf() is declared.
AC_CHECK_DECLS([copysignf], , , [[#include <math.h>]])
if test "$ac_cv_have_decl_copysignf" = yes; then
dnl Test whether copysignf() can be used without libm.
AC_CACHE_CHECK([whether copysignf can be used without linking with libm],
[gl_cv_func_copysignf_no_libm],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
float x, y;]],
[[return copysignf (x, y) < 0;]])],
[gl_cv_func_copysignf_no_libm=yes],
[gl_cv_func_copysignf_no_libm=no])
])
if test $gl_cv_func_copysignf_no_libm = yes; then
AC_DEFINE([HAVE_COPYSIGNF_IN_LIBC], [1],
[Define if the copysignf function is declared in <math.h> and available in libc.])
fi
fi
fi
if test "$gl_cv_cc_double_signbit" = unknown; then
dnl Test whether copysign() is declared.
AC_CHECK_DECLS([copysign], , , [[#include <math.h>]])
if test "$ac_cv_have_decl_copysign" = yes; then
dnl Test whether copysign() can be used without libm.
AC_CACHE_CHECK([whether copysign can be used without linking with libm],
[gl_cv_func_copysign_no_libm],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
double x, y;]],
[[return copysign (x, y) < 0;]])],
[gl_cv_func_copysign_no_libm=yes],
[gl_cv_func_copysign_no_libm=no])
])
if test $gl_cv_func_copysign_no_libm = yes; then
AC_DEFINE([HAVE_COPYSIGN_IN_LIBC], [1],
[Define if the copysign function is declared in <math.h> and available in libc.])
fi
fi
fi
if test "$gl_cv_cc_long_double_signbit" = unknown; then
dnl Test whether copysignl() is declared.
AC_CHECK_DECLS([copysignl], , , [[#include <math.h>]])
if test "$ac_cv_have_decl_copysignl" = yes; then
dnl Test whether copysignl() can be used without libm.
AC_CACHE_CHECK([whether copysignl can be used without linking with libm],
[gl_cv_func_copysignl_no_libm],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <math.h>
long double x, y;]],
[[return copysignl (x, y) < 0;]])],
[gl_cv_func_copysignl_no_libm=yes],
[gl_cv_func_copysignl_no_libm=no])
])
if test $gl_cv_func_copysignl_no_libm = yes; then
AC_DEFINE([HAVE_COPYSIGNL_IN_LIBC], [1],
[Define if the copysignl function is declared in <math.h> and available in libc.])
fi
fi
fi
fi
])
AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[
/* Global variables.
Needed because GCC 4 constant-folds __builtin_signbitl (literal)
but cannot constant-fold __builtin_signbitl (variable). */
float vf;
double vd;
long double vl;
int main ()
{
/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
So we use -p0f and -p0d instead. */
float p0f = 0.0f;
float m0f = -p0f;
double p0d = 0.0;
double m0d = -p0d;
/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
So we use another constant expression instead.
But that expression does not work on other platforms, such as when
cross-compiling to PowerPC on Mac OS X 10.5. */
long double p0l = 0.0L;
#if defined __hpux || defined __sgi
long double m0l = -LDBL_MIN * LDBL_MIN;
#else
long double m0l = -p0l;
#endif
int result = 0;
if (signbit (vf)) /* link check */
vf++;
{
float plus_inf = 1.0f / p0f;
float minus_inf = -1.0f / p0f;
if (!(!signbit (255.0f)
&& signbit (-255.0f)
&& !signbit (p0f)
&& (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f))
&& !signbit (plus_inf)
&& signbit (minus_inf)))
result |= 1;
}
if (signbit (vd)) /* link check */
vd++;
{
double plus_inf = 1.0 / p0d;
double minus_inf = -1.0 / p0d;
if (!(!signbit (255.0)
&& signbit (-255.0)
&& !signbit (p0d)
&& (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d))
&& !signbit (plus_inf)
&& signbit (minus_inf)))
result |= 2;
}
if (signbit (vl)) /* link check */
vl++;
{
long double plus_inf = 1.0L / p0l;
long double minus_inf = -1.0L / p0l;
if (signbit (255.0L))
result |= 4;
if (!signbit (-255.0L))
result |= 4;
if (signbit (p0l))
result |= 8;
if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l)))
result |= 16;
if (signbit (plus_inf))
result |= 32;
if (!signbit (minus_inf))
result |= 64;
}
return result;
}
]])
AC_DEFUN([gl_FLOAT_SIGN_LOCATION],
[
gl_FLOATTYPE_SIGN_LOCATION([float], [gl_cv_cc_float_signbit], [f], [FLT])
])
AC_DEFUN([gl_DOUBLE_SIGN_LOCATION],
[
gl_FLOATTYPE_SIGN_LOCATION([double], [gl_cv_cc_double_signbit], [], [DBL])
])
AC_DEFUN([gl_LONG_DOUBLE_SIGN_LOCATION],
[
gl_FLOATTYPE_SIGN_LOCATION([long double], [gl_cv_cc_long_double_signbit], [L], [LDBL])
])
AC_DEFUN([gl_FLOATTYPE_SIGN_LOCATION],
[
AC_CACHE_CHECK([where to find the sign bit in a '$1'],
[$2],
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include <stddef.h>
#include <stdio.h>
#define NWORDS \
((sizeof ($1) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
typedef union { $1 value; unsigned int word[NWORDS]; }
memory_float;
static memory_float plus = { 1.0$3 };
static memory_float minus = { -1.0$3 };
int main ()
{
size_t j, k, i;
unsigned int m;
FILE *fp = fopen ("conftest.out", "w");
if (fp == NULL)
return 1;
/* Find the different bit. */
k = 0; m = 0;
for (j = 0; j < NWORDS; j++)
{
unsigned int x = plus.word[j] ^ minus.word[j];
if ((x & (x - 1)) || (x && m))
{
/* More than one bit difference. */
fprintf (fp, "unknown");
fclose (fp);
return 2;
}
if (x)
{
k = j;
m = x;
}
}
if (m == 0)
{
/* No difference. */
fprintf (fp, "unknown");
fclose (fp);
return 3;
}
/* Now m = plus.word[k] ^ ~minus.word[k]. */
if (plus.word[k] & ~minus.word[k])
{
/* Oh? The sign bit is set in the positive and cleared in the negative
numbers? */
fprintf (fp, "unknown");
fclose (fp);
return 4;
}
for (i = 0; ; i++)
if ((m >> i) & 1)
break;
fprintf (fp, "word %d bit %d", (int) k, (int) i);
if (fclose (fp) != 0)
return 5;
return 0;
}
]])],
[$2=`cat conftest.out`],
[$2="unknown"],
[
dnl When cross-compiling, we don't know. It depends on the
dnl ABI and compiler version. There are too many cases.
$2="unknown"
])
rm -f conftest.out
])
case "$]$2[" in
word*bit*)
word=`echo "$]$2[" | sed -e 's/word //' -e 's/ bit.*//'`
bit=`echo "$]$2[" | sed -e 's/word.*bit //'`
AC_DEFINE_UNQUOTED([$4][_SIGNBIT_WORD], [$word],
[Define as the word index where to find the sign of '$1'.])
AC_DEFINE_UNQUOTED([$4][_SIGNBIT_BIT], [$bit],
[Define as the bit index in the word where to find the sign of '$1'.])
;;
esac
])
# Expands to code that defines a function signbitf(float).
# It extracts the sign bit of a non-NaN value.
AC_DEFUN([gl_FLOAT_SIGNBIT_CODE],
[
gl_FLOATTYPE_SIGNBIT_CODE([float], [f], [f])
])
# Expands to code that defines a function signbitd(double).
# It extracts the sign bit of a non-NaN value.
AC_DEFUN([gl_DOUBLE_SIGNBIT_CODE],
[
gl_FLOATTYPE_SIGNBIT_CODE([double], [d], [])
])
# Expands to code that defines a function signbitl(long double).
# It extracts the sign bit of a non-NaN value.
AC_DEFUN([gl_LONG_DOUBLE_SIGNBIT_CODE],
[
gl_FLOATTYPE_SIGNBIT_CODE([long double], [l], [L])
])
AC_DEFUN([gl_FLOATTYPE_SIGNBIT_CODE],
[[
static int
signbit$2 ($1 value)
{
typedef union { $1 f; unsigned char b[sizeof ($1)]; } float_union;
static float_union plus_one = { 1.0$3 }; /* unused bits are zero here */
static float_union minus_one = { -1.0$3 }; /* unused bits are zero here */
/* Compute the sign bit mask as the XOR of plus_one and minus_one. */
float_union u;
unsigned int i;
u.f = value;
for (i = 0; i < sizeof ($1); i++)
if (u.b[i] & (plus_one.b[i] ^ minus_one.b[i]))
return 1;
return 0;
}
]])

75
m4/size_max.m4 Normal file
View file

@ -0,0 +1,75 @@
# size_max.m4 serial 12
dnl Copyright (C) 2003, 2005-2006, 2008-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
AC_PREREQ([2.61])
AC_DEFUN([gl_SIZE_MAX],
[
AC_CHECK_HEADERS([stdint.h])
dnl First test whether the system already has SIZE_MAX.
AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [
gl_cv_size_max=no
AC_EGREP_CPP([Found it], [
#include <limits.h>
#if HAVE_STDINT_H
#include <stdint.h>
#endif
#ifdef SIZE_MAX
Found it
#endif
], [gl_cv_size_max=yes])
if test $gl_cv_size_max != yes; then
dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
dnl than the type 'unsigned long'. Try hard to find a definition that can
dnl be used in a preprocessor #if, i.e. doesn't contain a cast.
AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1],
[#include <stddef.h>
#include <limits.h>], [size_t_bits_minus_1=])
AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)],
[#include <stddef.h>], [fits_in_uint=])
if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
if test $fits_in_uint = 1; then
dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[#include <stddef.h>
extern size_t foo;
extern unsigned long foo;
]],
[[]])],
[fits_in_uint=0])
fi
dnl We cannot use 'expr' to simplify this expression, because 'expr'
dnl works only with 'long' integers in the host environment, while we
dnl might be cross-compiling from a 32-bit platform to a 64-bit platform.
if test $fits_in_uint = 1; then
gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
else
gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
fi
else
dnl Shouldn't happen, but who knows...
gl_cv_size_max='((size_t)~(size_t)0)'
fi
fi
])
if test "$gl_cv_size_max" != yes; then
AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max],
[Define as the maximum value of type 'size_t', if the system doesn't define it.])
fi
dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after
dnl <stdint.h>. Remember that the #undef in AH_VERBATIM gets replaced with
dnl #define by AC_DEFINE_UNQUOTED.
AH_VERBATIM([SIZE_MAX],
[/* Define as the maximum value of type 'size_t', if the system doesn't define
it. */
#ifndef SIZE_MAX
# undef SIZE_MAX
#endif])
])

27
m4/stdint_h.m4 Normal file
View file

@ -0,0 +1,27 @@
# stdint_h.m4 serial 9
dnl Copyright (C) 1997-2004, 2006, 2008-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Paul Eggert.
# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
# doesn't clash with <sys/types.h>, and declares uintmax_t.
AC_DEFUN([gl_AC_HEADER_STDINT_H],
[
AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[#include <sys/types.h>
#include <stdint.h>]],
[[uintmax_t i = (uintmax_t) -1; return !i;]])],
[gl_cv_header_stdint_h=yes],
[gl_cv_header_stdint_h=no])])
if test $gl_cv_header_stdint_h = yes; then
AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1],
[Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
and declares uintmax_t. ])
fi
])

298
m4/vasnprintf.m4 Normal file
View file

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

101
m4/vasprintf-posix.m4 Normal file
View file

@ -0,0 +1,101 @@
# vasprintf-posix.m4 serial 13
dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_VASPRINTF_POSIX],
[
AC_REQUIRE([gl_PRINTF_SIZES_C99])
AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
AC_REQUIRE([gl_PRINTF_INFINITE])
AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
AC_REQUIRE([gl_PRINTF_DIRECTIVE_N])
AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
AC_REQUIRE([gl_PRINTF_POSITIONS])
AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST])
AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
AC_REQUIRE([gl_PRINTF_PRECISION])
AC_REQUIRE([gl_PRINTF_ENOMEM])
gl_cv_func_vasprintf_posix=no
AC_CHECK_FUNCS([vasprintf])
case "$gl_cv_func_printf_sizes_c99" in
*yes)
case "$gl_cv_func_printf_long_double" in
*yes)
case "$gl_cv_func_printf_infinite" in
*yes)
case "$gl_cv_func_printf_infinite_long_double" in
*yes)
case "$gl_cv_func_printf_directive_a" in
*yes)
case "$gl_cv_func_printf_directive_f" in
*yes)
case "$gl_cv_func_printf_directive_n" in
*yes)
case "$gl_cv_func_printf_directive_ls" in
*yes)
case "$gl_cv_func_printf_positions" in
*yes)
case "$gl_cv_func_printf_flag_grouping" in
*yes)
case "$gl_cv_func_printf_flag_leftadjust" in
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
case "$gl_cv_func_printf_precision" in
*yes)
case "$gl_cv_func_printf_enomem" in
*yes)
if test $ac_cv_func_vasprintf = yes; then
# vasprintf exists and is
# already POSIX compliant.
gl_cv_func_vasprintf_posix=yes
fi
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
if test $gl_cv_func_vasprintf_posix = no; then
gl_PREREQ_VASNPRINTF_LONG_DOUBLE
gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
gl_PREREQ_VASNPRINTF_DIRECTIVE_A
gl_PREREQ_VASNPRINTF_DIRECTIVE_F
gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
gl_PREREQ_VASNPRINTF_FLAG_GROUPING
gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
gl_PREREQ_VASNPRINTF_FLAG_ZERO
gl_PREREQ_VASNPRINTF_PRECISION
gl_PREREQ_VASNPRINTF_ENOMEM
gl_REPLACE_VASNPRINTF
gl_REPLACE_VASPRINTF
fi
])

46
m4/vasprintf.m4 Normal file
View file

@ -0,0 +1,46 @@
# vasprintf.m4 serial 6
dnl Copyright (C) 2002-2003, 2006-2007, 2009-2023 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_VASPRINTF],
[
AC_CHECK_FUNCS([vasprintf])
if test $ac_cv_func_vasprintf = no; then
gl_REPLACE_VASPRINTF
fi
])
AC_DEFUN([gl_REPLACE_VASPRINTF],
[
AC_LIBOBJ([vasprintf])
AC_LIBOBJ([asprintf])
AC_REQUIRE([gl_STDIO_H_DEFAULTS])
if test $ac_cv_func_vasprintf = yes; then
REPLACE_VASPRINTF=1
else
HAVE_VASPRINTF=0
fi
gl_PREREQ_VASPRINTF_H
gl_PREREQ_VASPRINTF
gl_PREREQ_ASPRINTF
])
# Prerequisites of the vasprintf portion of lib/stdio.h.
AC_DEFUN([gl_PREREQ_VASPRINTF_H],
[
dnl Persuade glibc <stdio.h> to declare asprintf() and vasprintf().
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
])
# Prerequisites of lib/vasprintf.c.
AC_DEFUN([gl_PREREQ_VASPRINTF],
[
])
# Prerequisites of lib/asprintf.c.
AC_DEFUN([gl_PREREQ_ASPRINTF],
[
])

110
m4/vfprintf-posix.m4 Normal file
View file

@ -0,0 +1,110 @@
# vfprintf-posix.m4 serial 14
dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_VFPRINTF_POSIX],
[
AC_REQUIRE([gl_PRINTF_SIZES_C99])
AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
AC_REQUIRE([gl_PRINTF_INFINITE])
AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
AC_REQUIRE([gl_PRINTF_DIRECTIVE_N])
AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
AC_REQUIRE([gl_PRINTF_POSITIONS])
AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST])
AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
AC_REQUIRE([gl_PRINTF_PRECISION])
AC_REQUIRE([gl_PRINTF_ENOMEM])
gl_cv_func_vfprintf_posix=no
case "$gl_cv_func_printf_sizes_c99" in
*yes)
case "$gl_cv_func_printf_long_double" in
*yes)
case "$gl_cv_func_printf_infinite" in
*yes)
case "$gl_cv_func_printf_infinite_long_double" in
*yes)
case "$gl_cv_func_printf_directive_a" in
*yes)
case "$gl_cv_func_printf_directive_f" in
*yes)
case "$gl_cv_func_printf_directive_n" in
*yes)
case "$gl_cv_func_printf_directive_ls" in
*yes)
case "$gl_cv_func_printf_positions" in
*yes)
case "$gl_cv_func_printf_flag_grouping" in
*yes)
case "$gl_cv_func_printf_flag_leftadjust" in
*yes)
case "$gl_cv_func_printf_flag_zero" in
*yes)
case "$gl_cv_func_printf_precision" in
*yes)
case "$gl_cv_func_printf_enomem" in
*yes)
# vfprintf exists and is
# already POSIX compliant.
gl_cv_func_vfprintf_posix=yes
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
;;
esac
if test $gl_cv_func_vfprintf_posix = no; then
gl_PREREQ_VASNPRINTF_LONG_DOUBLE
gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
gl_PREREQ_VASNPRINTF_DIRECTIVE_A
gl_PREREQ_VASNPRINTF_DIRECTIVE_F
gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
gl_PREREQ_VASNPRINTF_FLAG_GROUPING
gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
gl_PREREQ_VASNPRINTF_FLAG_ZERO
gl_PREREQ_VASNPRINTF_PRECISION
gl_PREREQ_VASNPRINTF_ENOMEM
gl_REPLACE_VASNPRINTF
gl_REPLACE_VFPRINTF
fi
])
AC_DEFUN([gl_REPLACE_VFPRINTF],
[
AC_REQUIRE([gl_STDIO_H_DEFAULTS])
AC_LIBOBJ([vfprintf])
REPLACE_VFPRINTF=1
AC_DEFINE([REPLACE_VFPRINTF_POSIX], [1],
[Define if vfprintf is overridden by a POSIX compliant gnulib implementation.])
gl_PREREQ_VFPRINTF
])
AC_DEFUN([gl_PREREQ_VFPRINTF], [:])

12
m4/xsize.m4 Normal file
View file

@ -0,0 +1,12 @@
# xsize.m4 serial 5
dnl Copyright (C) 2003-2004, 2008-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_XSIZE],
[
dnl Prerequisites of lib/xsize.h.
AC_REQUIRE([gl_SIZE_MAX])
AC_CHECK_HEADERS([stdint.h])
])