2 dnl This file contains macros for testing linkage.
6 dnl Check to see if the (math function) argument passed is
7 dnl declared when using the c++ compiler
8 dnl ASSUMES argument is a math function with ONE parameter
10 dnl GLIBCXX_CHECK_MATH_DECL_1
11 AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_1], [
12 AC_MSG_CHECKING([for $1 declaration])
13 if test x${glibcxx_cv_func_$1_use+set} != xset; then
14 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
17 AC_TRY_COMPILE([#include <math.h>
23 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
27 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
32 dnl Define autoheader template for using the underscore functions
33 dnl For each parameter, create a macro where if func doesn't exist,
34 dnl but _func does, then it will "#define func _func".
36 dnl GLIBCXX_MAYBE_UNDERSCORED_FUNCS
37 AC_DEFUN([GLIBCXX_MAYBE_UNDERSCORED_FUNCS],
38 [AC_FOREACH([glibcxx_ufunc], [$1],
39 [AH_VERBATIM(_[]glibcxx_ufunc,
40 [#if defined (]AS_TR_CPP(HAVE__[]glibcxx_ufunc)[) && ! defined (]AS_TR_CPP(HAVE_[]glibcxx_ufunc)[)
41 # define ]AS_TR_CPP(HAVE_[]glibcxx_ufunc)[ 1
42 # define ]glibcxx_ufunc[ _]glibcxx_ufunc[
48 dnl Check to see if the (math function) argument passed is
49 dnl 1) declared when using the c++ compiler
50 dnl 2) has "C" linkage
51 dnl 3) if not, see if 1) and 2) for argument prepended with '_'
53 dnl Define HAVE_CARGF etc if "cargf" is declared and links
55 dnl argument 1 is name of function to check
57 dnl ASSUMES argument is a math function with ONE parameter
59 dnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1
60 AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1], [
61 GLIBCXX_CHECK_MATH_DECL_1($1)
62 if test x$glibcxx_cv_func_$1_use = x"yes"; then
65 GLIBCXX_CHECK_MATH_DECL_1(_$1)
66 if test x$glibcxx_cv_func__$1_use = x"yes"; then
70 GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
75 dnl Like GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1, but does a bunch of
76 dnl of functions at once. It's an all-or-nothing check -- either
77 dnl HAVE_XYZ is defined for each of the functions, or for none of them.
78 dnl Doing it this way saves significant configure time.
79 AC_DEFUN([GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1], [
80 define([funclist],patsubst($3,\(\w+\)\(\W*\),\1 ))dnl
81 AC_MSG_CHECKING([for $1 functions])
82 AC_CACHE_VAL(glibcxx_cv_func_$2_use, [
85 AC_TRY_COMPILE([#include <math.h>],
86 patsubst(funclist,[\w+],[\& (0);]),
87 [glibcxx_cv_func_$2_use=yes],
88 [glibcxx_cv_func_$2_use=no])
90 AC_MSG_RESULT($glibcxx_cv_func_$2_use)
91 if test x$glibcxx_cv_func_$2_use = x"yes"; then
92 AC_CHECK_FUNCS(funclist)
94 AC_MSG_CHECKING([for _$1 functions])
95 AC_CACHE_VAL(glibcxx_cv_func__$2_use, [
98 AC_TRY_COMPILE([#include <math.h>],
99 patsubst(funclist,[\w+],[_\& (0);]),
100 [glibcxx_cv_func__$2_use=yes],
101 [glibcxx_cv_func__$2_use=no])
103 AC_MSG_RESULT($glibcxx_cv_func__$2_use)
104 if test x$glibcxx_cv_func__$2_use = x"yes"; then
105 AC_CHECK_FUNCS(patsubst(funclist,[\w+],[_\&]))
108 GLIBCXX_MAYBE_UNDERSCORED_FUNCS(funclist)
113 dnl Check to see if the (math function) argument passed is
114 dnl declared when using the c++ compiler
115 dnl ASSUMES argument is a math function with TWO parameters
117 dnl GLIBCXX_CHECK_MATH_DECL_2
118 AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_2], [
119 AC_MSG_CHECKING([for $1 declaration])
120 if test x${glibcxx_cv_func_$1_use+set} != xset; then
121 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
124 AC_TRY_COMPILE([#include <math.h>],
126 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
130 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
134 dnl Check to see if the (math function) argument passed is
135 dnl 1) declared when using the c++ compiler
136 dnl 2) has "C" linkage
138 dnl Define HAVE_CARGF etc if "cargf" is declared and links
140 dnl argument 1 is name of function to check
142 dnl ASSUMES argument is a math function with TWO parameters
144 dnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2
145 AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2], [
146 GLIBCXX_CHECK_MATH_DECL_2($1)
147 if test x$glibcxx_cv_func_$1_use = x"yes"; then
150 GLIBCXX_CHECK_MATH_DECL_2(_$1)
151 if test x$glibcxx_cv_func__$1_use = x"yes"; then
155 GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
160 dnl Check to see if the (math function) argument passed is
161 dnl declared when using the c++ compiler
162 dnl ASSUMES argument is a math function with THREE parameters
164 dnl GLIBCXX_CHECK_MATH_DECL_3
165 AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_3], [
166 AC_MSG_CHECKING([for $1 declaration])
167 if test x${glibcxx_cv_func_$1_use+set} != xset; then
168 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
171 AC_TRY_COMPILE([#include <math.h>],
173 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
177 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
181 dnl Check to see if the (math function) argument passed is
182 dnl 1) declared when using the c++ compiler
183 dnl 2) has "C" linkage
185 dnl Define HAVE_CARGF etc if "cargf" is declared and links
187 dnl argument 1 is name of function to check
189 dnl ASSUMES argument is a math function with THREE parameters
191 dnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3
192 AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3], [
193 GLIBCXX_CHECK_MATH_DECL_3($1)
194 if test x$glibcxx_cv_func_$1_use = x"yes"; then
197 GLIBCXX_CHECK_MATH_DECL_3(_$1)
198 if test x$glibcxx_cv_func__$1_use = x"yes"; then
202 GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
207 dnl Check to see if the (stdlib function) argument passed is
208 dnl 1) declared when using the c++ compiler
209 dnl 2) has "C" linkage
211 dnl argument 1 is name of function to check
213 dnl ASSUMES argument is a stdlib function without parameters
215 dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0
216 AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0], [
217 AC_MSG_CHECKING([for $1 declaration])
218 if test x${glibcxx_cv_func_$1_use+set} != xset; then
219 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
222 AC_TRY_COMPILE([#include <stdlib.h>],
224 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
228 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
229 if test x$glibcxx_cv_func_$1_use = x"yes"; then
236 dnl Check to see if the (stdlib function) argument passed is
237 dnl 1) declared when using the c++ compiler
238 dnl 2) has "C" linkage
240 dnl argument 1 is name of function to check
242 dnl ASSUMES argument is a stdlib function with TWO parameters
244 dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2
245 AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2], [
246 AC_MSG_CHECKING([for $1 declaration])
247 if test x${glibcxx_cv_func_$1_use+set} != xset; then
248 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
251 AC_TRY_COMPILE([#include <stdlib.h>],
253 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
257 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
258 if test x$glibcxx_cv_func_$1_use = x"yes"; then
261 GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
266 dnl Check to see if the (stdlib function) argument passed is
267 dnl 1) declared when using the c++ compiler
268 dnl 2) has "C" linkage
270 dnl argument 1 is name of function to check
272 dnl ASSUMES argument is a stdlib function with THREE parameters
274 dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3
275 AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3], [
276 AC_MSG_CHECKING([for $1 declaration])
277 if test x${glibcxx_cv_func_$1_use+set} != xset; then
278 AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
281 AC_TRY_COMPILE([#include <stdlib.h>],
283 [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
287 AC_MSG_RESULT($glibcxx_cv_func_$1_use)
288 if test x$glibcxx_cv_func_$1_use = x"yes"; then
294 dnl Check to see what the underlying c library is like
295 dnl These checks need to do two things:
296 dnl 1) make sure the name is declared when using the c++ compiler
297 dnl 2) make sure the name has "C" linkage
298 dnl This might seem like overkill but experience has shown that it's not...
300 dnl Define HAVE_STRTOLD if "strtold" is declared and links
301 dnl Define HAVE_STRTOF if "strtof" is declared and links
303 dnl GLIBCXX_CHECK_STDLIB_SUPPORT
304 AC_DEFUN([GLIBCXX_CHECK_STDLIB_SUPPORT], [
305 ac_test_CXXFLAGS="${CXXFLAGS+set}"
306 ac_save_CXXFLAGS="$CXXFLAGS"
307 CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
309 GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
310 GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtof)
312 CXXFLAGS="$ac_save_CXXFLAGS"
316 dnl Check to see what the underlying c library or math library is like.
317 dnl These checks need to do two things:
318 dnl 1) make sure the name is declared when using the c++ compiler
319 dnl 2) make sure the name has "C" linkage
320 dnl This might seem like overkill but experience has shown that it's not...
322 dnl Define HAVE_CARGF etc if "cargf" is found.
324 dnl GLIBCXX_CHECK_MATH_SUPPORT
325 AC_DEFUN([GLIBCXX_CHECK_MATH_SUPPORT], [
326 ac_test_CXXFLAGS="${CXXFLAGS+set}"
327 ac_save_CXXFLAGS="$CXXFLAGS"
328 CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
331 AC_CHECK_LIB(m, sin, libm="-lm")
335 dnl Check to see if certain C math functions exist.
336 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinf)
337 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnan)
338 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finite)
339 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(copysign)
340 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincos)
341 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass)
342 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)
343 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypot)
345 dnl Check to see if basic C math functions have float versions.
346 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(float trig,
351 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(float round,
354 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(expf)
355 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)
356 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)
357 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(atan2f)
358 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)
359 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)
360 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)
361 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypotf)
362 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf)
363 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(logf)
364 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(log10f)
365 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modff)
366 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modf)
367 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(powf)
368 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf)
369 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
370 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
372 dnl Check to see if basic C math functions have long double versions.
373 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(long double trig,
378 GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(long double round,
381 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
382 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
383 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(copysignl)
384 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
385 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
386 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
387 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
388 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
389 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypotl)
390 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
391 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
392 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
393 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
394 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
395 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
396 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
397 GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
400 CXXFLAGS="$ac_save_CXXFLAGS"
405 dnl Check to see if there is native support for complex
407 dnl Don't compile bits in math/* if native support exits.
409 dnl Define USE_COMPLEX_LONG_DOUBLE etc if "copysignl" is found.
411 dnl GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
412 AC_DEFUN([GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT], [
413 dnl Check for complex versions of math functions of platform. This will
414 dnl always pass if libm is available, and fail if it isn't. If it is
415 dnl available, we assume we'll need it later, so add it to LIBS.
416 AC_CHECK_LIB(m, main)
417 AC_REPLACE_MATHFUNCS(copysignf)
419 dnl For __signbit to signbit conversions.
420 dnl Not sure why this is done, as these will be macros mostly.
421 dnl Should probably coordinate this with std_cmath.h.
422 AC_CHECK_FUNCS([__signbit], , [LIBMATHOBJS="$LIBMATHOBJS signbit.lo"])
424 AC_CHECK_FUNCS([__signbitf], , [LIBMATHOBJS="$LIBMATHOBJS signbitf.lo"])
426 dnl Compile the long double complex functions only if the function
427 dnl provides the non-complex long double functions that are needed.
428 dnl Currently this includes copysignl, which should be
429 dnl cached from the GLIBCXX_CHECK_MATH_SUPPORT macro, above.
430 if test x$ac_cv_func_copysignl = x"yes"; then
431 AC_CHECK_FUNCS([__signbitl], , [LIBMATHOBJS="$LIBMATHOBJS signbitl.lo"])
434 # Used in libmath/Makefile.am.
435 if test -n "$LIBMATHOBJS"; then
438 AC_SUBST(LIBMATHOBJS)
442 # Check for functions in math library.
443 # Ulrich Drepper <drepper@cygnus.com>, 1998.
445 # This file can be copied and used freely without restrictions. It can
446 # be used in projects which are not available under the GNU Public License
447 # but which still want to provide support for the GNU gettext functionality.
448 # Please note that the actual code is *not* freely available.
449 dnl AC_REPLACE_MATHFUNCS(FUNCTION...)
450 AC_DEFUN([AC_REPLACE_MATHFUNCS],
451 [AC_CHECK_FUNCS([$1], , [LIBMATHOBJS="$LIBMATHOBJS ${ac_func}.lo"])])