Fix tests for common <math.h> functions.
authorBruno Haible <bruno@clisp.org>
Mon, 25 Jan 2010 00:57:08 +0000 (01:57 +0100)
committerBruno Haible <bruno@clisp.org>
Mon, 25 Jan 2010 00:57:08 +0000 (01:57 +0100)
38 files changed:
ChangeLog
m4/mathfunc.m4
m4/sqrt.m4
modules/acos
modules/asin
modules/atan
modules/atan2
modules/cbrt
modules/copysign
modules/cos
modules/cosh
modules/erf
modules/erfc
modules/exp
modules/fabs
modules/fmod
modules/hypot
modules/j0
modules/j1
modules/jn
modules/ldexp
modules/lgamma
modules/log
modules/log10
modules/log1p
modules/logb
modules/modf
modules/nextafter
modules/pow
modules/remainder
modules/rint
modules/sin
modules/sinh
modules/tan
modules/tanh
modules/y0
modules/y1
modules/yn

index f2a0c7b..89e1a31 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,48 @@
 2010-01-24  Bruno Haible  <bruno@clisp.org>
 
+       Fix tests for common <math.h> functions.
+       * m4/mathfunc.m4 (gl_MATHFUNC): Take two additional parameters. Use a
+       code snippet that references the function pointer, rather than merely
+       calling the function. Substitute the FUNC_LIBM variable.
+       * m4/sqrt.m4 (gl_FUNC_SQRT): Update gl_MATHFUNC invocation.
+       * modules/acos (configure.ac): Likewise.
+       * modules/asin (configure.ac): Likewise.
+       * modules/atan (configure.ac): Likewise.
+       * modules/atan2 (configure.ac): Likewise.
+       * modules/cbrt (configure.ac): Likewise.
+       * modules/copysign (configure.ac): Likewise.
+       * modules/cos (configure.ac): Likewise.
+       * modules/cosh (configure.ac): Likewise.
+       * modules/erf (configure.ac): Likewise.
+       * modules/erfc (configure.ac): Likewise.
+       * modules/exp (configure.ac): Likewise.
+       * modules/fabs (configure.ac): Likewise.
+       * modules/fmod (configure.ac): Likewise.
+       * modules/hypot (configure.ac): Likewise.
+       * modules/j0 (configure.ac): Likewise.
+       * modules/j1 (configure.ac): Likewise.
+       * modules/jn (configure.ac): Likewise.
+       * modules/ldexp (configure.ac): Likewise.
+       * modules/lgamma (configure.ac): Likewise.
+       * modules/log (configure.ac): Likewise.
+       * modules/log10 (configure.ac): Likewise.
+       * modules/log1p (configure.ac): Likewise.
+       * modules/logb (configure.ac): Likewise.
+       * modules/modf (configure.ac): Likewise.
+       * modules/nextafter (configure.ac): Likewise.
+       * modules/pow (configure.ac): Likewise.
+       * modules/remainder (configure.ac): Likewise.
+       * modules/rint (configure.ac): Likewise.
+       * modules/sin (configure.ac): Likewise.
+       * modules/sinh (configure.ac): Likewise.
+       * modules/tan (configure.ac): Likewise.
+       * modules/tanh (configure.ac): Likewise.
+       * modules/y0 (configure.ac): Likewise.
+       * modules/y1 (configure.ac): Likewise.
+       * modules/yn (configure.ac): Likewise.
+
+2010-01-24  Bruno Haible  <bruno@clisp.org>
+
        Tests: Defeat inlining of math functions by GCC >= 4.3.0.
        * tests/test-acosl.c (x): New variable.
        (main): Store argument in x and fetch it from x.
index 8d9d826..5e79d45 100644 (file)
@@ -1,15 +1,21 @@
-# mathfunc.m4 serial 1
+# mathfunc.m4 serial 2
 dnl Copyright (C) 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
