#
# This function determins if the the isinf function isavailable on this
# platform.
#
AC_DEFUN([AC_FUNC_ISINF],[
AC_SINGLE_CXX_CHECK([ac_cv_func_isinf_in_math_h],   
                    [isinf], [<math.h>],
                    [float f; isinf(f);])
if test "$ac_cv_func_isinf_in_math_h" = "yes" ; then 
  AC_DEFINE([HAVE_ISINF_IN_MATH_H],1,[Set to 1 if the isinf function is found in <math.h>])
fi

AC_SINGLE_CXX_CHECK([ac_cv_func_isinf_in_cmath],    
                    [isinf], [<cmath>],
                    [float f; isinf(f);])
if test "$ac_cv_func_isinf_in_cmath" = "yes" ; then
  AC_DEFINE([HAVE_ISINF_IN_CMATH],1,[Set to 1 if the isinf function is found in <cmath>])
fi

AC_SINGLE_CXX_CHECK([ac_cv_func_std_isinf_in_cmath],
                    [std::isinf], [<cmath>],
                    [float f; std::isinf(f)}])
if test "$ac_cv_func_std_isinf_in_cmath" = "yes" ; then 
  AC_DEFINE([HAVE_STD_ISINF_IN_CMATH],1,[Set to 1 if the std::isinf function is found in <cmath>])
fi

AC_SINGLE_CXX_CHECK([ac_cv_func_finite_in_ieeefp_h],
                    [finite], [<ieeefp.h>],
                    [float f; finite(f);])
if test "$ac_cv_func_finite_in_ieeefp_h" = "yes" ; then
  AC_DEFINE([HAVE_FINITE_IN_IEEEFP_H],1,[Set to 1 if the finite function is found in <ieeefp.h>])
fi

])


