Merge remote-tracking branch 'origin/stable-2.0'
[bpt/guile.git] / m4 / math_h.m4
1 # math_h.m4 serial 53
2 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
6
7 AC_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.
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])
48 ])
49
50 AC_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
59 AC_DEFUN([gl_MATH_H_DEFAULTS],
60 [
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])
119 dnl Assume proper GNU behavior unless another module says otherwise.
120 HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF])
121 HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL])
122 HAVE_ASINF=1; AC_SUBST([HAVE_ASINF])
123 HAVE_ASINL=1; AC_SUBST([HAVE_ASINL])
124 HAVE_ATANF=1; AC_SUBST([HAVE_ATANF])
125 HAVE_ATANL=1; AC_SUBST([HAVE_ATANL])
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])
131 HAVE_COSL=1; AC_SUBST([HAVE_COSL])
132 HAVE_COSHF=1; AC_SUBST([HAVE_COSHF])
133 HAVE_EXPF=1; AC_SUBST([HAVE_EXPF])
134 HAVE_EXPL=1; AC_SUBST([HAVE_EXPL])
135 HAVE_FABSF=1; AC_SUBST([HAVE_FABSF])
136 HAVE_FMODF=1; AC_SUBST([HAVE_FMODF])
137 HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF])
138 HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF])
139 HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND])
140 HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL])
141 HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF])
142 HAVE_LOGF=1; AC_SUBST([HAVE_LOGF])
143 HAVE_LOGL=1; AC_SUBST([HAVE_LOGL])
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])
151 HAVE_SINL=1; AC_SUBST([HAVE_SINL])
152 HAVE_SINHF=1; AC_SUBST([HAVE_SINHF])
153 HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF])
154 HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL])
155 HAVE_TANF=1; AC_SUBST([HAVE_TANF])
156 HAVE_TANL=1; AC_SUBST([HAVE_TANL])
157 HAVE_TANHF=1; AC_SUBST([HAVE_TANHF])
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])
180 REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL])
181 REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF])
182 REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL])
183 REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR])
184 REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF])
185 REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL])
186 REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF])
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])
200 REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC])
201 REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF])
202 REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL])
203 ])
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.
211 AC_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 ])