-# gl_MATHFUNC([sqrt])
-# tests whether the sqrt function is available in libc or libm. It sets
-# SQRT_LIBM to empty or "-lm" accordingly.
+# gl_MATHFUNC(FUNC, RETTYPE, PARAMTYPES)
+# --------------------------------------------------
+# tests whether the function FUNC is available in libc or libm.
+# RETTYPE is the return type. PARAMTYPES is a parameter list, with parentheses.
+# It sets FUNC_LIBM to empty or "-lm" accordingly.
 
 AC_DEFUN([gl_MATHFUNC],
 [
+  dnl We need the RETTYPE and PARAMTYPES in order to force linking with the
+  dnl function. With gcc >= 4.3 on glibc/x86_64, calls to the 'fabs' function
+  dnl are inlined by the compiler, therefore linking of these calls does not
+  dnl require -lm, but taking the function pointer of 'fabs' does.
   m4_pushdef([func], [$1])
   m4_pushdef([FUNC], [translit([$1],[abcdefghijklmnopqrstuvwxyz],
                                     [ABCDEFGHIJKLMNOPQRSTUVWXYZ])])
@@ -22,8 +28,8 @@ AC_DEFUN([gl_MATHFUNC],
                            # define __NO_MATH_INLINES 1 /* for glibc */
                            #endif
                            #include <math.h>
-                           double x;]],
-                         [[return ]func[ (x) > 2 || ]func[ (x) < 0.4;]])],
+                           $2 (*funcptr) $3 = ]func[;]],
+                         [[return 0;]])],
         [gl_cv_func_]func[_no_libm=yes],
         [gl_cv_func_]func[_no_libm=no])
     ])
@@ -38,8 +44,8 @@ AC_DEFUN([gl_MATHFUNC],
                              # define __NO_MATH_INLINES 1 /* for glibc */
                              #endif
                              #include <math.h>
-                             double x;]],
-                           [[return ]func[ (x) > 2 || ]func[ (x) < 0.4;]])],
+                             $2 (*funcptr) $3 = ]func[;]],
+                           [[return 0;]])],
           [gl_cv_func_]func[_in_libm=yes],
           [gl_cv_func_]func[_in_libm=no])
         LIBS="$save_LIBS"
@@ -48,6 +54,7 @@ AC_DEFUN([gl_MATHFUNC],
       FUNC[]_LIBM=-lm
     fi
   fi
+  AC_SUBST(FUNC[_LIBM])
   m4_popdef([FUNC])
   m4_popdef([func])
 ])
index 947389a..d87648c 100644 (file)
@@ -1,4 +1,4 @@
-# sqrt.m4 serial 1
+# sqrt.m4 serial 2
 dnl Copyright (C) 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -6,5 +6,5 @@ dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_FUNC_SQRT],
 [
-  gl_MATHFUNC([sqrt])
+  gl_MATHFUNC([sqrt], [double], [(double)])
 ])
index 472fd7b..8f03317 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([acos])
+gl_MATHFUNC([acos], [double], [(double)])
 
 Makefile.am:
 
index 1e42c07..5bbef73 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([asin])
+gl_MATHFUNC([asin], [double], [(double)])
 
 Makefile.am:
 
index 811d70e..fd1abe5 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([atan])
+gl_MATHFUNC([atan], [double], [(double)])
 
 Makefile.am:
 
index fc31267..22820a1 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([atan2])
+gl_MATHFUNC([atan2], [double], [(double, double)])
 
 Makefile.am:
 
index c88da57..bcfb293 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([cbrt])
+gl_MATHFUNC([cbrt], [double], [(double)])
 
 Makefile.am:
 
index 6c919ae..5318e80 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([copysign])
+gl_MATHFUNC([copysign], [double], [(double, double)])
 
 Makefile.am:
 
index 77a4aca..5ed327d 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([cos])
+gl_MATHFUNC([cos], [double], [(double)])
 
 Makefile.am:
 
index 4a9d71e..efaee3a 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([cosh])
+gl_MATHFUNC([cosh], [double], [(double)])
 
 Makefile.am:
 
index 8315997..02243bd 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([erf])
+gl_MATHFUNC([erf], [double], [(double)])
 
 Makefile.am:
 
