long double and GLIBCPP_CHECK_MATH_SUPPORT

David Edelsohn dje@watson.ibm.com
Wed Oct 25 19:18:00 GMT 2000


	I discovered that strtold() test and use should be included in the
_GLIBCPP_USE_LONG_DOUBLE wrapper as well.  Below is the revised patch
(with the block of code in the wrong location for ease of comparison) for
acinclude.m4 and an additional patch for include/bits/locale_facets.tcc

	In locale_facets.tcc I chose to expand the existing test wrapping
the strtold() call as opposed to wrapping the long double versions
do_get() and do_put() completely.  I do not know which is preferred or
what the standard requires.

David

Index: acinclude.m4
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/acinclude.m4,v
retrieving revision 1.71
diff -c -p -r1.71 acinclude.m4
*** acinclude.m4	2000/10/25 12:50:04	1.71
--- acinclude.m4	2000/10/26 02:08:36
*************** AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_SUPP
*** 457,479 ****
    dnl Test for builtin math functions.
    dnl These are made in gcc/c-common.c 
    GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_abs)
-   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsf)
-   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabs)
-   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsl)
-   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_labs)
  
    GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtf)
-   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fsqrt)
-   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtl)
- 
    GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinf)
-   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sin)
-   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinl)
- 
    GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosf)
    GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cos)
-   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosl)
  
    dnl There is, without a doubt, a more elegant way to have these
    dnl names exported so that they won't be stripped out of acconfig.h by
    dnl autoheader. I leave this as an exercise to somebody less frustrated
--- 457,482 ----
    dnl Test for builtin math functions.
    dnl These are made in gcc/c-common.c 
    GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_abs)
  
+   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsf)
    GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtf)
    GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinf)
    GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosf)
+ 
+   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabs)
+   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fsqrt)
+   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sin)
    GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cos)
  
+   if test x"$enable_long_double" = x"yes"; then
+     GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_fabsl)
+     GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sqrtl)
+     GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_sinl)
+     GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_cosl)
+   fi
+ 
+   GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1(__builtin_labs)
+ 
    dnl There is, without a doubt, a more elegant way to have these
    dnl names exported so that they won't be stripped out of acconfig.h by
    dnl autoheader. I leave this as an exercise to somebody less frustrated
*************** AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
*** 520,528 ****
    ac_save_LIBS="$LIBS"
    LIBS="$LIBS $libm"
  
-   dnl Although not math functions, needed and for some reason checked here.
-   AC_CHECK_FUNCS(strtof strtold)
- 
    dnl Check to see if certain C math functions exist.
    GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinf)
    GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnan)
--- 523,528 ----
*************** AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
*** 559,594 ****
    GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanhf)
    GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
    GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
  
!   dnl Check to see if basic C math functions have long double versions.
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysignl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(acosl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(asinl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(atanl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(ceill)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(cosl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(coshl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(floorl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinhl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanhl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
  
    dnl Some runtimes have these functions with a preceding underscore. Please
    dnl keep this sync'd with the one above. And if you add any new symbol,
    dnl please add the corresponding block in the @BOTTOM@ section of acconfig.h.
--- 559,602 ----
    GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanhf)
    GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosf)
    GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitef)
+ 
+   dnl Although not math function, needed and for some reason checked here.
+   AC_CHECK_FUNCS(strtof)
  
!   if test x"$enable_long_double" = x"yes"; then
!     dnl Check to see if basic C math functions have long double versions.
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinfl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysignl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(acosl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(asinl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(atanl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2l)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(ceill)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(cosl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(coshl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(floorl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10l)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modfl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinhl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanhl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincosl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finitel)
  
+     dnl Although not math functions, needed and for some reason checked here.
+     AC_CHECK_FUNCS(strtold)
+   fi
+ 
    dnl Some runtimes have these functions with a preceding underscore. Please
    dnl keep this sync'd with the one above. And if you add any new symbol,
    dnl please add the corresponding block in the @BOTTOM@ section of acconfig.h.
*************** AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
*** 629,662 ****
    GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincosf)
    GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finitef)
  
!   dnl Check to see if basic C math functions have long double versions.
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isnanl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isinfl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_copysignl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_acosl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_asinl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_atanl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_atan2l)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_ceill)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_cosl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_coshl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_expl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_fabsl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_floorl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_fmodl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_frexpl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_ldexpl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_logl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_log10l)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_modfl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_powl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinhl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sqrtl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanhl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincosl)
!   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finitel)
  
    LIBS="$ac_save_LIBS"
    CXXFLAGS="$ac_save_CXXFLAGS"
--- 637,672 ----
    GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincosf)
    GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finitef)
  
!   if test x"$enable_long_double" = x"yes"; then
!     dnl Check to see if basic C math functions have long double versions.
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isnanl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isinfl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_copysignl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_acosl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_asinl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_atanl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_atan2l)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_ceill)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_cosl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_coshl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_expl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_fabsl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_floorl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_fmodl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_frexpl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_ldexpl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_logl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_log10l)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_modfl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_powl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinhl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sqrtl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanhl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincosl)
!     GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finitel)
!   fi
  
    LIBS="$ac_save_LIBS"
    CXXFLAGS="$ac_save_CXXFLAGS"
*************** AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_SUPP
*** 683,689 ****
    dnl Currently this includes copysignl and atan2l, which should be
    dnl cached from the GLIBCPP_CHECK_MATH_SUPPORT macro, above.
    USE_COMPLEX_LONG_DOUBLE=no
!   if test x$ac_cv_func_atan2l = x"yes" \
       && test x$ac_cv_func_copysignl = x"yes"; then
      USE_COMPLEX_LONG_DOUBLE=yes
      AC_REPLACE_MATHFUNCS(ccoshl ccosl cexpl cpowl csinhl csinl \
--- 693,700 ----
    dnl Currently this includes copysignl and atan2l, which should be
    dnl cached from the GLIBCPP_CHECK_MATH_SUPPORT macro, above.
    USE_COMPLEX_LONG_DOUBLE=no
!   if test x"$enable_long_double" = x"yes" \
!      && test x$ac_cv_func_atan2l = x"yes" \
       && test x$ac_cv_func_copysignl = x"yes"; then
      USE_COMPLEX_LONG_DOUBLE=yes
      AC_REPLACE_MATHFUNCS(ccoshl ccosl cexpl cpowl csinhl csinl \
Index: include/bits/locale_facets.tcc
===================================================================
RCS file: /cvs/gcc/egcs/libstdc++-v3/include/bits/locale_facets.tcc,v
retrieving revision 1.3
diff -c -p -r1.3 locale_facets.tcc
*** locale_facets.tcc	2000/10/25 16:54:47	1.3
--- locale_facets.tcc	2000/10/26 02:08:38
*************** namespace std
*** 630,636 ****
        return __beg;
      }
  
! #if defined(_GLIBCPP_HAVE_STRTOLD) && !defined(__hpux)
    template<typename _CharT, typename _InIter>
      _InIter
      num_get<_CharT, _InIter>::
--- 630,636 ----
        return __beg;
      }
  
! #if defined (_GLIBCPP_USE_LONG_DOUBLE) && defined(_GLIBCPP_HAVE_STRTOLD) && !defined(__hpux)
    template<typename _CharT, typename _InIter>
      _InIter
      num_get<_CharT, _InIter>::



More information about the Libstdc++ mailing list