Hello,
On 04/15/2014 01:34 PM, Pádraig Brady wrote:
On 04/15/2014 05:18 PM, Assaf Gordon wrote:
+ dnl On some systems (OpenBSD5.4) the system's native expl() is buggy:
+ dnl it returns 'nan' for small values. This test compares expl() to exp() .
You might assume that fabs is in the same lib as expl?
So this FABS_LIBM var is probably best left out,
as it's not guaranteed set here.
<...>
Is checking this whole range necessary?
<...>
s/in/ion/
<...>
You could just move the whole block earlier in the function to line 55,
so that the subsequent check of $gl_cv_func_expl_in_libm etc. is significant?
Attached is an improved version, changed according to your suggestions.
It now uses Gnulib's expl on OpenBSD5.4, and the native expl on other systems.
Regards,
-gordon
>From e5e007412f004532d3a6f4226b7aa69f9fc43410 Mon Sep 17 00:00:00 2001
From: "A. Gordon" <agor...@wi.mit.edu>
Date: Wed, 16 Apr 2014 11:35:55 -0400
Subject: [PATCH] m4: tests for buggy expl() implementations
On OpenBSD 5.4, expl() incorrectly returns 'nan' for
small values. Detect this and use Gnulib's expl if needed.
Discussed here:
http://marc.info/?t=139159081700002&r=1&w=2
(Message from David Coppa on 2014-02-05 to openbsd-tech mailing list).
Fixed here (in revision 1.2):
http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libm/src/ld128/s_floorl.c
---
m4/expl.m4 | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/m4/expl.m4 b/m4/expl.m4
index 247bc6e..1fa84cc 100644
--- a/m4/expl.m4
+++ b/m4/expl.m4
@@ -53,6 +53,35 @@ AC_DEFUN([gl_FUNC_EXPL],
EXPL_LIBM=-lm
fi
fi
+ dnl On OpenBSD5.4 the system's native expl() is buggy:
+ dnl it returns 'nan' for small values. Tests for this anomaly.
+ if test $gl_cv_func_expl_no_libm = yes \
+ || test $gl_cv_func_expl_in_libm = yes; then
+ AC_CACHE_CHECK([checks whether expl is buggy],
+ [gl_cv_func_expl_buggy],
+ [
+ save_LIBS="$LIBS"
+ LIBS="$EXPL_LIBM"
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <math.h>
+]], [[return isnan(expl(-1.0))||
+ isnan(expl(-0.8))||
+ isnan(expl(-0.4)); ]])],
+ [gl_cv_func_func_expl_buggy=no], [gl_cv_func_expl_buggy=yes],
+ [case $host_os in
+ mingw*) gl_cv_func_expl_buggy="guessing no";;
+ *) gl_cv_func_expl_buggy="guessing yes";;
+ esac])
+ LIBS="$save_LIBS"
+ ])
+ if test $gl_cv_func_expl_buggy = yes; then
+ dnl TODO: Use gnulib's expl instead of the system's expl
+ AC_MSG_NOTICE([Detected buggy expl(), using gnulib's implementation])
+ gl_cv_func_expl_in_libm=no
+ gl_cv_func_expl_no_libm=no
+ fi
+ fi
if test $gl_cv_func_expl_no_libm = yes \
|| test $gl_cv_func_expl_in_libm = yes; then
dnl Also check whether it's declared.
--
1.9.1