X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=libstdc%2B%2B-v3%2Flinkage.m4;fp=libstdc%2B%2B-v3%2Flinkage.m4;h=b24f4556000b30d8b75b98a80d4b93c7a4284604;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=0000000000000000000000000000000000000000;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/libstdc++-v3/linkage.m4 b/libstdc++-v3/linkage.m4 new file mode 100644 index 00000000..b24f4556 --- /dev/null +++ b/libstdc++-v3/linkage.m4 @@ -0,0 +1,399 @@ +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 + #ifdef HAVE_IEEEFP_H + #include + #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 ], + 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 ], + 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 ], + [ $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 ], + [ $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 ], + [ $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 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 ], + [ $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 ], + [ $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_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" +])