roundl: Don't override undeclared system function on IRIX 6.5.
authorBruno Haible <bruno@clisp.org>
Thu, 8 Mar 2012 01:06:10 +0000 (02:06 +0100)
committerBruno Haible <bruno@clisp.org>
Thu, 8 Mar 2012 01:06:10 +0000 (02:06 +0100)
* m4/roundl.m4 (gl_FUNC_ROUNDL): Search for roundl() in the libraries
also when it is not declared. Set HAVE_ROUNDL. For replacement code,
test HAVE_ROUNDL, not HAVE_DECL_ROUNDL.
* modules/roundl (configure.ac): For replacement code, test
HAVE_ROUNDL, not HAVE_DECL_ROUNDL.
(Depends-on): Update conditions.
* doc/posix-functions/roundl.texi: Mention the IRIX problem.

ChangeLog
doc/posix-functions/roundl.texi
m4/roundl.m4
modules/roundl

index 86a0615..0a4daf2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
 2012-03-07  Bruno Haible  <bruno@clisp.org>
 
+       roundl: Don't override undeclared system function on IRIX 6.5.
+       * m4/roundl.m4 (gl_FUNC_ROUNDL): Search for roundl() in the libraries
+       also when it is not declared. Set HAVE_ROUNDL. For replacement code,
+       test HAVE_ROUNDL, not HAVE_DECL_ROUNDL.
+       * modules/roundl (configure.ac): For replacement code, test
+       HAVE_ROUNDL, not HAVE_DECL_ROUNDL.
+       (Depends-on): Update conditions.
+       * doc/posix-functions/roundl.texi: Mention the IRIX problem.
+
+2012-03-07  Bruno Haible  <bruno@clisp.org>
+
        roundf: Don't override undeclared system function on IRIX 6.5.
        * m4/roundf.m4 (gl_FUNC_ROUNDF): Search for roundf() in the libraries
        also when it is not declared. Set HAVE_ROUNDF. For replacement code,
index 9ce84d0..f420c47 100644 (file)
@@ -10,10 +10,10 @@ Portability problems fixed by either Gnulib module @code{roundl} or @code{roundl
 @itemize
 @item
 This function is missing on some platforms:
-FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS.
+FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, older IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS.
 @item
 This function is not declared on some platforms:
-glibc 2.8, OSF/1 5.1.
+glibc 2.8, IRIX 6.5, OSF/1 5.1.
 @end itemize
 
 Portability problems fixed by Gnulib module @code{roundl-ieee}:
index eca8f23..a48f878 100644 (file)
@@ -1,4 +1,4 @@
-# roundl.m4 serial 13
+# roundl.m4 serial 14
 dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -13,12 +13,19 @@ AC_DEFUN([gl_FUNC_ROUNDL],
   dnl Persuade glibc <math.h> to declare roundl().
   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
 
-  AC_CHECK_DECLS([roundl], , , [[#include <math.h>]])
-  if test "$ac_cv_have_decl_roundl" = yes; then
-    gl_CHECK_MATH_LIB([ROUNDL_LIBM], [x = roundl (x);])
-    if test "$ROUNDL_LIBM" = missing; then
-      REPLACE_ROUNDL=1
-    fi
+  gl_CHECK_MATH_LIB([ROUNDL_LIBM], [x = roundl (x);],
+    [extern
+     #ifdef __cplusplus
+     "C"
+     #endif
+     long double roundl (long double);
+    ])
+  if test "$ROUNDL_LIBM" != missing; then
+    HAVE_ROUNDL=1
+    dnl Also check whether it's declared.
+    dnl IRIX 6.5 has roundl() in libm but doesn't declare it in <math.h>.
+    AC_CHECK_DECLS([roundl], , [HAVE_DECL_ROUNDL=0], [[#include <math.h>]])
+
     m4_ifdef([gl_FUNC_ROUNDL_IEEE], [
       if test $gl_roundl_required = ieee && test $REPLACE_ROUNDL = 0; then
         AC_CACHE_CHECK([whether roundl works according to ISO C 99 with IEC 60559],
@@ -32,6 +39,11 @@ AC_DEFUN([gl_FUNC_ROUNDL],
 # define __NO_MATH_INLINES 1 /* for glibc */
 #endif
 #include <math.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+long double roundl (long double);
 ]gl_LONG_DOUBLE_MINUS_ZERO_CODE[
 ]gl_LONG_DOUBLE_SIGNBIT_CODE[
 static long double dummy (long double f) { return 0; }
@@ -60,9 +72,10 @@ int main (int argc, char *argv[])
       fi
     ])
   else
+    HAVE_ROUNDL=0
     HAVE_DECL_ROUNDL=0
   fi
-  if test $HAVE_DECL_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; then
+  if test $HAVE_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; then
     dnl Find libraries needed to link lib/roundl.c.
     if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then
       AC_REQUIRE([gl_FUNC_ROUND])
index 3b5c962..22486ab 100644 (file)
@@ -12,12 +12,12 @@ m4/ceill.m4
 Depends-on:
 math
 extensions
-round           [{ test $HAVE_DECL_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1]
-float           [{ test $HAVE_DECL_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0]
+round           [{ test $HAVE_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1]
+float           [{ test $HAVE_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0]
 
 configure.ac:
 gl_FUNC_ROUNDL
-if test $HAVE_DECL_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; then
+if test $HAVE_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; then
   AC_LIBOBJ([roundl])
 fi
 gl_MATH_MODULE_INDICATOR([roundl])