OSDN Git Service

use platform specific types in gnu_type_fix
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / acinclude.m4
index 9030b7f..7f76119 100644 (file)
@@ -155,19 +155,35 @@ AC_SUBST(GLIBCPP_CXXFLAGS)
 
 dnl
 dnl Check to see if g++ can compile this library, and if so, if any version-
-dnl specific precautions need to be taken. In particular, test for
-dnl newer compiler features, or features that are present in newer
+dnl specific precautions need to be taken. 
+dnl 
+dnl GLIBCPP_CHECK_COMPILER_VERSION
+AC_DEFUN(GLIBCPP_CHECK_COMPILER_VERSION, [
+  # Sanity check that g++ is capable of dealing with v-3.
+  AC_MSG_CHECKING([for g++ that will successfully compile this code])
+  AC_EGREP_CPP([ok], [
+  #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) 
+    ok
+  #endif
+  ], gpp_satisfactory=yes, AC_MSG_ERROR("please upgrade to gcc-2.95 or above"))
+  AC_MSG_RESULT($gpp_satisfactory)
+])
+
+
+dnl
+dnl Test for newer compiler features, or features that are present in newer
 dnl compiler version but not older compiler versions should be placed
 dnl here.
 dnl
-dnl Define FMTFLAGS='-fdiagnostics-show-location=once' if possible
+dnl Define WFMT_FLAGS='-fdiagnostics-show-location=once' if possible
+dnl 
 dnl Define WERROR='-Werror' if possible; g++'s that lack the new inlining
-dnl    code or the new system_header pragma will die.  Other options dealing
-dnl    with warnings, errors, and compiler complaints may be folded into
-dnl    the WERROR variable.
+dnl code or the new system_header pragma will die.  
 dnl
