summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2011-10-10 00:25:43 +0200
committerBruno Haible <bruno@clisp.org>2011-10-10 00:25:43 +0200
commit472322ae1a1ca95df1cc9b80031348e04fc5b6bc (patch)
tree098bb224e250fcdf0e09612f0705fcb683b41f22
parentf6fd929e6225babbe65d20332823e9d602bc3b1a (diff)
downloadgnulib-472322ae1a1ca95df1cc9b80031348e04fc5b6bc.tar.gz
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.
-rw-r--r--ChangeLog9
-rw-r--r--lib/copysignl.c12
-rw-r--r--m4/copysignl.m410
-rw-r--r--modules/copysignl3
4 files changed, 31 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index edecba6129..a8ea7df278 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
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'.
* modules/rintl-tests: New file.
* tests/test-rintl.c: New file.
diff --git a/lib/copysignl.c b/lib/copysignl.c
index 95947f464a..285b8042d5 100644
--- 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
diff --git a/m4/copysignl.m4 b/m4/copysignl.m4
index 4b5329fc43..80c7b18af4 100644
--- 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 @@ dnl with or without modifications, as long as this notice is preserved.
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])
])
diff --git a/modules/copysignl b/modules/copysignl
index 048a815a4c..f3d1fd3ef5 100644
--- a/modules/copysignl
+++ b/modules/copysignl
@@ -8,7 +8,8 @@ m4/mathfunc.m4
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