X-Git-Url: https://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=m4%2Ffloorl.m4;h=62131353c28909509eb07a53137784318940c995;hb=da8054d48dc22e1c051db54049e005d51a006e69;hp=0a5ecb76a2c5bb9419181ec3b3ed4422238aae92;hpb=33f47a8259736ab62fb8f2a3b548e2c0f67ddd97;p=gnulib.git diff --git a/m4/floorl.m4 b/m4/floorl.m4 index 0a5ecb76a..62131353c 100644 --- a/m4/floorl.m4 +++ b/m4/floorl.m4 @@ -1,5 +1,5 @@ -# floorl.m4 serial 1 -dnl Copyright (C) 2007 Free Software Foundation, Inc. +# floorl.m4 serial 11 +dnl Copyright (C) 2007, 2009-2013 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. @@ -7,42 +7,67 @@ dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FLOORL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) + AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) + dnl Persuade glibc to declare floorl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + dnl Test whether floorl() is declared. - AC_CHECK_DECLS([floorl], , , [#include ]) + AC_CHECK_DECLS([floorl], , , [[#include ]]) if test "$ac_cv_have_decl_floorl" = yes; then dnl Test whether floorl() can be used without libm. - FLOORL_LIBM=? - AC_TRY_LINK([ - #ifndef __NO_MATH_INLINES - # define __NO_MATH_INLINES 1 /* for glibc */ - #endif - #include - long double x;], - [x = floorl(x);], - [FLOORL_LIBM=]) + gl_FUNC_FLOORL_LIBS if test "$FLOORL_LIBM" = "?"; then - save_LIBS="$LIBS" - LIBS="$LIBS -lm" - AC_TRY_LINK([ - #ifndef __NO_MATH_INLINES - # define __NO_MATH_INLINES 1 /* for glibc */ - #endif - #include - long double x;], - [x = floorl(x);], - [FLOORL_LIBM="-lm"]) - LIBS="$save_LIBS" - fi - if test "$FLOORL_LIBM" = "?"; then - FLOORL_LIBM= + dnl Sun C 5.0 on Solaris declares floorl() and has it in the system-wide + dnl libm.so, but not in the libm.so that the compiler uses. + REPLACE_FLOORL=1 fi else HAVE_DECL_FLOORL=0 - AC_LIBOBJ([floorl]) - FLOORL_LIBM= fi - AC_SUBST([HAVE_DECL_FLOORL]) + if test $HAVE_DECL_FLOORL = 0 || test $REPLACE_FLOORL = 1; then + dnl Find libraries needed to link lib/floorl.c. + if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then + AC_REQUIRE([gl_FUNC_FLOOR]) + FLOORL_LIBM="$FLOOR_LIBM" + else + FLOORL_LIBM= + fi + fi AC_SUBST([FLOORL_LIBM]) ]) + +# Determines the libraries needed to get the floorl() function. +# Sets FLOORL_LIBM. +AC_DEFUN([gl_FUNC_FLOORL_LIBS], +[ + gl_CACHE_VAL_SILENT([gl_cv_func_floorl_libm], [ + gl_cv_func_floorl_libm=? + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#ifndef __NO_MATH_INLINES + # define __NO_MATH_INLINES 1 /* for glibc */ + #endif + #include + long double (*funcptr) (long double) = floorl; + long double x;]], + [[x = funcptr (x) + floorl(x);]])], + [gl_cv_func_floorl_libm=]) + if test "$gl_cv_func_floorl_libm" = "?"; then + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#ifndef __NO_MATH_INLINES + # define __NO_MATH_INLINES 1 /* for glibc */ + #endif + #include + long double (*funcptr) (long double) = floorl; + long double x;]], + [[x = funcptr (x) + floorl(x);]])], + [gl_cv_func_floorl_libm="-lm"]) + LIBS="$save_LIBS" + fi + ]) + FLOORL_LIBM="$gl_cv_func_floorl_libm" +])