Merge remote-tracking branch 'origin/stable-2.0'
[bpt/guile.git] / m4 / math_h.m4
CommitLineData
35428fb6 1# math_h.m4 serial 53
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
44 expf expl fabsf floorf floorl fmodf frexpf frexpl
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])
83 GNULIB_FMODF=0; AC_SUBST([GNULIB_FMODF])
84 GNULIB_FREXPF=0; AC_SUBST([GNULIB_FREXPF])
85 GNULIB_FREXP=0; AC_SUBST([GNULIB_FREXP])
86 GNULIB_FREXPL=0; AC_SUBST([GNULIB_FREXPL])
87 GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE])
88 GNULIB_ISINF=0; AC_SUBST([GNULIB_ISINF])
89 GNULIB_ISNAN=0; AC_SUBST([GNULIB_ISNAN])
90 GNULIB_ISNANF=0; AC_SUBST([GNULIB_ISNANF])
91 GNULIB_ISNAND=0; AC_SUBST([GNULIB_ISNAND])
92 GNULIB_ISNANL=0; AC_SUBST([GNULIB_ISNANL])
93 GNULIB_LDEXPF=0; AC_SUBST([GNULIB_LDEXPF])
94 GNULIB_LDEXPL=0; AC_SUBST([GNULIB_LDEXPL])
95 GNULIB_LOGB=0; AC_SUBST([GNULIB_LOGB])
96 GNULIB_LOGF=0; AC_SUBST([GNULIB_LOGF])
97 GNULIB_LOGL=0; AC_SUBST([GNULIB_LOGL])
98 GNULIB_LOG10F=0; AC_SUBST([GNULIB_LOG10F])
99 GNULIB_MODFF=0; AC_SUBST([GNULIB_MODFF])
100 GNULIB_POWF=0; AC_SUBST([GNULIB_POWF])
101 GNULIB_RINT=0; AC_SUBST([GNULIB_RINT])
102 GNULIB_RINTF=0; AC_SUBST([GNULIB_RINTF])
103 GNULIB_RINTL=0; AC_SUBST([GNULIB_RINTL])
104 GNULIB_ROUND=0; AC_SUBST([GNULIB_ROUND])
105 GNULIB_ROUNDF=0; AC_SUBST([GNULIB_ROUNDF])
106 GNULIB_ROUNDL=0; AC_SUBST([GNULIB_ROUNDL])
107 GNULIB_SIGNBIT=0; AC_SUBST([GNULIB_SIGNBIT])
108 GNULIB_SINF=0; AC_SUBST([GNULIB_SINF])
109 GNULIB_SINL=0; AC_SUBST([GNULIB_SINL])
110 GNULIB_SINHF=0; AC_SUBST([GNULIB_SINHF])
111 GNULIB_SQRTF=0; AC_SUBST([GNULIB_SQRTF])
112 GNULIB_SQRTL=0; AC_SUBST([GNULIB_SQRTL])
113 GNULIB_TANF=0; AC_SUBST([GNULIB_TANF])
114 GNULIB_TANL=0; AC_SUBST([GNULIB_TANL])
115 GNULIB_TANHF=0; AC_SUBST([GNULIB_TANHF])
116 GNULIB_TRUNC=0; AC_SUBST([GNULIB_TRUNC])
117 GNULIB_TRUNCF=0; AC_SUBST([GNULIB_TRUNCF])
118 GNULIB_TRUNCL=0; AC_SUBST([GNULIB_TRUNCL])
2e65b52f 119 dnl Assume proper GNU behavior unless another module says otherwise.
35428fb6 120 HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF])
2e65b52f 121 HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL])
35428fb6 122 HAVE_ASINF=1; AC_SUBST([HAVE_ASINF])
2e65b52f 123 HAVE_ASINL=1; AC_SUBST([HAVE_ASINL])
35428fb6 124 HAVE_ATANF=1; AC_SUBST([HAVE_ATANF])
2e65b52f 125 HAVE_ATANL=1; AC_SUBST([HAVE_ATANL])
35428fb6
LC
126 HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F])
127 HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN])
128 HAVE_COPYSIGNF=1; AC_SUBST([HAVE_COPYSIGNF])
129 HAVE_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL])
130 HAVE_COSF=1; AC_SUBST([HAVE_COSF])
2e65b52f 131 HAVE_COSL=1; AC_SUBST([HAVE_COSL])
35428fb6
LC
132 HAVE_COSHF=1; AC_SUBST([HAVE_COSHF])
133 HAVE_EXPF=1; AC_SUBST([HAVE_EXPF])
2e65b52f 134 HAVE_EXPL=1; AC_SUBST([HAVE_EXPL])
35428fb6
LC
135 HAVE_FABSF=1; AC_SUBST([HAVE_FABSF])
136 HAVE_FMODF=1; AC_SUBST([HAVE_FMODF])
137 HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF])
2e65b52f
LC
138 HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF])
139 HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND])
140 HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL])
35428fb6
LC
141 HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF])
142 HAVE_LOGF=1; AC_SUBST([HAVE_LOGF])
2e65b52f 143 HAVE_LOGL=1; AC_SUBST([HAVE_LOGL])
35428fb6
LC
144 HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F])
145 HAVE_MODFF=1; AC_SUBST([HAVE_MODFF])
146 HAVE_POWF=1; AC_SUBST([HAVE_POWF])
147 HAVE_RINT=1; AC_SUBST([HAVE_RINT])
148 HAVE_RINTF=1; AC_SUBST([HAVE_RINTF])
149 HAVE_RINTL=1; AC_SUBST([HAVE_RINTL])
150 HAVE_SINF=1; AC_SUBST([HAVE_SINF])
2e65b52f 151 HAVE_SINL=1; AC_SUBST([HAVE_SINL])
35428fb6
LC
152 HAVE_SINHF=1; AC_SUBST([HAVE_SINHF])
153 HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF])
2e65b52f 154 HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL])
35428fb6 155 HAVE_TANF=1; AC_SUBST([HAVE_TANF])
2e65b52f 156 HAVE_TANL=1; AC_SUBST([HAVE_TANL])
35428fb6 157 HAVE_TANHF=1; AC_SUBST([HAVE_TANHF])
2e65b52f
LC
158 HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL])
159 HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL])
160 HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL])
161 HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF])
162 HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL])
163 HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL])
164 HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL])
165 HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF])
166 HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL])
167 HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL])
168 HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL])
169 HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB])
170 HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL])
171 HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND])
172 HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF])
173 HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL])
174 HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL])
175 HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL])
176 HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL])
177 HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC])
178 HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF])
179 HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL])
49114fd4 180 REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL])
2e65b52f
LC
181 REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF])
182 REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL])
49114fd4 183 REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR])
2e65b52f
LC
184 REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF])
185 REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL])
35428fb6 186 REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF])
2e65b52f
LC
187 REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP])
188 REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL])
189 REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL])
190 REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE])
191 REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF])
192 REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN])
193 REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL])
194 REPLACE_NAN=0; AC_SUBST([REPLACE_NAN])
195 REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND])
196 REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF])
197 REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL])
198 REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT])
199 REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC])
49114fd4
LC
200 REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC])
201 REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF])
2e65b52f
LC
202 REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL])
203])
35428fb6
LC
204
205# gl_LONG_DOUBLE_VS_DOUBLE
206# determines whether 'long double' and 'double' have the same representation.
207# Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines
208# HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly.
209# The currently known platforms where this is the case are:
210# Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9.
211AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE],
212[
213 AC_CACHE_CHECK([whether long double and double are the same],
214 [gl_cv_long_double_equals_double],
215 [AC_COMPILE_IFELSE(
216 [AC_LANG_PROGRAM([[#include <float.h>]],
217 [[typedef int check[sizeof (long double) == sizeof (double)
218 && LDBL_MANT_DIG == DBL_MANT_DIG
219 && LDBL_MAX_EXP == DBL_MAX_EXP
220 && LDBL_MIN_EXP == DBL_MIN_EXP
221 ? 1 : -1];
222 ]])],
223 [gl_cv_long_double_equals_double=yes],
224 [gl_cv_long_double_equals_double=no])
225 ])
226 if test $gl_cv_long_double_equals_double = yes; then
227 AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1],
228 [Define to 1 if 'long double' and 'double' have the same representation.])
229 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1
230 else
231 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
232 fi
233 AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE])
234])