logf: Work around OSF/1 5.1 bug.
[gnulib.git] / m4 / logf.m4
1 # logf.m4 serial 3
2 dnl Copyright (C) 2011-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 AC_DEFUN([gl_FUNC_LOGF],
8 [
9   AC_REQUIRE([gl_MATH_H_DEFAULTS])
10   AC_REQUIRE([gl_FUNC_LOG])
11
12   dnl Persuade glibc <math.h> to declare logf().
13   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
14
15   dnl Test whether logf() exists. Assume that logf(), if it exists, is
16   dnl defined in the same library as log().
17   save_LIBS="$LIBS"
18   LIBS="$LIBS $LOG_LIBM"
19   AC_CHECK_FUNCS([logf])
20   LIBS="$save_LIBS"
21   if test $ac_cv_func_logf = yes; then
22     LOGF_LIBM="$LOG_LIBM"
23     save_LIBS="$LIBS"
24     LIBS="$LIBS $LOGF_LIBM"
25     gl_FUNC_LOGF_WORKS
26     LIBS="$save_LIBS"
27     case "$gl_cv_func_logf_works" in
28       *yes) ;;
29       *) REPLACE_LOGF=1 ;;
30     esac
31   else
32     HAVE_LOGF=0
33   fi
34   if test $HAVE_LOGF = 0 || test $REPLACE_LOGF = 1; then
35     dnl Find libraries needed to link lib/logf.c.
36     if test $HAVE_LOGF = 0; then
37       LOGF_LIBM="$LOG_LIBM"
38     fi
39   fi
40   AC_SUBST([LOGF_LIBM])
41 ])
42
43 dnl Test whether logf() works.
44 dnl On OSF/1 5.1, logf(-0.0f) is NaN.
45 AC_DEFUN([gl_FUNC_LOGF_WORKS],
46 [
47   AC_REQUIRE([AC_PROG_CC])
48   AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
49   AC_CACHE_CHECK([whether logf works], [gl_cv_func_logf_works],
50     [
51       AC_RUN_IFELSE(
52         [AC_LANG_SOURCE([[
53 #include <math.h>
54 volatile float x;
55 float y;
56 int main ()
57 {
58   x = -0.0f;
59   y = logf (x);
60   if (!(y + y == y))
61     return 1;
62   return 0;
63 }
64 ]])],
65         [gl_cv_func_logf_works=yes],
66         [gl_cv_func_logf_works=no],
67         [case "$host_os" in
68            osf*) gl_cv_func_logf_works="guessing no";;
69            *)    gl_cv_func_logf_works="guessing yes";;
70          esac
71         ])
72     ])
73 ])