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