-dnl GLIBCPP_CHECK_COMPILER_VERSION
-AC_DEFUN(GLIBCPP_CHECK_COMPILER_VERSION, [
+dnl Define SECTION_FLAGS='-ffunction-sections -fdata-sections' if
+dnl compiler supports it.  
+dnl GLIBCPP_CHECK_COMPILER_FEATURES
+AC_DEFUN(GLIBCPP_CHECK_COMPILER_FEATURES, [
   # All these tests are for C++; save the language and the compiler flags.
   # The CXXFLAGS thing is suspicious, but based on similar bits 
   # found in GLIBCPP_CONFIGURE.
@@ -177,15 +193,6 @@ AC_DEFUN(GLIBCPP_CHECK_COMPILER_VERSION, [
   ac_save_CXXFLAGS="$CXXFLAGS"
   WERROR='-Werror'
 
-  # Sanity check that g++ is capable of dealing with v-3.
-  AC_MSG_CHECKING([for g++ that will successfully compile this code])
-  AC_EGREP_CPP([ok], [
-  #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) 
-    ok
-  #endif
-  ], gpp_satisfactory=yes, AC_MSG_ERROR("please upgrade to gcc-2.95 or above"))
-  AC_MSG_RESULT($gpp_satisfactory)
-
   # Check for pragma system_header.
   AC_MSG_CHECKING([for g++ that supports pragma system_header])
   CXXFLAGS='-Wunknown-pragmas -Werror'
@@ -214,62 +221,446 @@ AC_DEFUN(GLIBCPP_CHECK_COMPILER_VERSION, [
     CXXFLAGS=''
   fi
   if test "$ac_gabydiags" = "yes"; then
-    FMTFLAGS='-fdiagnostics-show-location=once'
+    WFMT_FLAGS='-fdiagnostics-show-location=once'
   fi
   AC_MSG_RESULT($ac_gabydiags)
 
+  # Check for -ffunction-sections -fdata-sections
+  AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
+  CXXFLAGS='-ffunction-sections -fdata-sections'
+  AC_TRY_COMPILE(, [int foo;
+  ], [ac_fdsections=yes], [ac_fdsections=no])
+  if test "$ac_test_CXXFLAGS" = set; then
+    CXXFLAGS="$ac_save_CXXFLAGS"
+  else
+    # this is the suspicious part
+    CXXFLAGS=''
+  fi
+  if test "$ac_fdsections" = "yes"; then
+    SECTION_FLAGS='-ffunction-sections -fdata-sections'
+  fi
+  AC_MSG_RESULT($ac_fdsections)
+
   AC_LANG_RESTORE
   AC_SUBST(WERROR)
-  AC_SUBST(FMTFLAGS)
+  AC_SUBST(WFMT_FLAGS)
+  AC_SUBST(SECTION_FLAGS)
 ])
 
 
 dnl
-dnl Check to see what builtin math functions are supported
+dnl Check to see if tricky linker opts can be used.
+dnl
+dnl Define SECTION_LDFLAGS='-Wl,--gc-sections' if possible
+dnl GLIBCPP_CHECK_LINKER_FEATURES
+AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
+  # All these tests are for C++; save the language and the compiler flags.
+  # Need to do this so that g++ won't try to link in libstdc++
+  ac_test_CFLAGS="${CFLAGS+set}"
+  ac_save_CFLAGS="$CFLAGS"
+  CFLAGS='-x c++  -Wl,--gc-sections'
+
+  # Check for -Wl,--gc-sections
+  AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
+  AC_TRY_RUN([
+   int main(void) 
+   {
+     try { throw 1; }
+     catch (...) { };
+     return 0;
+   }
+  ], [ac_sectionLDflags=yes], [ac_sectionLFflags=no], [ac_sectionLDflags=yes])
+  if test "$ac_test_CFLAGS" = set; then
+    CFLAGS="$ac_save_CFLAGS"
+  else
+    # this is the suspicious part
+    CFLAGS=''
+  fi
+  if test "$ac_sectionLDflags" = "yes"; then
+    SECTION_LDFLAGS='-Wl,--gc-sections'
+  fi
+  AC_MSG_RESULT($ac_sectionLDflags)
+
+  AC_SUBST(SECTION_LDFLAGS)
+])
+
+
 dnl
-dnl Define _GLIBCPP_HAS_BUILTIN_SINF if __builtin_sinf
-dnl Define _GLIBCPP_HAS_BUILTIN_COSF if __builtin_cosf
-dnl Define _GLIBCPP_HAS_BUILTIN_FABSF if __builtin_fabsf
-dnl Define _GLIBCPP_HAS_BUILTIN_SQRTF if __builtin_sqrtf
+dnl Check to see if the (math function) argument passed is
+dnl 1) declared when using the c++ compiler
+dnl 2) has "C" linkage
 dnl
-dnl GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT
-AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT, [
-  dnl Test for builtin math functions.
-  AC_MSG_CHECKING([for __builtin_sinf])
+dnl Define HAVE_CARGF etc if "cargf" is declared and links
+dnl
+dnl argument 1 is name of function to check
+dnl
+dnl ASSUMES argument is a math function with ONE parameter
+dnl
+dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1
+AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1, [
+  AC_LANG_SAVE
+  AC_LANG_CPLUSPLUS
+  AC_MSG_CHECKING([for $1 declaration])
   AC_TRY_COMPILE([#include <math.h>], 
-  [float foo(void) { __builtin_sinf(0.0); }], 
-  use_builtin_sinf=yes, use_builtin_sinf=no)
-  AC_MSG_RESULT($use_builtin_sinf)
-  if test $use_builtin_sinf = "yes"; then
-    AC_DEFINE(_GLIBCPP_HAS_BUILTIN_SINF)
+  [ $1(0);], 
+  [use_$1=yes], [use_$1=no])
+  AC_MSG_RESULT($use_$1)
+  AC_LANG_RESTORE
+  if test x$use_$1 = x"yes"; then
+    AC_CHECK_FUNCS($1)    
   fi
+])
+
 
-  AC_MSG_CHECKING([for __builtin_cosf])
+dnl
+dnl Check to see if the (math function) argument passed is
+dnl 1) declared when using the c++ compiler
+dnl 2) has "C" linkage
+dnl
+dnl Define HAVE_CARGF etc if "cargf" is declared and links
+dnl
+dnl argument 1 is name of function to check
+dnl
+dnl ASSUMES argument is a math function with TWO parameters
+dnl
+dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2
+AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2, [
+  AC_LANG_SAVE
+  AC_LANG_CPLUSPLUS
+  AC_MSG_CHECKING([for $1 declaration])
   AC_TRY_COMPILE([#include <math.h>], 
-  [float foo(void) { __builtin_cosf(0.0); }], 
-  use_builtin_cosf=yes, use_builtin_cosf=no)
-  AC_MSG_RESULT($use_builtin_cosf)
-  if test $use_builtin_cosf = "yes"; then
-    AC_DEFINE(_GLIBCPP_HAS_BUILTIN_COSF)
+  [ $1(0, 0);], 
+  [use_$1=yes], [use_$1=no])
+  AC_MSG_RESULT($use_$1)
+  AC_LANG_RESTORE
+  if test x$use_$1 = x"yes"; then
+    AC_CHECK_FUNCS($1)    
   fi
+])
+
 
-  AC_MSG_CHECKING([for __builtin_fabsf])
+dnl
+dnl Check to see if the (math function) argument passed is
+dnl 1) declared when using the c++ compiler
+dnl 2) has "C" linkage
+dnl
+dnl Define HAVE_CARGF etc if "cargf" is declared and links
+dnl
+dnl argument 1 is name of function to check
+dnl
+dnl ASSUMES argument is a math function with THREE parameters
+dnl
+dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3
+AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3, [
+  AC_LANG_SAVE
+  AC_LANG_CPLUSPLUS
+  AC_MSG_CHECKING([for $1 declaration])
   AC_TRY_COMPILE([#include <math.h>], 
-  [float foo(void) { __builtin_fabsf(0.0); }], 
-  use_builtin_fabsf=yes, use_builtin_fabsf=no)
-  AC_MSG_RESULT($use_builtin_fabsf)
-  if test $use_builtin_fabsf = "yes"; then
-    AC_DEFINE(_GLIBCPP_HAS_BUILTIN_FABSF)
+  [ $1(0, 0, 0);], 
+  [use_$1=yes], [use_$1=no])
+  AC_MSG_RESULT($use_$1)
+  AC_LANG_RESTORE
+  if test x$use_$1 = x"yes"; then
+    AC_CHECK_FUNCS($1)    
   fi
+])
+
 
