123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430 |
- dnl
- dnl This file contains macros for testing linkage.
- dnl
- dnl
- dnl Check to see if the (math function) argument passed is
- dnl declared when using the c++ compiler
- dnl ASSUMES argument is a math function with ONE parameter
- dnl
- dnl GLIBCXX_CHECK_MATH_DECL_1
- AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_1], [
- AC_MSG_CHECKING([for $1 declaration])
- if test x${glibcxx_cv_func_$1_use+set} != xset; then
- AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
- AC_LANG_SAVE
- AC_LANG_CPLUSPLUS
- AC_TRY_COMPILE([#include <math.h>
- #ifdef HAVE_IEEEFP_H
- #include <ieeefp.h>
- #endif
- ],
- [ $1(0);],
- [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
- AC_LANG_RESTORE
- ])
- fi
- AC_MSG_RESULT($glibcxx_cv_func_$1_use)
- ])
- dnl
- dnl Define autoheader template for using the underscore functions
- dnl For each parameter, create a macro where if func doesn't exist,
- dnl but _func does, then it will "#define func _func".
- dnl
- dnl GLIBCXX_MAYBE_UNDERSCORED_FUNCS
- AC_DEFUN([GLIBCXX_MAYBE_UNDERSCORED_FUNCS],
- [AC_FOREACH([glibcxx_ufunc], [$1],
- [AH_VERBATIM(_[]glibcxx_ufunc,
- [#if defined (]AS_TR_CPP(HAVE__[]glibcxx_ufunc)[) && ! defined (]AS_TR_CPP(HAVE_[]glibcxx_ufunc)[)
- # define ]AS_TR_CPP(HAVE_[]glibcxx_ufunc)[ 1
- # define ]glibcxx_ufunc[ _]glibcxx_ufunc[
- #endif])])
- ])
- dnl
- dnl Check to see if the (math function) argument passed is
- dnl 1) declared when using the c++ compiler
- dnl 2) has "C" linkage
- dnl 3) if not, see if 1) and 2) for argument prepended with '_'
- dnl
- dnl Define HAVE_CARGF etc if "cargf" is declared and links
- dnl
- dnl argument 1 is name of function to check
- dnl
- dnl ASSUMES argument is a math function with ONE parameter
- dnl
- dnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1
- AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1], [
- GLIBCXX_CHECK_MATH_DECL_1($1)
- if test x$glibcxx_cv_func_$1_use = x"yes"; then
- AC_CHECK_FUNCS($1)
- else
- GLIBCXX_CHECK_MATH_DECL_1(_$1)
- if test x$glibcxx_cv_func__$1_use = x"yes"; then
- AC_CHECK_FUNCS(_$1)
- fi
- fi
- GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
- ])
- dnl
- dnl Like GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1, but does a bunch of
- dnl of functions at once. It's an all-or-nothing check -- either
- dnl HAVE_XYZ is defined for each of the functions, or for none of them.
- dnl Doing it this way saves significant configure time.
- AC_DEFUN([GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1], [
- define([funclist],patsubst($3,\(\w+\)\(\W*\),\1 ))dnl
- AC_MSG_CHECKING([for $1 functions])
- AC_CACHE_VAL(glibcxx_cv_func_$2_use, [
- AC_LANG_SAVE
- AC_LANG_CPLUSPLUS
- AC_TRY_COMPILE([#include <math.h>],
- patsubst(funclist,[\w+],[\& (0);]),
- [glibcxx_cv_func_$2_use=yes],
- [glibcxx_cv_func_$2_use=no])
- AC_LANG_RESTORE])
- AC_MSG_RESULT($glibcxx_cv_func_$2_use)
- if test x$glibcxx_cv_func_$2_use = x"yes"; then
- AC_CHECK_FUNCS(funclist)
- else
- AC_MSG_CHECKING([for _$1 functions])
- AC_CACHE_VAL(glibcxx_cv_func__$2_use, [
- AC_LANG_SAVE
- AC_LANG_CPLUSPLUS
- AC_TRY_COMPILE([#include <math.h>],
- patsubst(funclist,[\w+],[_\& (0);]),
- [glibcxx_cv_func__$2_use=yes],
- [glibcxx_cv_func__$2_use=no])
- AC_LANG_RESTORE])
- AC_MSG_RESULT($glibcxx_cv_func__$2_use)
- if test x$glibcxx_cv_func__$2_use = x"yes"; then
- AC_CHECK_FUNCS(patsubst(funclist,[\w+],[_\&]))
- fi
- fi
- GLIBCXX_MAYBE_UNDERSCORED_FUNCS(funclist)
- undefine([funclist])
- ])
- dnl
- dnl Check to see if the (math function) argument passed is
- dnl declared when using the c++ compiler
- dnl ASSUMES argument is a math function with TWO parameters
- dnl
- dnl GLIBCXX_CHECK_MATH_DECL_2
- AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_2], [
- AC_MSG_CHECKING([for $1 declaration])
- if test x${glibcxx_cv_func_$1_use+set} != xset; then
- AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
- AC_LANG_SAVE
- AC_LANG_CPLUSPLUS
- AC_TRY_COMPILE([#include <math.h>],
- [ $1(0, 0);],
- [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
- AC_LANG_RESTORE
- ])
- fi
- AC_MSG_RESULT($glibcxx_cv_func_$1_use)
- ])
- dnl
- dnl Check to see if the (math function) argument passed is
- dnl 1) declared when using the c++ compiler
- dnl 2) has "C" linkage
- dnl
- dnl Define HAVE_CARGF etc if "cargf" is declared and links
- dnl
- dnl argument 1 is name of function to check
- dnl
- dnl ASSUMES argument is a math function with TWO parameters
- dnl
- dnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2
- AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2], [
- GLIBCXX_CHECK_MATH_DECL_2($1)
- if test x$glibcxx_cv_func_$1_use = x"yes"; then
- AC_CHECK_FUNCS($1)
- else
- GLIBCXX_CHECK_MATH_DECL_2(_$1)
- if test x$glibcxx_cv_func__$1_use = x"yes"; then
- AC_CHECK_FUNCS(_$1)
- fi
- fi
- GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
- ])
- dnl
- dnl Check to see if the (math function) argument passed is
- dnl declared when using the c++ compiler
- dnl ASSUMES argument is a math function with THREE parameters
- dnl
- dnl GLIBCXX_CHECK_MATH_DECL_3
- AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_3], [
- AC_MSG_CHECKING([for $1 declaration])
- if test x${glibcxx_cv_func_$1_use+set} != xset; then
- AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
- AC_LANG_SAVE
- AC_LANG_CPLUSPLUS
- AC_TRY_COMPILE([#include <math.h>],
- [ $1(0, 0, 0);],
- [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
- AC_LANG_RESTORE
- ])
- fi
- AC_MSG_RESULT($glibcxx_cv_func_$1_use)
- ])
- dnl
- dnl Check to see if the (math function) argument passed is
- dnl 1) declared when using the c++ compiler
- dnl 2) has "C" linkage
- dnl
- dnl Define HAVE_CARGF etc if "cargf" is declared and links
- dnl
- dnl argument 1 is name of function to check
- dnl
- dnl ASSUMES argument is a math function with THREE parameters
- dnl
- dnl GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3
- AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3], [
- GLIBCXX_CHECK_MATH_DECL_3($1)
- if test x$glibcxx_cv_func_$1_use = x"yes"; then
- AC_CHECK_FUNCS($1)
- else
- GLIBCXX_CHECK_MATH_DECL_3(_$1)
- if test x$glibcxx_cv_func__$1_use = x"yes"; then
- AC_CHECK_FUNCS(_$1)
- fi
- fi
- GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
- ])
- dnl
- dnl Check to see if the (stdlib function) argument passed is
- dnl 1) declared when using the c++ compiler
- dnl 2) has "C" linkage
- dnl
- dnl argument 1 is name of function to check
- dnl
- dnl ASSUMES argument is a stdlib function without parameters
- dnl
- dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0
- AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0], [
- AC_MSG_CHECKING([for $1 declaration])
- if test x${glibcxx_cv_func_$1_use+set} != xset; then
- AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
- AC_LANG_SAVE
- AC_LANG_CPLUSPLUS
- AC_TRY_COMPILE([#include <stdlib.h>],
- [ $1();],
- [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
- AC_LANG_RESTORE
- ])
- fi
- AC_MSG_RESULT($glibcxx_cv_func_$1_use)
- if test x$glibcxx_cv_func_$1_use = x"yes"; then
- AC_CHECK_FUNCS($1)
- fi
- ])
- dnl
- dnl Check to see if the (stdlib function) argument passed is
- dnl 1) declared when using the c++ compiler
- dnl 2) has "C" linkage
- dnl
- dnl argument 1 is name of function to check
- dnl
- dnl ASSUMES argument is a stdlib function with ONE parameter
- dnl
- dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1
- AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1], [
- AC_MSG_CHECKING([for $1 declaration])
- if test x${glibcxx_cv_func_$1_use+set} != xset; then
- AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
- AC_LANG_SAVE
- AC_LANG_CPLUSPLUS
- AC_TRY_COMPILE([#include <stdlib.h>],
- [ $1(0);],
- [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
- AC_LANG_RESTORE
- ])
- fi
- AC_MSG_RESULT($glibcxx_cv_func_$1_use)
- if test x$glibcxx_cv_func_$1_use = x"yes"; then
- AC_CHECK_FUNCS($1)
- fi
- ])
- dnl
- dnl Check to see if the (stdlib function) argument passed is
- dnl 1) declared when using the c++ compiler
- dnl 2) has "C" linkage
- dnl
- dnl argument 1 is name of function to check
- dnl
- dnl ASSUMES argument is a stdlib function with TWO parameters
- dnl
- dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2
- AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2], [
- AC_MSG_CHECKING([for $1 declaration])
- if test x${glibcxx_cv_func_$1_use+set} != xset; then
- AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
- AC_LANG_SAVE
- AC_LANG_CPLUSPLUS
- AC_TRY_COMPILE([#include <stdlib.h>],
- [ $1(0, 0);],
- [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
- AC_LANG_RESTORE
- ])
- fi
- AC_MSG_RESULT($glibcxx_cv_func_$1_use)
- if test x$glibcxx_cv_func_$1_use = x"yes"; then
- AC_CHECK_FUNCS($1)
- fi
- GLIBCXX_MAYBE_UNDERSCORED_FUNCS($1)
- ])
- dnl
- dnl Check to see if the (stdlib function) argument passed is
- dnl 1) declared when using the c++ compiler
- dnl 2) has "C" linkage
- dnl
- dnl argument 1 is name of function to check
- dnl
- dnl ASSUMES argument is a stdlib function with THREE parameters
- dnl
- dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3
- AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3], [
- AC_MSG_CHECKING([for $1 declaration])
- if test x${glibcxx_cv_func_$1_use+set} != xset; then
- AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
- AC_LANG_SAVE
- AC_LANG_CPLUSPLUS
- AC_TRY_COMPILE([#include <stdlib.h>],
- [ $1(0, 0, 0);],
- [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
- AC_LANG_RESTORE
- ])
- fi
- AC_MSG_RESULT($glibcxx_cv_func_$1_use)
- if test x$glibcxx_cv_func_$1_use = x"yes"; then
- AC_CHECK_FUNCS($1)
- fi
- ])
- dnl
- dnl Check to see what the underlying c library is like
- dnl These checks need to do two things:
- dnl 1) make sure the name is declared when using the c++ compiler
- dnl 2) make sure the name has "C" linkage
- dnl This might seem like overkill but experience has shown that it's not...
- dnl
- dnl Define HAVE_STRTOLD if "strtold" is declared and links
- dnl Define HAVE_STRTOF if "strtof" is declared and links
- dnl
- dnl GLIBCXX_CHECK_STDLIB_SUPPORT
- AC_DEFUN([GLIBCXX_CHECK_STDLIB_SUPPORT], [
- ac_test_CXXFLAGS="${CXXFLAGS+set}"
- ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
- GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1(at_quick_exit)
- GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1(quick_exit)
- GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
- GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtof)
- CXXFLAGS="$ac_save_CXXFLAGS"
- ])
- dnl
- dnl Check to see what the underlying c library or math library is like.
- dnl These checks need to do two things:
- dnl 1) make sure the name is declared when using the c++ compiler
- dnl 2) make sure the name has "C" linkage
- dnl This might seem like overkill but experience has shown that it's not...
- dnl
- dnl Define HAVE_CARGF etc if "cargf" is found.
- dnl
- dnl GLIBCXX_CHECK_MATH_SUPPORT
- AC_DEFUN([GLIBCXX_CHECK_MATH_SUPPORT], [
- ac_test_CXXFLAGS="${CXXFLAGS+set}"
- ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS='-fno-builtin -D_GNU_SOURCE'
- dnl Check libm
- AC_CHECK_LIB(m, sin, libm="-lm")
- ac_save_LIBS="$LIBS"
- LIBS="$LIBS $libm"
- dnl Check to see if certain C math functions exist.
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinf)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnan)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finite)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincos)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypot)
- dnl Check to see if basic C math functions have float versions.
- GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(float trig,
- float_trig,
- acosf asinf atanf \
- cosf sinf tanf \
- coshf sinhf tanhf)
- GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(float round,
- float_round,
- ceilf floorf)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(expf)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(atan2f)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypotf)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(logf)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(log10f)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modff)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modf)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(powf)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
- dnl Check to see if basic C math functions have long double versions.
- GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(long double trig,
- long_double_trig,
- acosl asinl atanl \
- cosl sinl tanl \
- coshl sinhl tanhl)
- GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1(long double round,
- long_double_round,
- ceill floorl)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(hypotl)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
- GLIBCXX_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
- LIBS="$ac_save_LIBS"
- CXXFLAGS="$ac_save_CXXFLAGS"
- ])
|