Home | History | Annotate | Download | only in m4
      1 # isnand.m4 serial 11
      2 dnl Copyright (C) 2007-2012 Free Software Foundation, Inc.
      3 dnl This file is free software; the Free Software Foundation
      4 dnl gives unlimited permission to copy and/or distribute it,
      5 dnl with or without modifications, as long as this notice is preserved.
      6 
      7 dnl Check how to get or define isnand().
      8 
      9 AC_DEFUN([gl_FUNC_ISNAND],
     10 [
     11   AC_REQUIRE([gl_MATH_H_DEFAULTS])
     12   ISNAND_LIBM=
     13   gl_HAVE_ISNAND_NO_LIBM
     14   if test $gl_cv_func_isnand_no_libm = no; then
     15     gl_HAVE_ISNAND_IN_LIBM
     16     if test $gl_cv_func_isnand_in_libm = yes; then
     17       ISNAND_LIBM=-lm
     18     fi
     19   fi
     20   dnl The variable gl_func_isnand set here is used by isnan.m4.
     21   if test $gl_cv_func_isnand_no_libm = yes \
     22      || test $gl_cv_func_isnand_in_libm = yes; then
     23     gl_func_isnand=yes
     24   else
     25     gl_func_isnand=no
     26     HAVE_ISNAND=0
     27   fi
     28   AC_SUBST([ISNAND_LIBM])
     29 ])
     30 
     31 dnl Check how to get or define isnand() without linking with libm.
     32 
     33 AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM],
     34 [
     35   gl_HAVE_ISNAND_NO_LIBM
     36   gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm
     37   if test $gl_cv_func_isnand_no_libm = yes; then
     38     AC_DEFINE([HAVE_ISNAND_IN_LIBC], [1],
     39       [Define if the isnan(double) function is available in libc.])
     40   fi
     41 ])
     42 
     43 dnl Prerequisites of replacement isnand definition. It does not need -lm.
     44 AC_DEFUN([gl_PREREQ_ISNAND],
     45 [
     46   AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION])
     47 ])
     48 
     49 dnl Test whether isnand() can be used with libm.
     50 
     51 AC_DEFUN([gl_HAVE_ISNAND_IN_LIBM],
     52 [
     53   AC_CACHE_CHECK([whether isnan(double) can be used with libm],
     54     [gl_cv_func_isnand_in_libm],
     55     [
     56       save_LIBS="$LIBS"
     57       LIBS="$LIBS -lm"
     58       AC_LINK_IFELSE(
     59         [AC_LANG_PROGRAM(
     60            [[#include <math.h>
     61              #if __GNUC__ >= 4
     62              # undef isnand
     63              # define isnand(x) __builtin_isnan ((double)(x))
     64              #elif defined isnan
     65              # undef isnand
     66              # define isnand(x) isnan ((double)(x))
     67              #endif
     68              double x;]],
     69            [[return isnand (x);]])],
     70         [gl_cv_func_isnand_in_libm=yes],
     71         [gl_cv_func_isnand_in_libm=no])
     72       LIBS="$save_LIBS"
     73     ])
     74 ])
     75 
     76 AC_DEFUN([gl_HAVE_ISNAND_NO_LIBM],
     77 [
     78   AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm],
     79     [gl_cv_func_isnand_no_libm],
     80     [
     81       AC_LINK_IFELSE(
     82         [AC_LANG_PROGRAM(
     83            [[#include <math.h>
     84              #if __GNUC__ >= 4
     85              # undef isnand
     86              # define isnand(x) __builtin_isnan ((double)(x))
     87              #else
     88              # undef isnand
     89              # define isnand(x) isnan ((double)(x))
     90              #endif
     91              double x;]],
     92            [[return isnand (x);]])],
     93         [gl_cv_func_isnand_no_libm=yes],
     94         [gl_cv_func_isnand_no_libm=no])
     95     ])
     96 ])
     97