-  AC_MSG_CHECKING([for __builtin_sqrtf])
+dnl
+dnl Because the builtins are picky picky picky about the arguments they take, 
+dnl do an explict linkage tests here.
+dnl Check to see if the (math function) argument passed is
+dnl 1) declared when using the c++ compiler
+dnl 2) has "C" linkage
+dnl
+dnl Define HAVE_CARGF etc if "cargf" is declared and links
+dnl
+dnl argument 1 is name of function to check
+dnl
+dnl ASSUMES argument is a math function with ONE parameter
+dnl
+dnl GLIBCPP_CHECK_BUILTIN_MATH_DECL_LINKAGE_1
+AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1, [
+  AC_LANG_SAVE
+  AC_LANG_CPLUSPLUS
+  AC_MSG_CHECKING([for $1 declaration])
   AC_TRY_COMPILE([#include <math.h>], 
-  [float foo(void) { __builtin_sqrtf(0.0); }], 
-  use_builtin_sqrtf=yes, use_builtin_sqrtf=no)
-  AC_MSG_RESULT($use_builtin_sqrtf)
-  if test $use_builtin_sqrtf = "yes"; then
-    AC_DEFINE(_GLIBCPP_HAS_BUILTIN_SQRTF)
+  [ $1(0);], 
+  [use_$1=yes], [use_$1=no])
+  AC_MSG_RESULT($use_$1)
+  AC_LANG_RESTORE
+  if test x$use_$1 = x"yes"; then
+    AC_MSG_CHECKING([for $1 linkage])
+      AC_TRY_LINK([#include <math.h>], 
+      [ $1(0);],
+      [link_$1=yes], [link_$1=no])
+    AC_MSG_RESULT($link_$1)
+    if test x$link_$1 = x"yes"; then
+      ac_tr_func=HAVE_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+      AC_DEFINE_UNQUOTED(${ac_tr_func})
+    fi
+  fi
+])
+
+
+dnl
+dnl Check to see what builtin math functions are supported
+dnl
+dnl check for __builtin_abs
+dnl check for __builtin_fabsf
+dnl check for __builtin_fabs
+dnl check for __builtin_fabl
+dnl check for __builtin_labs
+dnl check for __builtin_sqrtf
+dnl check for __builtin_sqrtl
+dnl check for __builtin_fsqrt
+dnl check for __builtin_sinf
+dnl check for __builtin_sin
+dnl check for __builtin_sinl
+dnl check for __builtin_cosf
+dnl check for __builtin_cos
+dnl check for __builtin_cosl
+dnl
+dnl GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT
+AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT, [
+  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
+  dnl than I.... please email the libstdc++ list if you can figure out a
+  dnl more elegant approach (see autoconf/acgen.m4 and specifically
+  dnl AC_CHECK_FUNC for things to steal.)
+  dummyvar=no
+  if test x$dummyvar = x"yes"; then
+    AC_DEFINE(HAVE___BUILTIN_ABS)
+    AC_DEFINE(HAVE___BUILTIN_LABS)
+    AC_DEFINE(HAVE___BUILTIN_COS)
+    AC_DEFINE(HAVE___BUILTIN_COSF)
+    AC_DEFINE(HAVE___BUILTIN_COSL)
+    AC_DEFINE(HAVE___BUILTIN_FABS)
+    AC_DEFINE(HAVE___BUILTIN_FABSF)
+    AC_DEFINE(HAVE___BUILTIN_FABSL)
+    AC_DEFINE(HAVE___BUILTIN_SIN)
+    AC_DEFINE(HAVE___BUILTIN_SINF)
+    AC_DEFINE(HAVE___BUILTIN_SINL)
+    AC_DEFINE(HAVE___BUILTIN_FSQRT)
+    AC_DEFINE(HAVE___BUILTIN_SQRTF)
+    AC_DEFINE(HAVE___BUILTIN_SQRTL)
+  fi
+])
+
+
+dnl
+dnl Check to see what the underlying c library or math library is like.
+dnl These checks need to do two things: 
+dnl 1) make sure the name is declared when using the c++ compiler
+dnl 2) make sure the name has "C" linkage
+dnl This might seem like overkill but experience has shown that it's not...
+dnl
+dnl Define HAVE_CARGF etc if "cargf" is found.
+dnl
+dnl GLIBCPP_CHECK_MATH_SUPPORT
+AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
+  ac_test_CXXFLAGS="${CXXFLAGS+set}"
+  ac_save_CXXFLAGS="$CXXFLAGS"
+  CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
+
+  dnl Check libm
+  AC_CHECK_LIB(m, sin, libm="-lm")
+  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)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(finite)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(copysign)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(sincos)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fpclass)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)
+
+  dnl Check to see if basic C math functions have float versions.
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isnanf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(isinff)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(acosf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(asinf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(atanf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(atan2f)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(ceilf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(cosf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(coshf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(expf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(fabsf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(floorf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(fmodf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(frexpf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(ldexpf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(logf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(log10f)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(modff)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(powf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sinhf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(sqrtf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(tanf)
+  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.
+  dnl Check to see if certain C math functions exist.
+  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)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_finite)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_copysign)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3(_sincos)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_fpclass)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_qfpclass)
+
+  dnl Check to see if basic C math functions have float versions.
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isnanf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_isinff)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_acosf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_asinf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_atanf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_atan2f)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_ceilf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_cosf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_coshf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_expf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_fabsf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_floorf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_fmodf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_frexpf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_ldexpf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_logf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_log10f)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_modff)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2(_powf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sinhf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_sqrtf)
+  GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(_tanf)
+  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)
+
+  LIBS="$ac_save_LIBS"
+  CXXFLAGS="$ac_save_CXXFLAGS"
+])
+
+
+dnl
+dnl Check to see if there is native support for complex 
+dnl
+dnl Don't compile bits in math/* if native support exits.
+dnl
+dnl Define USE_COMPLEX_LONG_DOUBLE etc if "cargf" is found.
+dnl
+dnl GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
+AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT, [
+  dnl Check for complex versions of math functions of platform.
+  AC_CHECK_HEADERS([complex.h])
+  AC_REPLACE_MATHFUNCS(ccos ccosf ccosh ccoshf cexp cexpf c_log c_logf \
+  clog10 clog10f cpow cpowf csin csinf csinh csinhf csqrt csqrtf \
+  ctan ctanf ctanh ctanhf carg cargf nan hypot hypotf atan2f expf copysignf)
+
+  dnl Compile the long double complex functions only if the function 
+  dnl provides the non-complex long double functions that are needed.
+  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 \
+    csqrtl ctanhl ctanl cargl hypotl signbitl c_logl clog10l)
   fi
+
+  AC_SUBST(USE_COMPLEX_LONG_DOUBLE)
 ])
 
 
@@ -284,7 +675,7 @@ dnl
 dnl GLIBCPP_CHECK_CPU
 AC_DEFUN(GLIBCPP_CHECK_CPU, [
     AC_MSG_CHECKING([for cpu primitives directory])
-    CPUFLAGS=                  
+    CPU_FLAGS=                 
     case "$target_cpu" in
       alpha*)
        cpu_include_dir="config/cpu/alpha"
@@ -300,7 +691,7 @@ AC_DEFUN(GLIBCPP_CHECK_CPU, [
         ;;
       powerpc | rs6000)
        cpu_include_dir="config/cpu/powerpc"
-       CPUFLAGS='-mcpu=powerpc'
+       CPU_FLAGS='-mcpu=powerpc'
         ;;
       sparc64 | ultrasparc)
        cpu_include_dir="config/cpu/sparc/sparc64"
@@ -314,7 +705,7 @@ AC_DEFUN(GLIBCPP_CHECK_CPU, [
     esac
     AC_MSG_RESULT($cpu_include_dir)
     AC_SUBST(cpu_include_dir)
-    AC_SUBST(CPUFLAGS)
+    AC_SUBST(CPU_FLAGS)
 ])
 
  
@@ -470,109 +861,94 @@ AC_DEFUN(GLIBCPP_CHECK_CTYPE, [
 
 
 dnl
-dnl Check to see what the underlying c library or math library is like.
-dnl
-dnl Define HAVE_CARGF etc if "cargf" is found.
-dnl
-dnl GLIBCPP_CHECK_MATH_SUPPORT
-AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
-  AC_CHECK_LIB(m, sin, libm="-lm")
-  save_LIBS="$LIBS"
-  LIBS="$LIBS $libm"
-
-  dnl Check for complex versions of math functions of platform.
-  AC_CHECK_HEADERS([complex.h])
-  AC_REPLACE_MATHFUNCS(ccos ccosf ccosh ccoshf cexp cexpf c_log c_logf \
-  clog10 clog10f cpow cpowf csin csinf csinh csinhf csqrt csqrtf \
-  ctan ctanf ctanh ctanhf \
-  carg cargf nan hypot hypotf atan2f expf copysignf)
-
-  dnl We compile the long double complex functions only if the function 
-  dnl provides the non-complex long double functions.
-  USE_LONG_DOUBLE=no
-  AC_CHECK_FUNC(copysignl,
-  USE_LONG_DOUBLE=yes
-  AC_REPLACE_MATHFUNCS(ccoshl ccosl cexpl cpowl csinhl csinl \
-  csqrtl ctanhl ctanl cargl hypotl signbitl c_logl clog10l))
-  AC_SUBST(USE_LONG_DOUBLE)
-
-  dnl Check to see if basic C math functions have faster float versions.
-  AC_CHECK_FUNCS(modf isnan isnanf isnanl isinf isinff isinfl copysign \
-  copysignl cosf coshf logf log10f powf sinf sinhf sqrtf tanf tanhf \
-  strtof strtold fabsf sincos sincosf sincosl finite finite fqfinite \
-  fpclass qfpclass)
-
-#Some runtimes have these functions with a preceding underscore. Please
-# keep this sync'd with the one above. And if you add any new symbol,
-# please add the corresponding block in the @BOTTOM@ section of
-# acconfig.h.
-AC_CHECK_FUNCS(_modf _isnan _isnanf _isnanl _isinf _isinff _isinfl _copysign \
-_copysignl _cosf _coshf _logf _log10f _powf _sinf _sinhf _sqrtf _tanf _tanhf \
-_strtof _strtold _fabsf _sincos _sincosf _sincosl _finite _finitef _qfinite \
-_fpclass _qfpclass)
-
-LIBS="$save_LIBS"
-])
-
-
-dnl
 dnl Check to see if this target can enable the wchar_t parts of libstdc++.
 dnl
 dnl Define _GLIBCPP_USE_WCHAR_T if all the bits are found 
 dnl Define _GLIBCPP_NEED_MBSTATE_T if mbstate_t is not in wchar.h
-dnl Define _GLIBCPP_HAS_WCHAR_MIN_MAX if WCHAR_MIN, WCHAR_MAX in wchar.h
 dnl
 dnl GLIBCPP_CHECK_WCHAR_T_SUPPORT
 AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
-  AC_CHECK_HEADER(wchar.h,[
-  dnl Test wchar.h for mbstate_t, which is needed for char_traits and others.
-  AC_MSG_CHECKING([for native mbstate_t])
-  AC_TRY_COMPILE([#include <wchar.h>],
-  [mbstate_t teststate;], 
-  use_native_mbstatet=yes, use_native_mbstatet=no)
-  AC_MSG_RESULT($use_native_mbstatet)
-  if test $use_native_mbstatet = "no"; then
-    AC_DEFINE(_GLIBCPP_NEED_MBSTATE_T)
-  fi
+
+  dnl Sanity check for existence of ISO C9X headers for extended encoding.
+  AC_CHECK_HEADER(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
+  AC_CHECK_HEADER(wctype.h, ac_has_wctype_h=yes, ac_has_wctype_h=no)
+       
+  dnl Only continue checking if the ISO C9X headers exist.
+  if test x"$ac_has_wchar_h" = xyes && test x"$ac_has_wctype_h" = xyes; then
+
+    dnl Test wchar.h for mbstate_t, which is needed for char_traits and others.
+    AC_MSG_CHECKING([for mbstate_t])
+    AC_TRY_COMPILE([#include <wchar.h>],
+    [mbstate_t teststate;], 
+    use_native_mbstatet=yes, use_native_mbstatet=no)
+    AC_MSG_RESULT($use_native_mbstatet)
+    if test x"$use_native_mbstatet" = xno; then
+      AC_DEFINE(_GLIBCPP_NEED_MBSTATE_T)
+    fi
   
-  dnl Test wchar.h for WCHAR_MIN, WCHAR_MAX, which is needed before
-  dnl numeric_limits can instantiate type_traits<wchar_t>
-  AC_MSG_CHECKING([for WCHAR_MIN and WCHAR_MAX])
-  AC_TRY_COMPILE([#include <wchar.h>],
-  [int i = WCHAR_MIN; int j = WCHAR_MAX;], 
-  has_wchar_minmax=yes, has_wchar_minmax=no)
-  AC_MSG_RESULT($has_wchar_minmax)
-  if test $has_wchar_minmax = "yes"; then
-    AC_DEFINE(_GLIBCPP_HAS_WCHAR_MIN_MAX)
-  fi
+    dnl Test wchar.h for WCHAR_MIN, WCHAR_MAX, which is needed before
+    dnl numeric_limits can instantiate type_traits<wchar_t>
+    AC_MSG_CHECKING([for WCHAR_MIN and WCHAR_MAX])
+    AC_TRY_COMPILE([#include <wchar.h>],
+    [int i = WCHAR_MIN; int j = WCHAR_MAX;], 
+    has_wchar_minmax=yes, has_wchar_minmax=no)
+    AC_MSG_RESULT($has_wchar_minmax)
   
-  # Test wchar.h for WEOF, which is what we use to determine whether
-  # to specialize for wchar_t or not.
-  AC_MSG_CHECKING([for WEOF])
-  AC_TRY_COMPILE([
-    #include <wchar.h>
-    #include <stddef.h>],
-  [wint_t i = WEOF;],
-  has_weof=yes, has_weof=no)
-  AC_MSG_RESULT($has_weof)
-
-  dnl Tests for wide character functions.
-  AC_REPLACE_STRINGFUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset)
-  AC_SUBST(libinst_wstring_la)
-
-  AC_MSG_CHECKING([for wide character support])
-  if test $has_weof = "yes" && test $has_wchar_minmax = "yes"; then
-    libinst_wstring_la="libinst-wstring.la"
-    AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
-    AC_MSG_RESULT(ok)
+    dnl Test wchar.h for WEOF, which is what we use to determine whether
+    dnl to specialize for char_traits<wchar_t> or not.
+    AC_MSG_CHECKING([for WEOF])
+    AC_TRY_COMPILE([
+      #include <wchar.h>
+      #include <stddef.h>],
+    [wint_t i = WEOF;],
+    has_weof=yes, has_weof=no)
+    AC_MSG_RESULT($has_weof)
+
+    dnl Tests for wide character functions used in char_traits<wchar_t>.
+    AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset, ac_wfuncs=yes, ac_wfuncs=no)
+
+    AC_MSG_CHECKING([for ISO C9X wchar_t support])
+    if test x"$has_weof" = xyes && test x"$has_wchar_minmax" = xyes && test x"$ac_wfuncs" = xyes; then
+      ac_isoC9X_wchar_t=yes
+    else
+      ac_isoC9X_wchar_t=no
+    fi
+    AC_MSG_RESULT($ac_isoC9X_wchar_t)
+
+    dnl Use iconv for wchar_t to char conversions. As such, check for 
+    dnl X/Open Portability Guide, version 2 features (XPG2).
+    AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
+    AC_CHECK_FUNCS(iconv_open iconv_close iconv, ac_XPG2funcs=yes, ac_XPG2funcs=no)
+
+    AC_MSG_CHECKING([for XPG2 wchar_t support])
+    if test x"$ac_has_iconv_h" = xyes && test x"$ac_XPG2funcs" = xyes; then
+      ac_XPG2_wchar_t=yes
+    else
+      ac_XPG2_wchar_t=no
+    fi
+    AC_MSG_RESULT($ac_XPG2_wchar_t)
+
+    dnl At the moment, only enable wchar_t specializations if all the
+    dnl above support is present.
+    dnl 2000-07-07-bkoz-hack-xxx
+#    ac_isoC9X_wchar_t=no
+    dnl 2000-07-07-bkoz-hack-xxx
+
+    AC_MSG_CHECKING([for enabled wchar_t specializations])
+    if test x"$ac_isoC9X_wchar_t" = xyes && test x"$ac_XPG2_wchar_t" = xyes; then
+      libinst_wstring_la="libinst-wstring.la"
+      AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
+      AC_MSG_RESULT("yes")
+    else
+      libinst_wstring_la=""
+      AC_MSG_RESULT("no")
+    fi
+    AC_SUBST(libinst_wstring_la)
+
   else
-    libinst_wstring_la=""
-    AC_MSG_RESULT("not specializing for wchar_t")
+    AC_MSG_WARN([<wchar.h> not found])
+    AC_DEFINE(_GLIBCPP_NEED_MBSTATE_T)
   fi
-  ],[
-  AC_MSG_WARN([<wchar.h> not found])
-  AC_DEFINE(_GLIBCPP_NEED_MBSTATE_T)
-  ])
 ])
 
 
@@ -582,9 +958,33 @@ dnl __complex__ float support.
 dnl
 dnl Define _GLIBCPP_BUGGY_FLOAT_COMPLEX if buggy.
 dnl
-dnl GLIBCPP_CHECK_COMPLEX_FLOAT_SUPPORT
-AC_DEFUN(GLIBCPP_CHECK_COMPLEX_FLOAT_SUPPORT, [
+dnl Check to see if this version of GNU C++ is afflicted by bugs in 
+dnl __complex__ support.Check for buggy __complex__ that will cause ICE in
+dnl gcc-2.95.x when using the library, unless we define the default copy
+dnl ctor in the specializations of complex<>. 
+dnl 
+dnl Define _GLIBCPP_BUGGY_COMPLEX if buggy.
+dnl GLIBCPP_CHECK_COMPLEX_MATH_COMPILER_SUPPORT
+AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_COMPILER_SUPPORT, [
   AC_REQUIRE([AC_PROG_CXX])
+
+  AC_MSG_CHECKING([for GNU C++ __complex__ support])
+  AC_CACHE_VAL(glibcpp_cv_complex, [
+    AC_LANG_SAVE
+    AC_LANG_CPLUSPLUS
+    AC_TRY_COMPILE([struct dcomplex { __complex__ double x; }; \
+                   dcomplex f(const dcomplex& x) { return dcomplex(x); }], \
+                   [ dcomplex x; f(x); ],
+      glibcpp_cv_complex=ok,
+      glibcpp_cv_complex=buggy
+    )
+    AC_LANG_RESTORE
+  ])
+  AC_MSG_RESULT($glibcpp_cv_complex)
+  if test $glibcpp_cv_complex = buggy; then
+    AC_DEFINE(_GLIBCPP_BUGGY_COMPLEX)
+  fi
+
   AC_MSG_CHECKING([for GNU C++ __complex__ float support])
   AC_CACHE_VAL(glibcpp_cv_float_complex, [
     AC_LANG_SAVE
@@ -622,37 +1022,6 @@ EOB
 
 
 dnl
-dnl 
-dnl Check to see if this version of GNU C++ is afflicted by bugs in 
-dnl __complex__ support.Check for buggy __complex__ that will cause ICE in
-dnl gcc-2.95.x when using the library, unless we define the default copy
-dnl ctor in the specializations of complex<>. 
-dnl 
-dnl Define _GLIBCPP_BUGGY_COMPLEX if buggy.
-dnl
-dnl GLIBCPP_CHECK_COMPLEX_SUPPORT
-AC_DEFUN(GLIBCPP_CHECK_COMPLEX_SUPPORT, [
-  AC_REQUIRE([AC_PROG_CXX])
-  AC_MSG_CHECKING([for GNU C++ __complex__ support])
-  AC_CACHE_VAL(glibcpp_cv_complex, [
-    AC_LANG_SAVE
-    AC_LANG_CPLUSPLUS
-    AC_TRY_COMPILE([struct dcomplex { __complex__ double x; }; \
-                   dcomplex f(const dcomplex& x) { return dcomplex(x); }], \
-                   [ dcomplex x; f(x); ],
-      glibcpp_cv_complex=ok,
-      glibcpp_cv_complex=buggy
-    )
-    AC_LANG_RESTORE
-  ])
-  AC_MSG_RESULT($glibcpp_cv_complex)
-  if test $glibcpp_cv_complex = buggy; then
-    AC_DEFINE(_GLIBCPP_BUGGY_COMPLEX)
-  fi
-])
-
-
-dnl
 dnl Check for special debugging mode; not for production use.
 dnl
 dnl GLIBCPP_ENABLE_DEBUG
@@ -679,13 +1048,13 @@ enable_debug=GLIBCPP_ENABLE_DEBUG_DEFAULT)dnl
 dnl Option parsed, now set things appropriately
 case "$enable_debug" in
     yes) 
-       DEBUGFLAGS='-O0 -ggdb'                  
+       DEBUG_FLAGS='-O0 -ggdb'                 
        ;;
     no)   
-       DEBUGFLAGS='-g'
+       DEBUG_FLAGS='-g'
         ;;
 esac
-AC_SUBST(DEBUGFLAGS)
+AC_SUBST(DEBUG_FLAGS)
 ])
 
 
@@ -800,45 +1169,73 @@ AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
 
   dnl Check if a valid thread package
   case x${enable_cstdio_flag} in
-       xlibio | x | xno | xnone | xyes)
-               # default
-               CSTDIO_H=c_io_libio.h
-               CSTDIO_CC=c_io_libio.cc
-               AC_MSG_RESULT(libio)
-
-               # see if we are on a system with libio native (ie, linux)
-               AC_CHECK_HEADER(libio.h,  has_libio=yes, has_libio=no)
-               if test $has_libio = "yes"; then
-                 BUILD_LIBIO_INCLUDE=
-                 need_libio=no
-               else
-                 BUILD_LIBIO_INCLUDE='-I../libio'
-                 need_libio=yes
-               fi
-               AC_SUBST(BUILD_LIBIO_INCLUDE)
-
-               # see if the _G_config.h header needs to be built. 
-               # NB: This replaces the _G_CONFIG_H machinery in libio-v2
-               AC_CHECK_HEADER(_G_config.h,  has_gconf_h=yes, has_gconf_h=no)
-               AM_CONDITIONAL(GLIBCPP_NEED_LIBIO_CONFIG_H, test "$has_gconf_h" = no)
-               ;;
-        xwince)
-                CSTDIO_H=c_io_wince.h
-                CSTDIO_CC=c_io_wince.cc
-                AC_MSG_RESULT(wince)
-
-                need_libio=no
-                BUILD_LIBIO_INCLUDE=
-                AC_SUBST(BUILD_LIBIO_INCLUDE)
-                ;;
-       *)
-               echo "$enable_cstdio is an unknown io package" 1>&2
-               exit 1
-               ;;
+    xlibio | x | xno | xnone | xyes)
+      # default
+      CSTDIO_H=config/c_io_libio.h
+      CSTDIO_CC=config/c_io_libio.cc
+      AC_MSG_RESULT(libio)
+
+      # see if we are on a system with libio native (ie, linux)
+      AC_CHECK_HEADER(libio.h,  has_libio=yes, has_libio=no)
+
+      # Need to check and see what version of glibc is being used. If
+      # it's not glibc-2.2 or higher, then we'll need to go ahead and 
+      # compile most of libio for linux systems.
+      if test x$has_libio = x"yes"; then
+        case "$target" in
+          *-*-linux*)
+           AC_MSG_CHECKING([for glibc version >= 2.2])
+           AC_EGREP_CPP([ok], [
+           #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) 
+               ok
+           #endif
+           ], glibc_satisfactory=yes, glibc_satisfactory=no)
+           AC_MSG_RESULT($glibc_satisfactory)
+           ;;
+        esac
+
+       if test x$glibc_satisfactory = x"yes"; then
+         BUILD_LIBIO_INCLUDE=
+         need_libio=no
+         need_xtra_libio=no
+         need_wlibio=no        
+       else
+         BUILD_LIBIO_INCLUDE='-I../libio'        
+         need_libio=yes
+         need_xtra_libio=yes
+          # bkoz XXX need to add checks to enable this
+          need_wlibio=yes
+       fi
+
+      # Using libio, but <libio.h> doesn't exist on the target system. . .
+      else
+       BUILD_LIBIO_INCLUDE='-I../libio'          
+       need_libio=yes
+        need_xtra_libio=no
+        # bkoz XXX need to add checks to enable this
+        need_wlibio=no
+      fi
+      ;;
+
+    xwince)
+      CSTDIO_H=config/c_io_wince.h
+      CSTDIO_CC=config/c_io_wince.cc
+      AC_MSG_RESULT(wince)
+
+      need_libio=no
+      BUILD_LIBIO_INCLUDE=
+      AC_SUBST(BUILD_LIBIO_INCLUDE)
+      ;;
+    *)
+      echo "$enable_cstdio is an unknown io package" 1>&2
+      exit 1
+      ;;
   esac
