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