1 dnl GCC_CHECK_LIBM 2 dnl 3 dnl Check whether -lm is available. This is a pre-requisite for 4 dnl GCC_CHECK_MATH_FUNC so that it will link with -lm. 5 AC_DEFUN([GCC_CHECK_LIBM], 6 [AC_CHECK_LIB([m],[sin])]) 7 8 dnl GCC_CHECK_MATH_HEADERS 9 dnl 10 dnl Check for math.h and complex.h. This is a pre-requisite for 11 dnl GCC_CHECK_MATH_FUNC so that it includes the right headers. 12 dnl (Some systems, such as AIX or OpenVMS may define macro for math 13 dnl functions). 14 AC_DEFUN([GCC_CHECK_MATH_HEADERS], 15 [AC_CHECK_HEADERS_ONCE(math.h complex.h)]) 16 17 dnl GCC_CHECK_MATH_FUNC([name]) 18 dnl 19 dnl Check whether math function NAME is available on the system (by compiling 20 dnl and linking a C program) and run define HAVE_name on success. 21 dnl 22 dnl Note that OpenVMS system insists on including complex.h before math.h 23 AC_DEFUN([GCC_CHECK_MATH_FUNC], 24 [ 25 AC_REQUIRE([GCC_CHECK_LIBM]) 26 AC_REQUIRE([GCC_CHECK_MATH_HEADERS]) 27 AC_CACHE_CHECK([for $1], [gcc_cv_math_func_$1], 28 [AC_LINK_IFELSE([AC_LANG_SOURCE([ 29 #ifdef HAVE_COMPLEX_H 30 #include <complex.h> 31 #endif 32 #ifdef HAVE_MATH_H 33 #include <math.h> 34 #endif 35 36 int (*ptr)() = (int (*)())$1; 37 38 int 39 main () 40 { 41 return 0; 42 } 43 ])], 44 [gcc_cv_math_func_$1=yes], 45 [gcc_cv_math_func_$1=no])]) 46 if test $gcc_cv_math_func_$1 = yes; then 47 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1),[1], 48 [Define to 1 if you have the `$1' function.]) 49 fi 50 ]) 51 52 dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1([name], [type]) 53 dnl 54 dnl Check if math function NAME fallback for function with single 55 dnl TYPE argument and TYPE result can be implemented using 56 dnl __builtin_NAME expanded inline without needing unavailable math 57 dnl library function. 58 AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1], 59 [ 60 AC_REQUIRE([GCC_CHECK_LIBM]) 61 if test $gcc_cv_math_func_$1 = no; then 62 AC_CACHE_CHECK([for inline __builtin_$1], [gcc_cv_math_inline_builtin_$1], 63 [AC_LINK_IFELSE([AC_LANG_SOURCE([ 64 $2 65 $1_fallback ($2 x) 66 { 67 return __builtin_$1 (x); 68 } 69 70 int 71 main () 72 { 73 return 0; 74 } 75 ])], 76 [gcc_cv_math_inline_builtin_$1=yes], 77 [gcc_cv_math_inline_builtin_$1=no])]) 78 if test $gcc_cv_math_inline_builtin_$1 = yes; then 79 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_INLINE_BUILTIN_$1),[1], 80 [Define to 1 if `__builtin_$1' is expanded inline.]) 81 fi 82 fi]) 83 84 dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2([name], [type]) 85 dnl 86 dnl Check if math function NAME fallback for function with two 87 dnl TYPE arguments and TYPE result can be implemented using 88 dnl __builtin_NAME expanded inline without needing unavailable math 89 dnl library function. 90 AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2], 91 [ 92 AC_REQUIRE([GCC_CHECK_LIBM]) 93 if test $gcc_cv_math_func_$1 = no; then 94 AC_CACHE_CHECK([for inline __builtin_$1], [gcc_cv_math_inline_builtin_$1], 95 [AC_LINK_IFELSE([AC_LANG_SOURCE([ 96 $2 97 $1_fallback ($2 x, $2 y) 98 { 99 return __builtin_$1 (x, y); 100 } 101 102 int 103 main () 104 { 105 return 0; 106 } 107 ])], 108 [gcc_cv_math_inline_builtin_$1=yes], 109 [gcc_cv_math_inline_builtin_$1=no])]) 110 if test $gcc_cv_math_inline_builtin_$1 = yes; then 111 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_INLINE_BUILTIN_$1),[1], 112 [Define to 1 if `__builtin_$1' is expanded inline.]) 113 fi 114 fi]) 115