[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
frexpl: avoid bug on IRIX
From: |
Bruno Haible |
Subject: |
frexpl: avoid bug on IRIX |
Date: |
Sun, 25 Mar 2007 23:36:06 +0200 |
User-agent: |
KMail/1.5.4 |
frexpl(Infinity) on IRIX 6.5 does not return Infinity, as it should according to
POSIX/MX. I'm adding a configure check against it:
2007-03-25 Bruno Haible <address@hidden>
* m4/frexpl.m4 (gl_FUNC_FREXPL_WORKS): New macro.
(gl_FUNC_FREXPL): Invoke it. Set REPLACE_FREXPL to 1 if it frexpl
exists but doesn't work.
* lib/math_.h (frexpl): Define as a replacement macro if REPLACE_FREXPL
is set. Don't provide a prototype if REPLACE_FREXPL is not set.
* m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_FREXPL.
* modules/math (Makefile.am) Substibute also REPLACE_FREXPL into math.h.
*** m4/frexpl.m4 23 Mar 2007 01:26:24 -0000 1.1
--- m4/frexpl.m4 25 Mar 2007 21:26:37 -0000
***************
*** 1,4 ****
! # frexpl.m4 serial 1
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # frexpl.m4 serial 2
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
***************
*** 36,41 ****
--- 36,53 ----
fi
if test $gl_cv_func_frexpl_no_libm = yes \
|| test $gl_cv_func_frexpl_in_libm = yes; then
+ save_LIBS="$LIBS"
+ LIBS="$LIBS $FREXPL_LIBM"
+ gl_FUNC_FREXPL_WORKS
+ LIBS="$save_LIBS"
+ case "$gl_cv_func_frexpl_works" in
+ *yes) gl_func_frexpl=yes ;;
+ *) gl_func_frexpl=no; REPLACE_FREXPL=1; FREXPL_LIBM= ;;
+ esac
+ else
+ gl_func_frexpl=no
+ fi
+ if test $gl_func_frexpl = yes; then
AC_DEFINE([HAVE_FREXPL], 1,
[Define if the frexpl() function is available.])
dnl Also check whether it's declared.
***************
*** 45,47 ****
--- 57,90 ----
AC_LIBOBJ([frexpl])
fi
])
+
+ dnl Test whether frexpl() works also on infinite numbers (this fails e.g. on
+ dnl IRIX 6.5).
+ AC_DEFUN([gl_FUNC_FREXPL_WORKS],
+ [
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether frexpl works], [gl_cv_func_frexpl_works],
+ [
+ AC_TRY_RUN([
+ #include <math.h>
+ int main()
+ {
+ volatile long double x;
+ /* Test on infinite numbers. */
+ {
+ x = 1.0L / 0.0L;
+ int exp;
+ long double y = frexpl (x, &exp);
+ if (y != x)
+ return 1;
+ }
+ return 0;
+ }], [gl_cv_func_frexpl_works=yes], [gl_cv_func_frexpl_works=no],
+ [case "$host_os" in
+ irix*) gl_cv_func_frexpl_works="guessing no";;
+ *) gl_cv_func_frexpl_works="guessing yes";;
+ esac
+ ])
+ ])
+ ])
*** m4/math_h.m4 23 Mar 2007 01:26:24 -0000 1.4
--- m4/math_h.m4 25 Mar 2007 21:26:37 -0000
***************
*** 39,42 ****
--- 39,43 ----
HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL])
HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL])
REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP])
+ REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL])
])
*** lib/math_.h 23 Mar 2007 03:06:51 -0000 1.6
--- lib/math_.h 25 Mar 2007 21:26:37 -0000
***************
*** 135,141 ****
If x is zero: mantissa = x, exp = 0.
If x is infinite or NaN: mantissa = x, exp unspecified.
Store exp and return mantissa. */
! #if @GNULIB_FREXPL@ || address@hidden@
extern long double frexpl (long double x, int *exp);
#endif
#if address@hidden@ && defined GNULIB_POSIXCHECK
--- 135,144 ----
If x is zero: mantissa = x, exp = 0.
If x is infinite or NaN: mantissa = x, exp unspecified.
Store exp and return mantissa. */
! #if @GNULIB_FREXPL@ && @REPLACE_FREXPL@
! # define frexpl rpl_frexpl
! #endif
! #if (@GNULIB_FREXPL@ && @REPLACE_FREXPL@) || address@hidden@
extern long double frexpl (long double x, int *exp);
#endif
#if address@hidden@ && defined GNULIB_POSIXCHECK
*** modules/math 23 Mar 2007 01:26:24 -0000 1.4
--- modules/math 25 Mar 2007 21:26:37 -0000
***************
*** 38,43 ****
--- 38,44 ----
-e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \
-e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \
-e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \
+ -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \
-e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
< $(srcdir)/math_.h; \
} > address@hidden
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- frexpl: avoid bug on IRIX,
Bruno Haible <=