changeset 15922:e8d90530f5fd

copysignl: Simplify for platforms where 'long double' == 'double'. * lib/copysignl.c (copysignl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New alternative. * m4/copysignl.m4 (gl_FUNC_COPYSIGNL): Require gl_LONG_DOUBLE_VS_DOUBLE. Determine COPYSIGNL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE. * modules/copysignl (Depends-on): Add copysign. Update conditions.
author Bruno Haible <bruno@clisp.org>
date Mon, 10 Oct 2011 00:25:43 +0200
parents 1f40ef54f475
children efbcfece4421
files ChangeLog lib/copysignl.c m4/copysignl.m4 modules/copysignl
diffstat 4 files changed, 31 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2011-10-09  Bruno Haible  <bruno@clisp.org>
+
+	copysignl: Simplify for platforms where 'long double' == 'double'.
+	* lib/copysignl.c (copysignl) [HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]: New
+	alternative.
+	* m4/copysignl.m4 (gl_FUNC_COPYSIGNL): Require gl_LONG_DOUBLE_VS_DOUBLE.
+	Determine COPYSIGNL_LIBM according to HAVE_SAME_LONG_DOUBLE_AS_DOUBLE.
+	* modules/copysignl (Depends-on): Add copysign. Update conditions.
+
 2011-10-09  Bruno Haible  <bruno@clisp.org>
 
 	Tests for module 'rintl'.
--- a/lib/copysignl.c
+++ b/lib/copysignl.c
@@ -19,8 +19,20 @@
 /* Specification.  */
 #include <math.h>
 
+#if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+
+long double
+copysignl (long double x, long double y)
+{
+  return copysign (x, y);
+}
+
+#else
+
 long double
 copysignl (long double x, long double y)
 {
   return (signbit (x) != signbit (y) ? - x : x);
 }
+
+#endif
--- a/m4/copysignl.m4
+++ b/m4/copysignl.m4
@@ -1,4 +1,4 @@
-# copysignl.m4 serial 1
+# copysignl.m4 serial 2
 dnl Copyright (C) 2011 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -7,13 +7,19 @@
 AC_DEFUN([gl_FUNC_COPYSIGNL],
 [
   AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
 
   dnl Determine COPYSIGNL_LIBM.
   gl_MATHFUNC([copysignl], [long double], [(long double, long double)])
   if test $gl_cv_func_copysignl_no_libm = no \
      && test $gl_cv_func_copysignl_in_libm = no; then
     HAVE_COPYSIGNL=0
-    COPYSIGNL_LIBM=
+    if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then
+      AC_REQUIRE([gl_FUNC_COPYSIGN])
+      COPYSIGNL_LIBM="$COPYSIGN_LIBM"
+    else
+      COPYSIGNL_LIBM=
+    fi
   fi
   AC_SUBST([COPYSIGNL_LIBM])
 ])
--- a/modules/copysignl
+++ b/modules/copysignl
@@ -8,7 +8,8 @@
 
 Depends-on:
 math
-signbit         [test $HAVE_COPYSIGNL = 0]
+copysign        [test $HAVE_COPYSIGNL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1]
+signbit         [test $HAVE_COPYSIGNL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0]
 
 configure.ac:
 gl_FUNC_COPYSIGNL