-  AC_SUBST(CSTDIO_H)
-  AC_SUBST(CSTDIO_CC)
+  AC_LINK_FILES($CSTDIO_H, bits/c++io.h)
+  AC_LINK_FILES($CSTDIO_CC, src/c++io.cc)
   AM_CONDITIONAL(GLIBCPP_NEED_LIBIO, test "$need_libio" = yes)
+  AM_CONDITIONAL(GLIBCPP_NEED_XTRA_LIBIO, test "$need_xtra_libio" = yes)
+  AM_CONDITIONAL(GLIBCPP_NEED_WLIBIO, test "$need_wlibio" = yes)
 ])
 
 
@@ -891,7 +1288,7 @@ AC_DEFUN(GLIBCPP_ENABLE_THREADS, [
       ;;
     posix | pthreads)
       THREADS=posix
-      case "$host" in
+      case "$target" in
         *-*-linux*)
        ;;
       esac
@@ -931,6 +1328,7 @@ AC_DEFUN(GLIBCPP_ENABLE_THREADS, [
   AC_SUBST(THREADDEPS)
   AC_SUBST(THREADOBJS)
   AC_SUBST(THREADSPEC)
+  AC_LINK_FILES(config/$THREADH, bits/c++threads.h)
 ])
 
 
@@ -949,7 +1347,6 @@ dnl GLIBCPP_ENABLE_LONG_LONG
 AC_DEFUN(GLIBCPP_ENABLE_LONG_LONG, [dnl
   define([GLIBCPP_ENABLE_LONG_LONG_DEFAULT], ifelse($1, yes, yes, no))dnl
 
-  AC_MSG_CHECKING([for enabled long long])
   AC_ARG_ENABLE(long-long,
   changequote(<<, >>)dnl
   <<--enable-long-long      turns on 'long long' [default=>>GLIBCPP_ENABLE_LONG_LONG_DEFAULT],
@@ -965,11 +1362,12 @@ AC_DEFUN(GLIBCPP_ENABLE_LONG_LONG, [dnl
   AC_CHECK_FUNC(strtoll,,ac_strtoll=no)
   AC_CHECK_FUNC(strtoull,,ac_strtoull=no)
 
+  AC_MSG_CHECKING([for enabled long long])
   if test x"$ac_strtoll" = xno || test x"$ac_strtoull" = xno; then 
-       enable_long_long=no; 
-  fi; unset ac_ll
-
+    enable_long_long=no; 
+  fi; 
   AC_MSG_RESULT($enable_long_long)
+
   dnl Option parsed, now set things appropriately
   case "$enable_long_long" in
     yes)  AC_DEFINE(_GLIBCPP_USE_LONG_LONG)
@@ -1009,7 +1407,7 @@ AC_MSG_RESULT($enable_cshadow_headers)
 dnl Option parsed, now set things appropriately
 case "$enable_cshadow_headers" in
     yes) 
-       CSHADOWFLAGS="-D_ISOC9X_SOURCE"
+       CSHADOWFLAGS="-D_GNU_SOURCE"
        CSHADOW_INCLUDES=" -I$srcdir/shadow -I$blddir/cshadow"
        ;;
     no)   
@@ -1077,3 +1475,70 @@ AC_DEFUN(AC_REPLACE_STRINGFUNCS,
 [AC_CHECK_FUNCS([$1], , [LIBSTRINGOBJS="$LIBSTRINGOBJS ${ac_func}.lo"])
 AC_SUBST(LIBSTRINGOBJS)dnl
 ])
+
+
+dnl This macro searches for a GNU version of make.  If a match is found, the
+dnl makefile variable `ifGNUmake' is set to the empty string, otherwise it is
+dnl set to "#".  This is useful for  including a special features in a Makefile,
+dnl which cannot be handled by other versions of make.  The variable
+dnl _cv_gnu_make_command is set to the command to invoke GNU make if it exists,
+dnl the empty string otherwise.
+dnl
+dnl Here is an example of its use:
+dnl
+dnl Makefile.in might contain:
+dnl
+dnl     # A failsafe way of putting a dependency rule into a makefile
+dnl     $(DEPEND):
+dnl             $(CC) -MM $(srcdir)/*.c > $(DEPEND)
+dnl
+dnl     @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND)))
+dnl     @ifGNUmake@ include $(DEPEND)
+dnl     @ifGNUmake@ endif
+dnl
+dnl Then configure.in would normally contain:
+dnl
+dnl     CHECK_GNU_MAKE()
+dnl     AC_OUTPUT(Makefile)
+dnl
+dnl Then perhaps to cause gnu make to override any other make, we could do
+dnl something like this (note that GNU make always looks for GNUmakefile first):
+dnl
+dnl     if  ! test x$_cv_gnu_make_command = x ; then
+dnl             mv Makefile GNUmakefile
+dnl             echo .DEFAULT: > Makefile ;
+dnl             echo \  $_cv_gnu_make_command \$@ >> Makefile;
+dnl     fi
+dnl
+dnl Then, if any (well almost any) other make is called, and GNU make also
+dnl exists, then the other make wraps the GNU make.
+dnl
+dnl @author John Darrington <j.darrington@elvis.murdoch.edu.au>
+dnl @version $Id: acinclude.m4,v 1.42 2000/07/17 18:17:33 pme Exp $
+dnl
+dnl #### Changes for libstdc++-v3:  reformatting and linewrapping; prepending
+dnl #### GLIBCPP_ to the macro name; adding the :-make fallback in the
+dnl #### conditional's subshell (" --version" is not a command).
+dnl #### -pme
+AC_DEFUN(
+  GLIBCPP_CHECK_GNU_MAKE, [AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command,
+          _cv_gnu_make_command='' ;
+dnl Search all the common names for GNU make
+          for a in "${MAKE:-make}" make gmake gnumake ; do
+                  if  ( $a --version 2> /dev/null | grep  -q GNU  ) ;  then
+                          _cv_gnu_make_command=$a ;
+                          break;
+                  fi
+          done ;
+  ) ;
+dnl If there was a GNU version, then set @ifGNUmake@ to the empty
+dnl string, '#' otherwise
+  if test  "x$_cv_gnu_make_command" != "x"  ; then
+          ifGNUmake='' ;
+  else
+          ifGNUmake='#' ;
+  fi
+  AC_SUBST(ifGNUmake)
+])
+
+