Update Gnulib to v0.0-6703-g4e0358a.
[bpt/guile.git] / m4 / math_h.m4
CommitLineData
7f1ea859 1# math_h.m4 serial 56
49114fd4 2dnl Copyright (C) 2007-2011 Free Software Foundation, Inc.
2e65b52f
LC
3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved.
6
7AC_DEFUN([gl_MATH_H],
8[
9 AC_REQUIRE([gl_MATH_H_DEFAULTS])
10 gl_CHECK_NEXT_HEADERS([math.h])
11 AC_REQUIRE([AC_C_INLINE])
12
13 AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works],
14 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <math.h>]],
15 [[/* Solaris 10 has a broken definition of NAN. Other platforms
16 fail to provide NAN, or provide it only in C99 mode; this
17 test only needs to fail when NAN is provided but wrong. */
18 float f = 1.0f;
19#ifdef NAN
20 f = NAN;
21#endif
22 return f == 0;]])],
23 [gl_cv_header_math_nan_works=yes],
24 [gl_cv_header_math_nan_works=no])])
25 if test $gl_cv_header_math_nan_works = no; then
26 REPLACE_NAN=1
27 fi
28 AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works],
29 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <math.h>]],
30 [[/* Solaris 10 has a broken definition of HUGE_VAL. */
31 double d = HUGE_VAL;
32 return d == 0;]])],
33 [gl_cv_header_math_huge_val_works=yes],
34 [gl_cv_header_math_huge_val_works=no])])
35 if test $gl_cv_header_math_huge_val_works = no; then
36 REPLACE_HUGE_VAL=1
37 fi
38
39 dnl Check for declarations of anything we want to poison if the
40 dnl corresponding gnulib module is not in use.
35428fb6
LC
41 gl_WARN_ON_USE_PREPARE([[#include <math.h>]],
42 [acosf acosl asinf asinl atanf atanl
43 ceilf ceill copysign copysignf copysignl cosf cosl coshf
7f1ea859 44 expf expl fabsf floorf floorl fma fmaf fmal fmodf frexpf frexpl
35428fb6
LC
45 ldexpf ldexpl logb logf logl log10f modff powf
46 rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl
47 tanf tanl tanhf trunc truncf truncl])
2e65b52f
LC
48])
49
50AC_DEFUN([gl_MATH_MODULE_INDICATOR],
51[
52 dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
53 AC_REQUIRE([gl_MATH_H_DEFAULTS])
54 gl_MODULE_INDICATOR_SET_VARIABLE([$1])
55 dnl Define it also as a C macro, for the benefit of the unit tests.
56 gl_MODULE_INDICATOR_FOR_TESTS([$1])
57])
58
59AC_DEFUN([gl_MATH_H_DEFAULTS],
60[
35428fb6
LC
61 GNULIB_ACOSF=0; AC_SUBST([GNULIB_ACOSF])
62 GNULIB_ACOSL=0; AC_SUBST([GNULIB_ACOSL])
63 GNULIB_ASINF=0; AC_SUBST([GNULIB_ASINF])
64 GNULIB_ASINL=0; AC_SUBST([GNULIB_ASINL])
65 GNULIB_ATANF=0; AC_SUBST([GNULIB_ATANF])
66 GNULIB_ATANL=0; AC_SUBST([GNULIB_ATANL])
67 GNULIB_ATAN2F=0; AC_SUBST([GNULIB_ATAN2F])
68 GNULIB_CEIL=0; AC_SUBST([GNULIB_CEIL])
69 GNULIB_CEILF=0; AC_SUBST([GNULIB_CEILF])
70 GNULIB_CEILL=0; AC_SUBST([GNULIB_CEILL])
71 GNULIB_COPYSIGN=0; AC_SUBST([GNULIB_COPYSIGN])
72 GNULIB_COPYSIGNF=0; AC_SUBST([GNULIB_COPYSIGNF])
73 GNULIB_COPYSIGNL=0; AC_SUBST([GNULIB_COPYSIGNL])
74 GNULIB_COSF=0; AC_SUBST([GNULIB_COSF])
75 GNULIB_COSL=0; AC_SUBST([GNULIB_COSL])
76 GNULIB_COSHF=0; AC_SUBST([GNULIB_COSHF])
77 GNULIB_EXPF=0; AC_SUBST([GNULIB_EXPF])
78 GNULIB_EXPL=0; AC_SUBST([GNULIB_EXPL])
79 GNULIB_FABSF=0; AC_SUBST([GNULIB_FABSF])
80 GNULIB_FLOOR=0; AC_SUBST([GNULIB_FLOOR])
81 GNULIB_FLOORF=0; AC_SUBST([GNULIB_FLOORF])
82 GNULIB_FLOORL=0; AC_SUBST([GNULIB_FLOORL])
7f1ea859
LC
83 GNULIB_FMA=0; AC_SUBST([GNULIB_FMA])
84 GNULIB_FMAF=0; AC_SUBST([GNULIB_FMAF])
85 GNULIB_FMAL=0; AC_SUBST([GNULIB_FMAL])
35428fb6
LC
86 GNULIB_FMODF=0; AC_SUBST([GNULIB_FMODF])
87 GNULIB_FREXPF=0; AC_SUBST([GNULIB_FREXPF])
88 GNULIB_FREXP=0; AC_SUBST([GNULIB_FREXP])
89 GNULIB_FREXPL=0; AC_SUBST([GNULIB_FREXPL])
90 GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE])
91 GNULIB_ISINF=0; AC_SUBST([GNULIB_ISINF])
92 GNULIB_ISNAN=0; AC_SUBST([GNULIB_ISNAN])
93 GNULIB_ISNANF=0; AC_SUBST([GNULIB_ISNANF])
94 GNULIB_ISNAND=0; AC_SUBST([GNULIB_ISNAND])
95 GNULIB_ISNANL=0; AC_SUBST([GNULIB_ISNANL])
96 GNULIB_LDEXPF=0; AC_SUBST([GNULIB_LDEXPF])
97 GNULIB_LDEXPL=0; AC_SUBST([GNULIB_LDEXPL])
98 GNULIB_LOGB=0; AC_SUBST([GNULIB_LOGB])
99 GNULIB_LOGF=0; AC_SUBST([GNULIB_LOGF])
100 GNULIB_LOGL=0; AC_SUBST([GNULIB_LOGL])
101 GNULIB_LOG10F=0; AC_SUBST([GNULIB_LOG10F])
102 GNULIB_MODFF=0; AC_SUBST([GNULIB_MODFF])
103 GNULIB_POWF=0; AC_SUBST([GNULIB_POWF])
104 GNULIB_RINT=0; AC_SUBST([GNULIB_RINT])
105 GNULIB_RINTF=0; AC_SUBST([GNULIB_RINTF])
106 GNULIB_RINTL=0; AC_SUBST([GNULIB_RINTL])
107 GNULIB_ROUND=0; AC_SUBST([GNULIB_ROUND])
108 GNULIB_ROUNDF=0; AC_SUBST([GNULIB_ROUNDF])
109 GNULIB_ROUNDL=0; AC_SUBST([GNULIB_ROUNDL])
110 GNULIB_SIGNBIT=0; AC_SUBST([GNULIB_SIGNBIT])
111 GNULIB_SINF=0; AC_SUBST([GNULIB_SINF])
112 GNULIB_SINL=0; AC_SUBST([GNULIB_SINL])
113 GNULIB_SINHF=0; AC_SUBST([GNULIB_SINHF])
114 GNULIB_SQRTF=0; AC_SUBST([GNULIB_SQRTF])
115 GNULIB_SQRTL=0; AC_SUBST([GNULIB_SQRTL])
116 GNULIB_TANF=0; AC_SUBST([GNULIB_TANF])
117 GNULIB_TANL=0; AC_SUBST([GNULIB_TANL])
118 GNULIB_TANHF=0; AC_SUBST([GNULIB_TANHF])
119 GNULIB_TRUNC=0; AC_SUBST([GNULIB_TRUNC])
120 GNULIB_TRUNCF=0; AC_SUBST([GNULIB_TRUNCF])
121 GNULIB_TRUNCL=0; AC_SUBST([GNULIB_TRUNCL])
2e65b52f 122 dnl Assume proper GNU behavior unless another module says otherwise.
35428fb6 123 HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF])
2e65b52f 124 HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL])
35428fb6 125 HAVE_ASINF=1; AC_SUBST([HAVE_ASINF])
2e65b52f 126 HAVE_ASINL=1; AC_SUBST([HAVE_ASINL])
35428fb6 127 HAVE_ATANF=1; AC_SUBST([HAVE_ATANF])
2e65b52f 128 HAVE_ATANL=1; AC_SUBST([HAVE_ATANL])
35428fb6
LC
129 HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F])
130 HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN])
131 HAVE_COPYSIGNF=1; AC_SUBST([HAVE_COPYSIGNF])
132 HAVE_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL])
133 HAVE_COSF=1; AC_SUBST([HAVE_COSF])
2e65b52f 134 HAVE_COSL=1; AC_SUBST([HAVE_COSL])
35428fb6
LC
135 HAVE_COSHF=1; AC_SUBST([HAVE_COSHF])
136 HAVE_EXPF=1; AC_SUBST([HAVE_EXPF])
2e65b52f 137 HAVE_EXPL=1; AC_SUBST([HAVE_EXPL])
35428fb6 138 HAVE_FABSF=1; AC_SUBST([HAVE_FABSF])
7f1ea859
LC
139 HAVE_FMA=1; AC_SUBST([HAVE_FMA])
140 HAVE_FMAF=1; AC_SUBST([HAVE_FMAF])
141 HAVE_FMAL=1; AC_SUBST([HAVE_FMAL])
35428fb6
LC
142 HAVE_FMODF=1; AC_SUBST([HAVE_FMODF])
143 HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF])
2e65b52f
LC
144 HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF])
145 HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND])
146 HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL])
35428fb6
LC
147 HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF])
148 HAVE_LOGF=1; AC_SUBST([HAVE_LOGF])
2e65b52f 149 HAVE_LOGL=1; AC_SUBST([HAVE_LOGL])
35428fb6
LC
150 HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F])
151 HAVE_MODFF=1; AC_SUBST([HAVE_MODFF])
152 HAVE_POWF=1; AC_SUBST([HAVE_POWF])
153 HAVE_RINT=1; AC_SUBST([HAVE_RINT])
154 HAVE_RINTF=1; AC_SUBST([HAVE_RINTF])
155 HAVE_RINTL=1; AC_SUBST([HAVE_RINTL])
156 HAVE_SINF=1; AC_SUBST([HAVE_SINF])
2e65b52f 157 HAVE_SINL=1; AC_SUBST([HAVE_SINL])
35428fb6
LC
158 HAVE_SINHF=1; AC_SUBST([HAVE_SINHF])
159 HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF])
2e65b52f 160 HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL])
35428fb6 161 HAVE_TANF=1; AC_SUBST([HAVE_TANF])
2e65b52f 162 HAVE_TANL=1; AC_SUBST([HAVE_TANL])
35428fb6 163 HAVE_TANHF=1; AC_SUBST([HAVE_TANHF])
2e65b52f
LC
164 HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL])
165 HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL])
166 HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL])
167 HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF])
168 HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL])
169 HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL])
170 HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL])
171 HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF])
172 HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL])
173 HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL])
174 HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL])
175 HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB])
176 HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL])
177 HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND])
178 HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF])
179 HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL])
180 HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL])
181 HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL])
182 HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL])
183 HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC])
184 HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF])
185 HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL])
49114fd4 186 REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL])
2e65b52f
LC
187 REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF])
188 REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL])
49114fd4 189 REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR])
2e65b52f
LC
190 REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF])
191 REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL])
7f1ea859
LC
192 REPLACE_FMA=0; AC_SUBST([REPLACE_FMA])
193 REPLACE_FMAF=0; AC_SUBST([REPLACE_FMAF])
194 REPLACE_FMAL=0; AC_SUBST([REPLACE_FMAL])
35428fb6 195 REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF])
2e65b52f
LC
196 REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP])
197 REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL])
198 REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL])
199 REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE])
200 REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF])
201 REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN])
202 REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL])
203 REPLACE_NAN=0; AC_SUBST([REPLACE_NAN])
204 REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND])
205 REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF])
206 REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL])
207 REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT])
208 REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC])
49114fd4
LC
209 REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC])
210 REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF])
2e65b52f
LC
211 REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL])
212])
35428fb6
LC
213
214# gl_LONG_DOUBLE_VS_DOUBLE
215# determines whether 'long double' and 'double' have the same representation.
216# Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines
217# HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly.
218# The currently known platforms where this is the case are:
219# Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9.
220AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE],
221[
222 AC_CACHE_CHECK([whether long double and double are the same],
223 [gl_cv_long_double_equals_double],
224 [AC_COMPILE_IFELSE(
225 [AC_LANG_PROGRAM([[#include <float.h>]],
226 [[typedef int check[sizeof (long double) == sizeof (double)
227 && LDBL_MANT_DIG == DBL_MANT_DIG
228 && LDBL_MAX_EXP == DBL_MAX_EXP
229 && LDBL_MIN_EXP == DBL_MIN_EXP
230 ? 1 : -1];
231 ]])],
232 [gl_cv_long_double_equals_double=yes],
233 [gl_cv_long_double_equals_double=no])
234 ])
235 if test $gl_cv_long_double_equals_double = yes; then
236 AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1],
237 [Define to 1 if 'long double' and 'double' have the same representation.])
238 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1
239 else
240 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
241 fi
242 AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE])
243])