+
+dnl Check whether isfinite is broken.
+dnl The most common problem is that it does not work on long doubles.
+AC_DEFUN([LIBGFOR_CHECK_FOR_BROKEN_ISFINITE], [
+ AC_CACHE_CHECK([whether isfinite is broken],
+ have_broken_isfinite, [
+ libgfor_check_for_broken_isfinite_save_LIBS=$LIBS
+ LIBS="$LIBS -lm"
+ AC_TRY_RUN([
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+#include <float.h>
+int main ()
+{
+#ifdef isfinite
+#ifdef LDBL_MAX
+ if (!isfinite(LDBL_MAX)) return 1;
+#endif
+#ifdef DBL_MAX
+ if (!isfinite(DBL_MAX)) return 1;
+#endif
+#endif
+return 0;
+}], have_broken_isfinite=no, have_broken_isfinite=yes, [
+case "${target}" in
+ hppa*-*-hpux*) have_broken_isfinite=yes ;;
+ *) have_broken_isfinite=no ;;
+esac])]
+ LIBS=$libgfor_check_for_broken_isfinite_save_LIBS)
+if test x"$have_broken_isfinite" = xyes; then
+ AC_DEFINE(HAVE_BROKEN_ISFINITE, 1, [Define if isfinite is broken.])
+fi])
+
+dnl Check whether isnan is broken.
+dnl The most common problem is that it does not work on long doubles.
+AC_DEFUN([LIBGFOR_CHECK_FOR_BROKEN_ISNAN], [
+ AC_CACHE_CHECK([whether isnan is broken],
+ have_broken_isnan, [
+ libgfor_check_for_broken_isnan_save_LIBS=$LIBS
+ LIBS="$LIBS -lm"
+ AC_TRY_RUN([
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+#include <float.h>
+int main ()
+{
+#ifdef isnan
+#ifdef LDBL_MAX
+ {
+ long double x;
+ x = __builtin_nanl ("");
+ if (!isnan(x)) return 1;
+ if (isnan(LDBL_MAX)) return 1;
+#ifdef NAN
+ x = (long double) NAN;
+ if (!isnan(x)) return 1;
+#endif
+ }
+#endif
+#ifdef DBL_MAX
+ {
+ double y;
+ y = __builtin_nan ("");
+ if (!isnan(y)) return 1;
+ if (isnan(DBL_MAX)) return 1;
+#ifdef NAN
+ y = (double) NAN;
+ if (!isnan(y)) return 1;
+#endif
+ }
+#endif
+#endif
+return 0;
+}], have_broken_isnan=no, have_broken_isnan=yes, [
+case "${target}" in
+ hppa*-*-hpux*) have_broken_isnan=yes ;;
+ *) have_broken_isnan=no ;;
+esac])]
+ LIBS=$libgfor_check_for_broken_isnan_save_LIBS)
+if test x"$have_broken_isnan" = xyes; then
+ AC_DEFINE(HAVE_BROKEN_ISNAN, 1, [Define if isnan is broken.])
+fi])
+
+dnl Check whether fpclassify is broken.
+dnl The most common problem is that it does not work on long doubles.
+AC_DEFUN([LIBGFOR_CHECK_FOR_BROKEN_FPCLASSIFY], [
+ AC_CACHE_CHECK([whether fpclassify is broken],
+ have_broken_fpclassify, [
+ libgfor_check_for_broken_fpclassify_save_LIBS=$LIBS
+ LIBS="$LIBS -lm"
+ AC_TRY_RUN([
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+#include <float.h>
+int main ()
+{
+#ifdef fpclassify
+#ifdef LDBL_MAX
+ if (fpclassify(LDBL_MAX) == FP_NAN
+ || fpclassify(LDBL_MAX) == FP_INFINITE) return 1;
+#endif
+#ifdef DBL_MAX
+ if (fpclassify(DBL_MAX) == FP_NAN
+ || fpclassify(DBL_MAX) == FP_INFINITE) return 1;
+#endif
+#endif
+return 0;
+}], have_broken_fpclassify=no, have_broken_fpclassify=yes, [
+case "${target}" in
+ hppa*-*-hpux*) have_broken_fpclassify=yes ;;
+ *) have_broken_fpclassify=no ;;
+esac])]
+ LIBS=$libgfor_check_for_broken_fpclassify_save_LIBS)
+if test x"$have_broken_fpclassify" = xyes; then
+ AC_DEFINE(HAVE_BROKEN_FPCLASSIFY, 1, [Define if fpclassify is broken.])
+fi])
+
+dnl Check whether the st_ino and st_dev stat fields taken together uniquely
+dnl identify the file within the system. This is should be true for POSIX
+dnl systems; it is known to be false on mingw32.
+AC_DEFUN([LIBGFOR_CHECK_WORKING_STAT], [
+ AC_CACHE_CHECK([whether the target stat is reliable],
+ have_working_stat, [
+ AC_TRY_RUN([
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+int main ()
+{
+ FILE *f, *g;
+ struct stat st1, st2;
+
+ f = fopen ("foo", "w");
+ g = fopen ("bar", "w");
+ if (stat ("foo", &st1) != 0 || stat ("bar", &st2))
+ return 1;
+ if (st1.st_dev == st2.st_dev && st1.st_ino == st2.st_ino)
+ return 1;
+ fclose(f);
+ fclose(g);
+ return 0;
+}], have_working_stat=yes, have_working_stat=no, [
+case "${target}" in
+ *mingw*) have_working_stat=no ;;
+ *) have_working_stat=yes;;
+esac])])
+if test x"$have_working_stat" = xyes; then
+ AC_DEFINE(HAVE_WORKING_STAT, 1, [Define if target has a reliable stat.])
+fi])
+
+dnl Checks for fpsetmask function.
+AC_DEFUN([LIBGFOR_CHECK_FPSETMASK], [
+ AC_CACHE_CHECK([whether fpsetmask is present], have_fpsetmask, [
+ AC_TRY_LINK([
+#if HAVE_FLOATINGPOINT_H
+# include <floatingpoint.h>
+#endif /* HAVE_FLOATINGPOINT_H */
+#if HAVE_IEEEFP_H
+# include <ieeefp.h>
+#endif /* HAVE_IEEEFP_H */],[fpsetmask(0);],
+ eval "have_fpsetmask=yes", eval "have_fpsetmask=no")
+ ])
+ if test x"$have_fpsetmask" = xyes; then
+ AC_DEFINE(HAVE_FPSETMASK, 1, [Define if you have fpsetmask.])
+ fi
+])