index d2b8aed..5f93d80 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([erfc])
+gl_MATHFUNC([erfc], [double], [(double)])
 
 Makefile.am:
 
index 51bbce3..6a7a685 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([exp])
+gl_MATHFUNC([exp], [double], [(double)])
 
 Makefile.am:
 
index b621c3f..8b70430 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([fabs])
+gl_MATHFUNC([fabs], [double], [(double)])
 
 Makefile.am:
 
index 0862fe9..43997d8 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([fmod])
+gl_MATHFUNC([fmod], [double], [(double, double)])
 
 Makefile.am:
 
index 3a58d28..2c3f66f 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([hypot])
+gl_MATHFUNC([hypot], [double], [(double, double)])
 
 Makefile.am:
 
index 215180c..1dc9d44 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([j0])
+gl_MATHFUNC([j0], [double], [(double)])
 
 Makefile.am:
 
index b2480c5..d4e0b3c 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([j1])
+gl_MATHFUNC([j1], [double], [(double)])
 
 Makefile.am:
 
index 6eff0e3..ef8b418 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([jn])
+gl_MATHFUNC([jn], [double], [(int, double)])
 
 Makefile.am:
 
index eaa4a13..20818ed 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([ldexp])
+gl_MATHFUNC([ldexp], [double], [(double, int)])
 
 Makefile.am:
 
index 5a2d537..40cc49c 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([lgamma])
+gl_MATHFUNC([lgamma], [double], [(double)])
 
 Makefile.am:
 
index 5e7d833..9527969 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([log])
+gl_MATHFUNC([log], [double], [(double)])
 
 Makefile.am:
 
index d3d8bbf..bb857a2 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([log10])
+gl_MATHFUNC([log10], [double], [(double)])
 
 Makefile.am:
 
index 7c00614..6b387e2 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([log1p])
+gl_MATHFUNC([log1p], [double], [(double)])
 
 Makefile.am:
 
index 0388803..8816840 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([logb])
+gl_MATHFUNC([logb], [double], [(double)])
 
 Makefile.am:
 
index a075374..0c5e467 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([modf])
+gl_MATHFUNC([modf], [double], [(double, double *)])
 
 Makefile.am:
 
index 8b6d4a7..ed93418 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([nextafter])
+gl_MATHFUNC([nextafter], [double], [(double)])
 
 Makefile.am:
 
index 8eead48..dbcc10c 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([pow])
+gl_MATHFUNC([pow], [double], [(double, double)])
 
 Makefile.am:
 
index 2d35318..9d25419 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([remainder])
+gl_MATHFUNC([remainder], [double], [(double, double)])
 
 Makefile.am:
 
index 304bcf5..276c926 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([rint])
+gl_MATHFUNC([rint], [double], [(double)])
 
 Makefile.am:
 
index 0d8dc60..87ed8e6 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([sin])
+gl_MATHFUNC([sin], [double], [(double)])
 
 Makefile.am:
 
index d1c5c1f..ffcef67 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([sinh])
+gl_MATHFUNC([sinh], [double], [(double)])
 
 Makefile.am:
 
index 2b2ecee..6ec8a58 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([tan])
+gl_MATHFUNC([tan], [double], [(double)])
 
 Makefile.am:
 
index 3e5e309..c7f0789 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([tanh])
+gl_MATHFUNC([tanh], [double], [(double)])
 
 Makefile.am:
 
index bb1cfb6..de188af 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([y0])
+gl_MATHFUNC([y0], [double], [(double)])
 
 Makefile.am:
 
index 27dcdaa..dbe884d 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([y1])
+gl_MATHFUNC([y1], [double], [(double)])
 
 Makefile.am:
 
index eab9f58..63d05f6 100644 (file)
@@ -7,7 +7,7 @@ m4/mathfunc.m4
 Depends-on:
 
 configure.ac:
-gl_MATHFUNC([yn])
+gl_MATHFUNC([yn], [double], [(int, double)])
 
 Makefile.am: