diff m4/remainderf.m4 @ 16413:3a9564d7a3a5

New module 'remainderf'. * lib/math.in.h (remainderf): New declaration. * lib/remainderf.c: New file. * m4/remainderf.m4: New file. * modules/remainderf: New file. * m4/math_h.m4 (gl_MATH_H): Test whether remainderf is declared. (gl_MATH_H_DEFAULTS): Initialize GNULIB_REMAINDERF, HAVE_REMAINDERF. * modules/math (Makefile.am): Substitute GNULIB_REMAINDERF, HAVE_REMAINDERF. * doc/posix-functions/remainderf.texi: Mention the new module.
author Bruno Haible <bruno@clisp.org>
date Sat, 25 Feb 2012 19:41:33 +0100
parents
children e04c5a489c44
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/m4/remainderf.m4
@@ -0,0 +1,61 @@
+# remainderf.m4 serial 1
+dnl Copyright (C) 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,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_REMAINDERF],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_FUNC_REMAINDER])
+
+  dnl Test whether remainderf() exists. Assume that remainderf(), if it exists, is
+  dnl defined in the same library as remainder().
+  save_LIBS="$LIBS"
+  LIBS="$LIBS $REMAINDER_LIBM"
+  AC_CACHE_CHECK([for remainderf],
+    [gl_cv_func_remainderf],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#ifndef __NO_MATH_INLINES
+             # define __NO_MATH_INLINES 1 /* for glibc */
+             #endif
+             #include <math.h>
+             float (*funcptr) (float, float) = remainderf;
+             float x;
+             float y;]],
+           [[return funcptr (x, y) > 1
+                    || remainderf (x, y) > 1;]])],
+        [gl_cv_func_remainderf=yes],
+        [gl_cv_func_remainderf=no])
+    ])
+  LIBS="$save_LIBS"
+  if test $gl_cv_func_remainderf = yes; then
+    REMAINDERF_LIBM="$REMAINDER_LIBM"
+  else
+    HAVE_REMAINDERF=0
+    dnl Find libraries needed to link lib/remainderf.c.
+    if test $gl_cv_func_remainder_no_libm = yes \
+       || test $gl_cv_func_remainder_in_libm = yes; then
+      AC_DEFINE([HAVE_REMAINDER], [1],
+        [Define to 1 if the remainder() function is available in libc or libm.])
+      REMAINDERF_LIBM="$REMAINDER_LIBM"
+    else
+      AC_REQUIRE([gl_FUNC_ROUNDF])
+      AC_REQUIRE([gl_FUNC_FMAF])
+      REMAINDERF_LIBM=
+      dnl Append $ROUNDF_LIBM to REMAINDERF_LIBM, avoiding gratuitous duplicates.
+      case " $REMAINDERF_LIBM " in
+        *" $ROUNDF_LIBM "*) ;;
+        *) REMAINDERF_LIBM="$REMAINDERF_LIBM $ROUNDF_LIBM" ;;
+      esac
+      dnl Append $FMAF_LIBM to REMAINDERF_LIBM, avoiding gratuitous duplicates.
+      case " $REMAINDERF_LIBM " in
+        *" $FMAF_LIBM "*) ;;
+        *) REMAINDERF_LIBM="$REMAINDERF_LIBM $FMAF_LIBM" ;;
+      esac
+    fi
+  fi
+  AC_SUBST([REMAINDERF_LIBM])
+])