2 dnl Copyright (C) 2007-2012 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.
9 AC_REQUIRE([gl_MATH_H_DEFAULTS])
10 gl_CHECK_NEXT_HEADERS([math.h])
11 AC_REQUIRE([AC_C_INLINE])
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. */
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
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. */
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
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 cbrt ceilf ceill copysign copysignf copysignl cosf cosl coshf
44 expf expl fabsf fabsl floorf floorl fma fmaf fmal
45 fmod fmodf fmodl frexpf frexpl hypotf hypotl
46 ldexpf ldexpl logb logf logl log10f log10l modf modff modfl powf
47 remainder remainderf remainderl
48 rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl
49 tanf tanl tanhf trunc truncf truncl])
52 AC_DEFUN([gl_MATH_MODULE_INDICATOR],
54 dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
55 AC_REQUIRE([gl_MATH_H_DEFAULTS])
56 gl_MODULE_INDICATOR_SET_VARIABLE([$1])
57 dnl Define it also as a C macro, for the benefit of the unit tests.
58 gl_MODULE_INDICATOR_FOR_TESTS([$1])
61 AC_DEFUN([gl_MATH_H_DEFAULTS],
63 GNULIB_ACOSF=0; AC_SUBST([GNULIB_ACOSF])
64 GNULIB_ACOSL=0; AC_SUBST([GNULIB_ACOSL])
65 GNULIB_ASINF=0; AC_SUBST([GNULIB_ASINF])
66 GNULIB_ASINL=0; AC_SUBST([GNULIB_ASINL])
67 GNULIB_ATANF=0; AC_SUBST([GNULIB_ATANF])
68 GNULIB_ATANL=0; AC_SUBST([GNULIB_ATANL])
69 GNULIB_ATAN2F=0; AC_SUBST([GNULIB_ATAN2F])
70 GNULIB_CBRT=0; AC_SUBST([GNULIB_CBRT])
71 GNULIB_CEIL=0; AC_SUBST([GNULIB_CEIL])
72 GNULIB_CEILF=0; AC_SUBST([GNULIB_CEILF])
73 GNULIB_CEILL=0; AC_SUBST([GNULIB_CEILL])
74 GNULIB_COPYSIGN=0; AC_SUBST([GNULIB_COPYSIGN])
75 GNULIB_COPYSIGNF=0; AC_SUBST([GNULIB_COPYSIGNF])
76 GNULIB_COPYSIGNL=0; AC_SUBST([GNULIB_COPYSIGNL])
77 GNULIB_COSF=0; AC_SUBST([GNULIB_COSF])
78 GNULIB_COSL=0; AC_SUBST([GNULIB_COSL])
79 GNULIB_COSHF=0; AC_SUBST([GNULIB_COSHF])
80 GNULIB_EXPF=0; AC_SUBST([GNULIB_EXPF])
81 GNULIB_EXPL=0; AC_SUBST([GNULIB_EXPL])
82 GNULIB_FABSF=0; AC_SUBST([GNULIB_FABSF])
83 GNULIB_FABSL=0; AC_SUBST([GNULIB_FABSL])
84 GNULIB_FLOOR=0; AC_SUBST([GNULIB_FLOOR])
85 GNULIB_FLOORF=0; AC_SUBST([GNULIB_FLOORF])
86 GNULIB_FLOORL=0; AC_SUBST([GNULIB_FLOORL])
87 GNULIB_FMA=0; AC_SUBST([GNULIB_FMA])
88 GNULIB_FMAF=0; AC_SUBST([GNULIB_FMAF])
89 GNULIB_FMAL=0; AC_SUBST([GNULIB_FMAL])
90 GNULIB_FMOD=0; AC_SUBST([GNULIB_FMOD])
91 GNULIB_FMODF=0; AC_SUBST([GNULIB_FMODF])
92 GNULIB_FMODL=0; AC_SUBST([GNULIB_FMODL])
93 GNULIB_FREXPF=0; AC_SUBST([GNULIB_FREXPF])
94 GNULIB_FREXP=0; AC_SUBST([GNULIB_FREXP])
95 GNULIB_FREXPL=0; AC_SUBST([GNULIB_FREXPL])
96 GNULIB_HYPOT=0; AC_SUBST([GNULIB_HYPOT])
97 GNULIB_HYPOTF=0; AC_SUBST([GNULIB_HYPOTF])
98 GNULIB_HYPOTL=0; AC_SUBST([GNULIB_HYPOTL])
99 GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE])
100 GNULIB_ISINF=0; AC_SUBST([GNULIB_ISINF])
101 GNULIB_ISNAN=0; AC_SUBST([GNULIB_ISNAN])
102 GNULIB_ISNANF=0; AC_SUBST([GNULIB_ISNANF])
103 GNULIB_ISNAND=0; AC_SUBST([GNULIB_ISNAND])
104 GNULIB_ISNANL=0; AC_SUBST([GNULIB_ISNANL])
105 GNULIB_LDEXPF=0; AC_SUBST([GNULIB_LDEXPF])
106 GNULIB_LDEXPL=0; AC_SUBST([GNULIB_LDEXPL])
107 GNULIB_LOGB=0; AC_SUBST([GNULIB_LOGB])
108 GNULIB_LOGF=0; AC_SUBST([GNULIB_LOGF])
109 GNULIB_LOGL=0; AC_SUBST([GNULIB_LOGL])
110 GNULIB_LOG10F=0; AC_SUBST([GNULIB_LOG10F])
111 GNULIB_LOG10L=0; AC_SUBST([GNULIB_LOG10L])
112 GNULIB_MODF=0; AC_SUBST([GNULIB_MODF])
113 GNULIB_MODFF=0; AC_SUBST([GNULIB_MODFF])
114 GNULIB_MODFL=0; AC_SUBST([GNULIB_MODFL])
115 GNULIB_POWF=0; AC_SUBST([GNULIB_POWF])
116 GNULIB_REMAINDER=0; AC_SUBST([GNULIB_REMAINDER])
117 GNULIB_REMAINDERF=0; AC_SUBST([GNULIB_REMAINDERF])
118 GNULIB_REMAINDERL=0; AC_SUBST([GNULIB_REMAINDERL])
119 GNULIB_RINT=0; AC_SUBST([GNULIB_RINT])
120 GNULIB_RINTF=0; AC_SUBST([GNULIB_RINTF])
121 GNULIB_RINTL=0; AC_SUBST([GNULIB_RINTL])
122 GNULIB_ROUND=0; AC_SUBST([GNULIB_ROUND])
123 GNULIB_ROUNDF=0; AC_SUBST([GNULIB_ROUNDF])
124 GNULIB_ROUNDL=0; AC_SUBST([GNULIB_ROUNDL])
125 GNULIB_SIGNBIT=0; AC_SUBST([GNULIB_SIGNBIT])
126 GNULIB_SINF=0; AC_SUBST([GNULIB_SINF])
127 GNULIB_SINL=0; AC_SUBST([GNULIB_SINL])
128 GNULIB_SINHF=0; AC_SUBST([GNULIB_SINHF])
129 GNULIB_SQRTF=0; AC_SUBST([GNULIB_SQRTF])
130 GNULIB_SQRTL=0; AC_SUBST([GNULIB_SQRTL])
131 GNULIB_TANF=0; AC_SUBST([GNULIB_TANF])
132 GNULIB_TANL=0; AC_SUBST([GNULIB_TANL])
133 GNULIB_TANHF=0; AC_SUBST([GNULIB_TANHF])
134 GNULIB_TRUNC=0; AC_SUBST([GNULIB_TRUNC])
135 GNULIB_TRUNCF=0; AC_SUBST([GNULIB_TRUNCF])
136 GNULIB_TRUNCL=0; AC_SUBST([GNULIB_TRUNCL])
137 dnl Assume proper GNU behavior unless another module says otherwise.
138 HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF])
139 HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL])
140 HAVE_ASINF=1; AC_SUBST([HAVE_ASINF])
141 HAVE_ASINL=1; AC_SUBST([HAVE_ASINL])
142 HAVE_ATANF=1; AC_SUBST([HAVE_ATANF])
143 HAVE_ATANL=1; AC_SUBST([HAVE_ATANL])
144 HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F])
145 HAVE_CBRT=1; AC_SUBST([HAVE_CBRT])
146 HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN])
147 HAVE_COPYSIGNF=1; AC_SUBST([HAVE_COPYSIGNF])
148 HAVE_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL])
149 HAVE_COSF=1; AC_SUBST([HAVE_COSF])
150 HAVE_COSL=1; AC_SUBST([HAVE_COSL])
151 HAVE_COSHF=1; AC_SUBST([HAVE_COSHF])
152 HAVE_EXPF=1; AC_SUBST([HAVE_EXPF])
153 HAVE_EXPL=1; AC_SUBST([HAVE_EXPL])
154 HAVE_FABSF=1; AC_SUBST([HAVE_FABSF])
155 HAVE_FABSL=1; AC_SUBST([HAVE_FABSL])
156 HAVE_FMA=1; AC_SUBST([HAVE_FMA])
157 HAVE_FMAF=1; AC_SUBST([HAVE_FMAF])
158 HAVE_FMAL=1; AC_SUBST([HAVE_FMAL])
159 HAVE_FMODF=1; AC_SUBST([HAVE_FMODF])
160 HAVE_FMODL=1; AC_SUBST([HAVE_FMODL])
161 HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF])
162 HAVE_HYPOTF=1; AC_SUBST([HAVE_HYPOTF])
163 HAVE_HYPOTL=1; AC_SUBST([HAVE_HYPOTL])
164 HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF])
165 HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND])
166 HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL])
167 HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF])
168 HAVE_LOGF=1; AC_SUBST([HAVE_LOGF])
169 HAVE_LOGL=1; AC_SUBST([HAVE_LOGL])
170 HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F])
171 HAVE_LOG10L=1; AC_SUBST([HAVE_LOG10L])
172 HAVE_MODFF=1; AC_SUBST([HAVE_MODFF])
173 HAVE_MODFL=1; AC_SUBST([HAVE_MODFL])
174 HAVE_POWF=1; AC_SUBST([HAVE_POWF])
175 HAVE_REMAINDER=1; AC_SUBST([HAVE_REMAINDER])
176 HAVE_REMAINDERF=1; AC_SUBST([HAVE_REMAINDERF])
177 HAVE_REMAINDERL=1; AC_SUBST([HAVE_REMAINDERL])
178 HAVE_RINT=1; AC_SUBST([HAVE_RINT])
179 HAVE_RINTF=1; AC_SUBST([HAVE_RINTF])
180 HAVE_RINTL=1; AC_SUBST([HAVE_RINTL])
181 HAVE_SINF=1; AC_SUBST([HAVE_SINF])
182 HAVE_SINL=1; AC_SUBST([HAVE_SINL])
183 HAVE_SINHF=1; AC_SUBST([HAVE_SINHF])
184 HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF])
185 HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL])
186 HAVE_TANF=1; AC_SUBST([HAVE_TANF])
187 HAVE_TANL=1; AC_SUBST([HAVE_TANL])
188 HAVE_TANHF=1; AC_SUBST([HAVE_TANHF])
189 HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL])
190 HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL])
191 HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL])
192 HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF])
193 HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL])
194 HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL])
195 HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL])
196 HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF])
197 HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL])
198 HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL])
199 HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL])
200 HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB])
201 HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL])
202 HAVE_DECL_LOG10L=1; AC_SUBST([HAVE_DECL_LOG10L])
203 HAVE_DECL_REMAINDER=1; AC_SUBST([HAVE_DECL_REMAINDER])
204 HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND])
205 HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF])
206 HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL])
207 HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL])
208 HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL])
209 HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL])
210 HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC])
211 HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF])
212 HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL])
213 REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL])
214 REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF])
215 REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL])
216 REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL])
217 REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR])
218 REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF])
219 REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL])
220 REPLACE_FMA=0; AC_SUBST([REPLACE_FMA])
221 REPLACE_FMAF=0; AC_SUBST([REPLACE_FMAF])
222 REPLACE_FMAL=0; AC_SUBST([REPLACE_FMAL])
223 REPLACE_FMOD=0; AC_SUBST([REPLACE_FMOD])
224 REPLACE_FMODF=0; AC_SUBST([REPLACE_FMODF])
225 REPLACE_FMODL=0; AC_SUBST([REPLACE_FMODL])
226 REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF])
227 REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP])
228 REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL])
229 REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL])
230 REPLACE_HYPOT=0; AC_SUBST([REPLACE_HYPOT])
231 REPLACE_HYPOTF=0; AC_SUBST([REPLACE_HYPOTF])
232 REPLACE_HYPOTL=0; AC_SUBST([REPLACE_HYPOTL])
233 REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE])
234 REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF])
235 REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN])
236 REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL])
237 REPLACE_MODF=0; AC_SUBST([REPLACE_MODF])
238 REPLACE_MODFF=0; AC_SUBST([REPLACE_MODFF])
239 REPLACE_MODFL=0; AC_SUBST([REPLACE_MODFL])
240 REPLACE_NAN=0; AC_SUBST([REPLACE_NAN])
241 REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER])
242 REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF])
243 REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL])
244 REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND])
245 REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF])
246 REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL])
247 REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT])
248 REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC])
249 REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC])
250 REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF])
251 REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL])
254 # gl_LONG_DOUBLE_VS_DOUBLE
255 # determines whether 'long double' and 'double' have the same representation.
256 # Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines
257 # HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly.
258 # The currently known platforms where this is the case are:
259 # Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9.
260 AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE],
262 AC_CACHE_CHECK([whether long double and double are the same],
263 [gl_cv_long_double_equals_double],
265 [AC_LANG_PROGRAM([[#include <float.h>]],
266 [[typedef int check[sizeof (long double) == sizeof (double)
267 && LDBL_MANT_DIG == DBL_MANT_DIG
268 && LDBL_MAX_EXP == DBL_MAX_EXP
269 && LDBL_MIN_EXP == DBL_MIN_EXP
272 [gl_cv_long_double_equals_double=yes],
273 [gl_cv_long_double_equals_double=no])
275 if test $gl_cv_long_double_equals_double = yes; then
276 AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1],
277 [Define to 1 if 'long double' and 'double' have the same representation.])
278 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1
280 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
282 AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE])