diff --git a/libquadmath/ChangeLog b/libquadmath/ChangeLog index 6f731ca84ad..b97a45868b3 100644 --- a/libquadmath/ChangeLog +++ b/libquadmath/ChangeLog @@ -1,3 +1,13 @@ +2012-11-21 Tobias Burnus + + PR libquadmath/55225 + * math/lgammaq.c (lgammaq): Use local variable if + math.h does not provide signgam. + * acinclude.m4 (LIBQUAD_CHECK_MATH_H_SIGNGAM): New check. + * configure.ac: Use it. + * configure: Regenerate. + * config.h.in: Regenerate. + 2012-11-15 Tobias Burnus Joseph Myers diff --git a/libquadmath/acinclude.m4 b/libquadmath/acinclude.m4 index 38e0808ad93..ab73fb52e05 100644 --- a/libquadmath/acinclude.m4 +++ b/libquadmath/acinclude.m4 @@ -10,3 +10,20 @@ AC_DEFUN([AM_PROG_LIBTOOL]) AC_DEFUN([AC_LIBTOOL_DLOPEN]) AC_DEFUN([AC_PROG_LD]) ]) + +dnl Check whether POSIX's signgam is defined in math.h. +AC_DEFUN([LIBQUAD_CHECK_MATH_H_SIGNGAM], [ + AC_CACHE_CHECK([whether the math.h includes POSIX's signgam], + libgfor_cv_have_math_h_signgam, [ + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +void foo(void) { signgam = 1; }]], [])], + libgfor_cv_have_math_h_signgam=yes, + libgfor_cv_have_math_h_signgam=no) + CFLAGS="$save_CFLAGS"]) + if test $libgfor_cv_have_math_h_signgam = yes; then + AC_DEFINE(HAVE_MATH_H_SIGNGAM, 1, + [Define to 1 if the math.h includes POSIX's signgam.]) + fi]) diff --git a/libquadmath/config.h.in b/libquadmath/config.h.in index ea3f10c2786..9d18cc3ee35 100644 --- a/libquadmath/config.h.in +++ b/libquadmath/config.h.in @@ -45,6 +45,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H +/* Define to 1 if the math.h includes POSIX's signgam. */ +#undef HAVE_MATH_H_SIGNGAM + /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H diff --git a/libquadmath/configure b/libquadmath/configure index 16776719d01..0ea6e07455d 100755 --- a/libquadmath/configure +++ b/libquadmath/configure @@ -11947,6 +11947,43 @@ fi done + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the math.h includes POSIX's signgam" >&5 +$as_echo_n "checking whether the math.h includes POSIX's signgam... " >&6; } +if test "${libgfor_cv_have_math_h_signgam+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +void foo(void) { signgam = 1; } +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + libgfor_cv_have_math_h_signgam=yes +else + libgfor_cv_have_math_h_signgam=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgfor_cv_have_math_h_signgam" >&5 +$as_echo "$libgfor_cv_have_math_h_signgam" >&6; } + if test $libgfor_cv_have_math_h_signgam = yes; then + +$as_echo "#define HAVE_MATH_H_SIGNGAM 1" >>confdefs.h + + fi + # If available, sqrtl and cbrtl speed up the calculation - # but they are not required if test x$gcc_no_link != xyes; then diff --git a/libquadmath/configure.ac b/libquadmath/configure.ac index d3bfb040cd0..c547da8dc20 100644 --- a/libquadmath/configure.ac +++ b/libquadmath/configure.ac @@ -113,6 +113,7 @@ AC_SUBST(toolexecdir) AC_SUBST(toolexeclibdir) AC_CHECK_HEADERS(fenv.h langinfo.h locale.h wchar.h wctype.h limits.h ctype.h printf.h errno.h) +LIBQUAD_CHECK_MATH_H_SIGNGAM # If available, sqrtl and cbrtl speed up the calculation - # but they are not required diff --git a/libquadmath/math/lgammaq.c b/libquadmath/math/lgammaq.c index 485939af1b4..eef62dbc91f 100644 --- a/libquadmath/math/lgammaq.c +++ b/libquadmath/math/lgammaq.c @@ -69,7 +69,10 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "quadmath-imp.h" -#include /* For extern int signgam. */ + +#ifdef HAVE_MATH_H_SIGNGAM +#include /* For POSIX's extern int signgam. */ +#endif static const __float128 PIQ = 3.1415926535897932384626433832795028841972E0Q; static const __float128 MAXLGM = 1.0485738685148938358098967157129705071571E4928Q; @@ -759,6 +762,9 @@ lgammaq (__float128 x) { __float128 p, q, w, z, nx; int i, nn; +#ifndef HAVE_MATH_H_SIGNGAM + int signgam; +#endif signgam = 1;