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.
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 cosf cosl coshf
44 expf expl fabsf floorf floorl fmodf frexpf frexpl
45 ldexpf ldexpl logb logf logl log10f modff powf
46 round roundf roundl sinf sinl sinhf sqrtf sqrtl
47 tanf tanl tanhf trunc truncf truncl])
50 AC_DEFUN([gl_MATH_MODULE_INDICATOR],
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])
59 AC_DEFUN([gl_MATH_H_DEFAULTS],
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_COSF=0; AC_SUBST([GNULIB_COSF])
74 GNULIB_COSL=0; AC_SUBST([GNULIB_COSL])
75 GNULIB_COSHF=0; AC_SUBST([GNULIB_COSHF])
76 GNULIB_EXPF=0; AC_SUBST([GNULIB_EXPF])
77 GNULIB_EXPL=0; AC_SUBST([GNULIB_EXPL])
78 GNULIB_FABSF=0; AC_SUBST([GNULIB_FABSF])
79 GNULIB_FLOOR=0; AC_SUBST([GNULIB_FLOOR])
80 GNULIB_FLOORF=0; AC_SUBST([GNULIB_FLOORF])
81 GNULIB_FLOORL=0; AC_SUBST([GNULIB_FLOORL])
82 GNULIB_FMODF=0; AC_SUBST([GNULIB_FMODF])
83 GNULIB_FREXPF=0; AC_SUBST([GNULIB_FREXPF])
84 GNULIB_FREXP=0; AC_SUBST([GNULIB_FREXP])
85 GNULIB_FREXPL=0; AC_SUBST([GNULIB_FREXPL])
86 GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE])
87 GNULIB_ISINF=0; AC_SUBST([GNULIB_ISINF])
88 GNULIB_ISNAN=0; AC_SUBST([GNULIB_ISNAN])
89 GNULIB_ISNANF=0; AC_SUBST([GNULIB_ISNANF])
90 GNULIB_ISNAND=0; AC_SUBST([GNULIB_ISNAND])
91 GNULIB_ISNANL=0; AC_SUBST([GNULIB_ISNANL])
92 GNULIB_LDEXPF=0; AC_SUBST([GNULIB_LDEXPF])
93 GNULIB_LDEXPL=0; AC_SUBST([GNULIB_LDEXPL])
94 GNULIB_LOGB=0; AC_SUBST([GNULIB_LOGB])
95 GNULIB_LOGF=0; AC_SUBST([GNULIB_LOGF])
96 GNULIB_LOGL=0; AC_SUBST([GNULIB_LOGL])
97 GNULIB_LOG10F=0; AC_SUBST([GNULIB_LOG10F])
98 GNULIB_MODFF=0; AC_SUBST([GNULIB_MODFF])
99 GNULIB_POWF=0; AC_SUBST([GNULIB_POWF])
100 GNULIB_ROUND=0; AC_SUBST([GNULIB_ROUND])
101 GNULIB_ROUNDF=0; AC_SUBST([GNULIB_ROUNDF])
102 GNULIB_ROUNDL=0; AC_SUBST([GNULIB_ROUNDL])
103 GNULIB_SIGNBIT=0; AC_SUBST([GNULIB_SIGNBIT])
104 GNULIB_SINF=0; AC_SUBST([GNULIB_SINF])
105 GNULIB_SINL=0; AC_SUBST([GNULIB_SINL])
106 GNULIB_SINHF=0; AC_SUBST([GNULIB_SINHF])
107 GNULIB_SQRTF=0; AC_SUBST([GNULIB_SQRTF])
108 GNULIB_SQRTL=0; AC_SUBST([GNULIB_SQRTL])
109 GNULIB_TANF=0; AC_SUBST([GNULIB_TANF])
110 GNULIB_TANL=0; AC_SUBST([GNULIB_TANL])
111 GNULIB_TANHF=0; AC_SUBST([GNULIB_TANHF])
112 GNULIB_TRUNC=0; AC_SUBST([GNULIB_TRUNC])
113 GNULIB_TRUNCF=0; AC_SUBST([GNULIB_TRUNCF])
114 GNULIB_TRUNCL=0; AC_SUBST([GNULIB_TRUNCL])
115 dnl Assume proper GNU behavior unless another module says otherwise.
116 HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF])
117 HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL])
118 HAVE_ASINF=1; AC_SUBST([HAVE_ASINF])
119 HAVE_ASINL=1; AC_SUBST([HAVE_ASINL])
120 HAVE_ATANF=1; AC_SUBST([HAVE_ATANF])
121 HAVE_ATANL=1; AC_SUBST([HAVE_ATANL])
122 HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F])
123 HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN])
124 HAVE_COPYSIGNF=1; AC_SUBST([HAVE_COPYSIGNF])
125 HAVE_COSF=1; AC_SUBST([HAVE_COSF])
126 HAVE_COSL=1; AC_SUBST([HAVE_COSL])
127 HAVE_COSHF=1; AC_SUBST([HAVE_COSHF])
128 HAVE_EXPF=1; AC_SUBST([HAVE_EXPF])
129 HAVE_EXPL=1; AC_SUBST([HAVE_EXPL])
130 HAVE_FABSF=1; AC_SUBST([HAVE_FABSF])
131 HAVE_FMODF=1; AC_SUBST([HAVE_FMODF])
132 HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF])
133 HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF])
134 HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND])
135 HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL])
136 HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF])
137 HAVE_LOGF=1; AC_SUBST([HAVE_LOGF])
138 HAVE_LOGL=1; AC_SUBST([HAVE_LOGL])
139 HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F])
140 HAVE_MODFF=1; AC_SUBST([HAVE_MODFF])
141 HAVE_POWF=1; AC_SUBST([HAVE_POWF])
142 HAVE_SINF=1; AC_SUBST([HAVE_SINF])
143 HAVE_SINL=1; AC_SUBST([HAVE_SINL])
144 HAVE_SINHF=1; AC_SUBST([HAVE_SINHF])
145 HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF])
146 HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL])
147 HAVE_TANF=1; AC_SUBST([HAVE_TANF])
148 HAVE_TANL=1; AC_SUBST([HAVE_TANL])
149 HAVE_TANHF=1; AC_SUBST([HAVE_TANHF])
150 HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL])
151 HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL])
152 HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL])
153 HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF])
154 HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL])
155 HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL])
156 HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL])
157 HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF])
158 HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL])
159 HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL])
160 HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL])
161 HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB])
162 HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL])
163 HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND])
164 HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF])
165 HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL])
166 HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL])
167 HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL])
168 HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL])
169 HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC])
170 HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF])
171 HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL])
172 REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL])
173 REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF])
174 REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL])
175 REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR])
176 REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF])
177 REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL])
178 REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF])
179 REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP])
180 REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL])
181 REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL])
182 REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE])
183 REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF])
184 REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN])
185 REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL])
186 REPLACE_NAN=0; AC_SUBST([REPLACE_NAN])
187 REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND])
188 REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF])
189 REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL])
190 REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT])
191 REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC])
192 REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC])
193 REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF])
194 REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL])
197 # gl_LONG_DOUBLE_VS_DOUBLE
198 # determines whether 'long double' and 'double' have the same representation.
199 # Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines
200 # HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly.
201 # The currently known platforms where this is the case are:
202 # Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9.
203 AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE],
205 AC_CACHE_CHECK([whether long double and double are the same],
206 [gl_cv_long_double_equals_double],
208 [AC_LANG_PROGRAM([[#include <float.h>]],
209 [[typedef int check[sizeof (long double) == sizeof (double)
210 && LDBL_MANT_DIG == DBL_MANT_DIG
211 && LDBL_MAX_EXP == DBL_MAX_EXP
212 && LDBL_MIN_EXP == DBL_MIN_EXP
215 [gl_cv_long_double_equals_double=yes],
216 [gl_cv_long_double_equals_double=no])
218 if test $gl_cv_long_double_equals_double = yes; then
219 AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1],
220 [Define to 1 if 'long double' and 'double' have the same representation.])
221 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1
223 HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
225 AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE])