OSDN Git Service

libstdc++/3243
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / acinclude.m4
index aedd6b9..a4e733f 100644 (file)
@@ -1,8 +1,6 @@
 dnl
 dnl Initialize configure bits.
 dnl
-dnl Define OPTLEVEL='-O2' if new inlining code present.
-dnl
 dnl GLIBCPP_CONFIGURE
 AC_DEFUN(GLIBCPP_CONFIGURE, [
   dnl Default to --enable-multilib
@@ -14,20 +12,10 @@ AC_DEFUN(GLIBCPP_CONFIGURE, [
     *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
    esac], [multilib=yes])dnl
 
-  dnl We may get other options which we dont document:
-  dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
-  if test "[$]{srcdir}" = "."; then
-    if test "[$]{with_target_subdir}" != "."; then
-      glibcpp_basedir="[$]{srcdir}/[$]{with_multisrctop}../$1"
-    else
-      glibcpp_basedir="[$]{srcdir}/[$]{with_multisrctop}$1"
-    fi
-  else
-    glibcpp_basedir="[$]{srcdir}/$1"
-  fi
+  glibcpp_basedir=$srcdir/$toprel/$1/libstdc++-v3
   AC_SUBST(glibcpp_basedir)
 
-  AM_INIT_AUTOMAKE(libstdc++, 2.90.8)
+  AM_INIT_AUTOMAKE(libstdc++, 3.0.0)
 
   # Never versions of autoconf add an underscore to these functions.
   # Prevent future problems ...
@@ -88,8 +76,15 @@ AC_DEFUN(LIB_AC_PROG_CXX,
 [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
 dnl Fool anybody using AC_PROG_CXX.
 AC_PROVIDE([AC_PROG_CXX])
-AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
-test -z "$CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
+# Use glibcpp_CXX so that we do not cause CXX to be cached with the
+# flags that come in CXX while configuring libstdc++.  They're different
+# from those used for all other target libraries.  If CXX is set in
+# the environment, respect that here.
+glibcpp_CXX=$CXX
+AC_CHECK_PROGS(glibcpp_CXX, $CCC c++ g++ gcc CC cxx cc++, gcc)
+AC_SUBST(glibcpp_CXX)
+CXX=$glibcpp_CXX
+test -z "$glibcpp_CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
 
 AC_PROG_CXX_GNU
 
@@ -119,8 +114,7 @@ LIB_AC_PROG_CXX
 
   AC_CHECK_TOOL(AS, as)
   AC_CHECK_TOOL(AR, ar)
-  AC_CHECK_TOOL(RANLIB, ranlib, :)
-
+  AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
   AC_PROG_INSTALL
 
   AM_MAINTAINER_MODE
@@ -133,26 +127,23 @@ LIB_AC_PROG_CXX
   # automake happy, but we dont execute it, since we dont care about
   # the result.
   if false; then
+    # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
+    # to nothing, so nothing would remain between `then' and `fi' if it
+    # were not for the `:' below.
+    :
     AC_EXEEXT
   fi
 
-  # configure.host sets the following important variables
-  #        glibcpp_cflags    - host specific C compiler flags
-  #        glibcpp_cxxflags  - host specific C++ compiler flags
-  glibcpp_cflags=
-  glibcpp_cxxflags=
-
   . [$]{glibcpp_basedir}/configure.host
 
   case [$]{glibcpp_basedir} in
-    /* | [A-Za-z]:[/\\]*) libgcj_flagbasedir=[$]{glibcpp_basedir} ;;
+    /* | [A-Za-z]:[\\/]*) libgcj_flagbasedir=[$]{glibcpp_basedir} ;;
     *) glibcpp_flagbasedir='[$](top_builddir)/'[$]{glibcpp_basedir} ;;
   esac
 
-  GLIBCPP_CFLAGS="[$]{glibcpp_cflags}"
-  GLIBCPP_CXXFLAGS="[$]{glibcpp_cxxflags}"
-  AC_SUBST(GLIBCPP_CFLAGS)
-  AC_SUBST(GLIBCPP_CXXFLAGS)
+  # This does for the target what configure.host does for the host.  In
+  # addition to possibly modifying the same flags, it also sets up symlinks.
+  GLIBCPP_CHECK_TARGET
 ])
 
 
@@ -162,34 +153,38 @@ 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
+if test ! -f stamp-sanity-compiler; then
+  AC_MSG_CHECKING([for g++ that will successfully compile libstdc++-v3])
+  AC_LANG_SAVE
+  AC_LANG_CPLUSPLUS
+  AC_TRY_COMPILE(, [
+  #if __GNUC__ < 3
+    not_ok
   #endif
-  ], gpp_satisfactory=yes, AC_MSG_ERROR([please upgrade to gcc-2.95 or above]))
+  ], gpp_satisfactory=yes, AC_MSG_ERROR([please upgrade to GCC 3.0 or above]))
+  AC_LANG_RESTORE
   AC_MSG_RESULT($gpp_satisfactory)
+  touch stamp-sanity-compiler
+fi
 ])
 
 
 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 Tests for newer compiler features, or features that are present in newer
+dnl compiler versions but not older compiler versions still in use, should
+dnl be placed here.
 dnl
-dnl Define WFMT_FLAGS='-fdiagnostics-show-location=once' if possible
-dnl 
 dnl Define WERROR='-Werror' if requested and possible; g++'s that lack the
 dnl new inlining code or the new system_header pragma will die on -Werror.
 dnl Leave it out by default and use maint-mode to use it.
 dnl
 dnl Define SECTION_FLAGS='-ffunction-sections -fdata-sections' if
-dnl compiler supports it.  
+dnl compiler supports it and the user has not requested debug mode.
+dnl
 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 
+  # The CXXFLAGS thing is suspicious, but based on similar bits previously
   # found in GLIBCPP_CONFIGURE.
   AC_LANG_SAVE
   AC_LANG_CPLUSPLUS
@@ -203,22 +198,6 @@ AC_DEFUN(GLIBCPP_CHECK_COMPILER_FEATURES, [
     WERROR='-Werror'
   fi
 
-  # Check for more sophisticated diagnostic control.
-  AC_MSG_CHECKING([for g++ that supports -fdiagnostics-show-location=once])
-  CXXFLAGS='-Werror -fdiagnostics-show-location=once'
-  AC_TRY_COMPILE(, [int foo;
-  ], [ac_gabydiags=yes], [ac_gabydiags=no])
-  if test "$ac_test_CXXFLAGS" = set; then
-    CXXFLAGS="$ac_save_CXXFLAGS"
-  else
-    # this is the suspicious part
-    CXXFLAGS=''
-  fi
-  if test "$ac_gabydiags" = "yes"; then
-    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='-Werror -ffunction-sections -fdata-sections'
@@ -230,14 +209,14 @@ AC_DEFUN(GLIBCPP_CHECK_COMPILER_FEATURES, [
     # this is the suspicious part
     CXXFLAGS=''
   fi
-  if test "$ac_fdsections" = "yes"; then
+  if test x"$ac_fdsections" = x"yes" &&
+     test x"$enable_debug" = x"no"; then
     SECTION_FLAGS='-ffunction-sections -fdata-sections'
   fi
   AC_MSG_RESULT($ac_fdsections)
 
   AC_LANG_RESTORE
   AC_SUBST(WERROR)
-  AC_SUBST(WFMT_FLAGS)
   AC_SUBST(SECTION_FLAGS)
 ])
 
@@ -258,16 +237,16 @@ AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
   SECTION_LDFLAGS=''
   OPT_LDFLAGS=''
   AC_REQUIRE([AC_PROG_LD])
-  if test "$ac_cv_prog_gnu_ld" = "yes"; then
+
+  # Set --gc-sections.
+  if test "$ac_cv_prog_gnu_ld" = "notbroken"; then
     # GNU ld it is!  Joy and bunny rabbits!
 
     # 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'
-#XXX
-    CFLAGS=''
+    CFLAGS='-x c++  -Wl,--gc-sections'
 
     # Check for -Wl,--gc-sections
     # XXX This test is broken at the moment, as symbols required for
@@ -292,15 +271,17 @@ AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
       CFLAGS=''
     fi
     if test "$ac_sectionLDflags" = "yes"; then
-#      SECTION_LDFLAGS='-Wl,--gc-sections'
-#XXX
-      SECTION_LDFLAGS=''
+      SECTION_LDFLAGS='-Wl,--gc-sections'
     fi
     AC_MSG_RESULT($ac_sectionLDflags)
+  fi
 
+  # Set linker optimization flags.
+  if test x"$ac_cv_prog_gnu_ld" = x"yes" &&
+     test x"$enable_debug" = x"no"; then
     OPT_LDFLAGS='-Wl,-O1'
-
   fi
+
   AC_SUBST(SECTION_LDFLAGS)
   AC_SUBST(OPT_LDFLAGS)
 ])
@@ -308,8 +289,34 @@ AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
 
 dnl
 dnl Check to see if the (math function) argument passed is
+dnl declared when using the c++ compiler
+dnl ASSUMES argument is a math function with ONE parameter
+dnl
+dnl GLIBCPP_CHECK_MATH_DECL_1
+AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_1, [
+  AC_MSG_CHECKING([for $1 declaration])
+  if test x${glibcpp_cv_func_$1_use+set} != xset; then
+    AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
+      AC_LANG_SAVE
+      AC_LANG_CPLUSPLUS
+      AC_TRY_COMPILE([#include <math.h>
+                     #ifdef HAVE_IEEEFP_H
+                     #include <ieeefp.h>
+                     #endif
+                    ], 
+                     [ $1(0);], 
+                     [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
+      AC_LANG_RESTORE
+    ])
+  fi
+  AC_MSG_RESULT($glibcpp_cv_func_$1_use)
+])
+
+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 3) if not, see if 1) and 2) for argument prepended with '_'
 dnl
 dnl Define HAVE_CARGF etc if "cargf" is declared and links
 dnl
@@ -319,23 +326,61 @@ 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_MSG_CHECKING([for $1 declaration])
-  AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
-    AC_LANG_SAVE
-    AC_LANG_CPLUSPLUS
-    AC_TRY_COMPILE([#include <math.h>], 
-                   [ $1(0);], 
-                   [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
-    AC_LANG_RESTORE
-  ])
-  AC_MSG_RESULT($glibcpp_cv_func_$1_use)
+  GLIBCPP_CHECK_MATH_DECL_1($1)
   if test x$glibcpp_cv_func_$1_use = x"yes"; then
     AC_CHECK_FUNCS($1)    
+  else
+    GLIBCPP_CHECK_MATH_DECL_1(_$1)
+    if test x$glibcpp_cv_func__$1_use = x"yes"; then
+      AC_CHECK_FUNCS(_$1)    
+    fi
   fi
 ])
 
 
 dnl
+dnl Like GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1, but does a bunch of
+dnl of functions at once.  It's an all-or-nothing check -- either 
+dnl HAVE_XYZ is defined for each of the functions, or for none of them.
+dnl Doing it this way saves significant configure time.
+AC_DEFUN(GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1, [
+  AC_MSG_CHECKING([for $1 functions])
+  AC_CACHE_VAL(glibcpp_cv_func_$2_use, [
+    AC_LANG_SAVE
+    AC_LANG_CPLUSPLUS
+    AC_TRY_COMPILE([#include <math.h>],
+                   [ `for x in $3; do echo "$x (0);"; done` ],
+                   [glibcpp_cv_func_$2_use=yes],
+                   [glibcpp_cv_func_$2_use=no])
+    AC_LANG_RESTORE])
+  AC_MSG_RESULT($glibcpp_cv_func_$2_use)
+  if test x$glibcpp_cv_func_$2_use = x"yes"; then
+    AC_CHECK_FUNCS($3)
+  fi
+])
+
+dnl
+dnl Check to see if the (math function) argument passed is
+dnl declared when using the c++ compiler
+dnl ASSUMES argument is a math function with TWO parameters
+dnl
+dnl GLIBCPP_CHECK_MATH_DECL_2
+AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_2, [
+  AC_MSG_CHECKING([for $1 declaration])
+  if test x${glibcpp_cv_func_$1_use+set} != xset; then
+    AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
+      AC_LANG_SAVE
+      AC_LANG_CPLUSPLUS
+      AC_TRY_COMPILE([#include <math.h>], 
+                     [ $1(0, 0);], 
+                     [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
+      AC_LANG_RESTORE
+    ])
+  fi
+  AC_MSG_RESULT($glibcpp_cv_func_$1_use)
+])
+
+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
@@ -348,24 +393,41 @@ 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_MSG_CHECKING([for $1 declaration])
-  AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
-    AC_LANG_SAVE
-    AC_LANG_CPLUSPLUS
-    AC_TRY_COMPILE([#include <math.h>], 
-                   [ $1(0, 0);], 
-                   [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
-    AC_LANG_RESTORE
-  ])
-  AC_MSG_RESULT($glibcpp_cv_func_$1_use)
+  GLIBCPP_CHECK_MATH_DECL_2($1)
   if test x$glibcpp_cv_func_$1_use = x"yes"; then
     AC_CHECK_FUNCS($1)    
+  else
+    GLIBCPP_CHECK_MATH_DECL_2(_$1)
+    if test x$glibcpp_cv_func__$1_use = x"yes"; then
+      AC_CHECK_FUNCS(_$1)    
+    fi
   fi
 ])
 
 
 dnl
 dnl Check to see if the (math function) argument passed is
+dnl declared when using the c++ compiler
+dnl ASSUMES argument is a math function with THREE parameters
+dnl
+dnl GLIBCPP_CHECK_MATH_DECL_3
+AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_3, [
+  AC_MSG_CHECKING([for $1 declaration])
+  if test x${glibcpp_cv_func_$1_use+set} != xset; then
+    AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
+      AC_LANG_SAVE
+      AC_LANG_CPLUSPLUS
+      AC_TRY_COMPILE([#include <math.h>], 
+                     [ $1(0, 0, 0);], 
+                     [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
+      AC_LANG_RESTORE
+    ])
+  fi
+  AC_MSG_RESULT($glibcpp_cv_func_$1_use)
+])
+
+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
@@ -377,15 +439,40 @@ 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, [
+  GLIBCPP_CHECK_MATH_DECL_3($1)
+  if test x$glibcpp_cv_func_$1_use = x"yes"; then
+    AC_CHECK_FUNCS($1)    
+  else
+    GLIBCPP_CHECK_MATH_DECL_3(_$1)
+    if test x$glibcpp_cv_func__$1_use = x"yes"; then
+      AC_CHECK_FUNCS(_$1)    
+    fi
+  fi
+])
+
+
+dnl
+dnl Check to see if the (stdlib function) argument passed is
+dnl 1) declared when using the c++ compiler
+dnl 2) has "C" linkage
+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_STDLIB_DECL_AND_LINKAGE_2
+AC_DEFUN(GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2, [
   AC_MSG_CHECKING([for $1 declaration])
-  AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
-    AC_LANG_SAVE
-    AC_LANG_CPLUSPLUS
-    AC_TRY_COMPILE([#include <math.h>], 
-                   [ $1(0, 0, 0);], 
-                   [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
-    AC_LANG_RESTORE
-  ])
+  if test x${glibcpp_cv_func_$1_use+set} != xset; then
+    AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
+      AC_LANG_SAVE
+      AC_LANG_CPLUSPLUS
+      AC_TRY_COMPILE([#include <stdlib.h>], 
+                     [ $1(0, 0);], 
+                     [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
+      AC_LANG_RESTORE
+    ])
+  fi
   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
   if test x$glibcpp_cv_func_$1_use = x"yes"; then
     AC_CHECK_FUNCS($1)    
@@ -409,22 +496,26 @@ dnl
 dnl GLIBCPP_CHECK_BUILTIN_MATH_DECL_LINKAGE_1
 AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_DECL_AND_LINKAGE_1, [
   AC_MSG_CHECKING([for $1 declaration])
-  AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
-    AC_LANG_SAVE
-    AC_LANG_CPLUSPLUS
-    AC_TRY_COMPILE([#include <math.h>], 
-                   [ $1(0);], 
-                   [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
-    AC_LANG_RESTORE
-  ])
+  if test x${glibcpp_cv_func_$1_use+set} != xset; then
+    AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
+      AC_LANG_SAVE
+      AC_LANG_CPLUSPLUS
+      AC_TRY_COMPILE([#include <math.h>], 
+                     [ $1(0);], 
+                     [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
+      AC_LANG_RESTORE
+    ])
+  fi
   AC_MSG_RESULT($glibcpp_cv_func_$1_use)
   if test x$glibcpp_cv_func_$1_use = x"yes"; then
     AC_MSG_CHECKING([for $1 linkage])
-    AC_CACHE_VAL(glibcpp_cv_func_$1_link, [
-      AC_TRY_LINK([#include <math.h>], 
-                  [ $1(0);], 
-                  [glibcpp_cv_func_$1_link=yes], [glibcpp_cv_func_$1_link=no])
-    ])
+    if test x${glibcpp_cv_func_$1_link+set} != xset; then
+      AC_CACHE_VAL(glibcpp_cv_func_$1_link, [
+        AC_TRY_LINK([#include <math.h>], 
+                    [ $1(0);], 
+                    [glibcpp_cv_func_$1_link=yes], [glibcpp_cv_func_$1_link=no])
+      ])
+    fi
     AC_MSG_RESULT($glibcpp_cv_func_$1_link)
     if test x$glibcpp_cv_func_$1_link = x"yes"; then
       ac_tr_func=HAVE_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
@@ -501,6 +592,30 @@ AC_DEFUN(GLIBCPP_CHECK_BUILTIN_MATH_SUPPORT, [
 
 
 dnl
+dnl Check to see what the underlying c library 
+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_STRTOLD if "strtold" is declared and links
+dnl Define HAVE_STRTOF if "strtof" is declared and links
+dnl Define HAVE_DRAND48 if "drand48" is declared and links
+dnl
+dnl GLIBCPP_CHECK_STDLIB_SUPPORT
+AC_DEFUN(GLIBCPP_CHECK_STDLIB_SUPPORT, [
+  ac_test_CXXFLAGS="${CXXFLAGS+set}"
+  ac_save_CXXFLAGS="$CXXFLAGS"
+  CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
+
+  GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
+  AC_CHECK_FUNCS(drand48)
+
+  CXXFLAGS="$ac_save_CXXFLAGS"
+])
+
+
+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
@@ -520,9 +635,6 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
   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)
@@ -533,18 +645,17 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
   GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1(qfpclass)
 
   dnl Check to see if basic C math functions have float versions.
+  GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(float trig,
+                                          float_trig,
+                                          acosf asinf atanf \
+                                          cosf sinf tanf \
+                                          coshf sinhf tanhf)
+  GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(float round,
+                                          float_round,
+                                          ceilf floorf)
   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)
@@ -552,28 +663,25 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
   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_DECLS_AND_LINKAGES_1(long double trig,
+                                          long_double_trig,
+                                          acosl asinl atanl \
+                                          cosl sinl tanl \
+                                          coshl sinhl tanhl)
+  GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(long double round,
+                                          long_double_round,
+                                          ceill floorl)
   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)
@@ -581,11 +689,7 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
   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)
 
@@ -593,70 +697,26 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
   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.
-  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)
+  GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_float trig,
+                                          _float_trig,
+                                          _acosf _asinf _atanf \
+                                          _cosf _sinf _tanf \
+                                          _coshf _sinhf _tanhf)
+  GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_float round,
+                                          _float_round,
+                                          _ceilf _floorf)
 
   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)
+  GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_long double trig,
+                                          _long_double_trig,
+                                          _acosl _asinl _atanl \
+                                          _cosl _sinl _tanl \
+                                          _coshl _sinhl _tanhl)
+  GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1(_long double round,
+                                          _long_double_round,
+                                          _ceill _floorl)
 
   LIBS="$ac_save_LIBS"
   CXXFLAGS="$ac_save_CXXFLAGS"
@@ -673,259 +733,34 @@ 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)
+  AC_CHECK_LIB(m, main)
+  AC_REPLACE_MATHFUNCS(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
+  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)
+    AC_REPLACE_MATHFUNCS(hypotl signbitl)
   fi
 
   AC_SUBST(USE_COMPLEX_LONG_DOUBLE)
 ])
 
 
-dnl Check to see what architecture we are compiling for. Also, if 
-dnl architecture-specific flags are required for compilation, add them here.
-dnl 
-dnl GLIBCPP_CHECK_CPU
-AC_DEFUN(GLIBCPP_CHECK_CPU, [
-    AC_MSG_CHECKING([for cpu config directory])
-# Currently unused, but could be useful.
-#    CPU_FLAGS=                        
-    case "${target_cpu}" in
-      alpha*)
-        cpu_include_dir="config/cpu/alpha"
-        ;;
-      arm*)
-        cpu_include_dir="config/cpu/arm"
-        ;;
-      ia64)
-        cpu_include_dir="config/cpu/ia64"
-        ;;
-      i386)
-        cpu_include_dir="config/cpu/i386"
-        ;;
-      i486 | i586 | i686 | i786)
-        cpu_include_dir="config/cpu/i486"
-        ;;
-      powerpc | rs6000)
-        cpu_include_dir="config/cpu/powerpc"
-        ;;
-      sparc64 | ultrasparc)
-        cpu_include_dir="config/cpu/sparc/sparc64"
-        ;;
-      sparc*)
-        cpu_include_dir="config/cpu/sparc/sparc32"
-        ;;
-      *)
-        cpu_include_dir="config/cpu/generic"
-        ;;
-    esac
-    AC_MSG_RESULT($cpu_include_dir)
-])
-
-dnl Check to see what OS we are compiling for. Also, if os-specific flags 
-dnl are required for compilation, add them here.
+dnl Check to see what architecture and operating system we are compiling
+dnl for.  Also, if architecture- or OS-specific flags are required for
+dnl compilation, pick them up here.
 dnl 
-dnl GLIBCPP_CHECK_OS
-AC_DEFUN(GLIBCPP_CHECK_OS, [
-    AC_MSG_CHECKING([for os config directory])
-# Currently unused, but could be useful.
-#    OS_FLAGS=
-    case "${target_os}" in
-      aix*)
-        os_include_dir="config/os/aix"
-        ;;
-      bsd* | freebsd*)
-        os_include_dir="config/os/bsd"
-        ;;
-      linux*)
-        os_include_dir="config/os/gnu-linux"
-        ;;
-      irix*)
-        os_include_dir="config/os/irix"
-        ;;
-      solaris2.5*)
-        os_include_dir="config/os/solaris/solaris2.5"
-        ;;
-      solaris2.6*)
-        os_include_dir="config/os/solaris/solaris2.6"
-        ;;
-      solaris2.7* | solaris2.8*)
-        os_include_dir="config/os/solaris/solaris2.7"
-        ;;
-      *)
-        os_include_dir="config/os/generic"
-        ;;
-    esac
-    AC_MSG_RESULT($os_include_dir)
-    AC_LINK_FILES($os_include_dir/bits/os_defines.h, bits/os_defines.h)
-])
-
-
-dnl
-dnl Check to see what the underlying c library's interface to ctype looks
-dnl like. Bits of locale rely on things like isspace, toupper, etc. This
-dnl stuff makes sure the right bits from the clibrary get called.
-dnl 
-dnl Depending on what is found, select various configure/*/bits/ctype_base.h 
-dnl Depending on what is found, select various configure/*/ctype.cc
-dnl
-dnl GLIBCPP_CHECK_CTYPE
-AC_DEFUN(GLIBCPP_CHECK_CTYPE, [
-  AC_CHECK_HEADER(ctype.h, [
-    
-    dnl If doesn't match any specified, go with defaults.
-    ctype_default=yes
-
-    dnl Test for <ctype> functionality -- GNU/Linux
-    AC_MSG_CHECKING([<ctype> for GNU/Linux])
-    AC_TRY_COMPILE([#include <ctype.h>],
-    [int
-    foo (int a)
-    { return _ISspace + _ISprint + _IScntrl + _ISupper + _ISlower + _ISalpha \
-        + _ISdigit + _ISpunct + _ISxdigit + _ISalnum + _ISgraph \
-        + __ctype_tolower[a] + __ctype_toupper[a] + __ctype_b[a];}], \
-    ctype_linux=yes, ctype_linux=no)
-    AC_MSG_RESULT($ctype_linux)
-    if test $ctype_linux = "yes"; then
-      ctype_include_dir="config/os/gnu-linux"
-      ctype_default=no
-    fi
-
-    dnl Test for <ctype> functionality -- FreeBSD 4.0
-    if test $ctype_default = "yes"; then
-    AC_MSG_CHECKING([<ctype> for FreeBSD 4.0])
-    AC_TRY_COMPILE([#include <ctype.h>],
-    [int
-    foo (int a)
-    { return _CTYPE_S + _CTYPE_R + _CTYPE_C + _CTYPE_U + _CTYPE_L + _CTYPE_A \
-        + _CTYPE_D + _CTYPE_P + _CTYPE_X + _CTYPE_G ;}], \
-    ctype_bsd=yes, ctype_bsd=no)
-    AC_MSG_RESULT($ctype_bsd)
-    if test $ctype_bsd = "yes"; then
-      ctype_include_dir="config/os/bsd"
-      ctype_default=no
-    fi
-    fi
-
-    dnl Test for <ctype> functionality -- FreeBSD 3.4
-    if test $ctype_default = "yes"; then
-    AC_MSG_CHECKING([<ctype> for FreeBSD 3.4])
-    AC_TRY_COMPILE([#include <ctype.h>],
-    [int
-    foo (int a)
-    { return _S + _R + _C + _U + _L + _A \
-      + _D + _P + _X + _G + __istype (a, 0);}], \
-    ctype_freebsd34=yes, ctype_freebsd34=no)
-    AC_MSG_RESULT($ctype_freebsd34)
-    if test $ctype_freebsd34 = "yes"; then
-      ctype_include_dir="config/os/bsd"
-      ctype_default=no
-    fi
-    fi
-
-    dnl Test for <ctype> functionality -- Solaris 2.6 and up
-    if test $ctype_default = "yes"; then
-    AC_MSG_CHECKING([<ctype> for Solaris 2.6,7,8])
-    AC_TRY_COMPILE([#include <ctype.h>],
-    [int
-    foo (int a)
-    { return _ISSPACE + _ISPRINT + _ISCNTRL + _ISUPPER + _ISLOWER + _ISALPHA \
-        + _ISDIGIT + _ISPUNCT + _ISXDIGIT + _ISALNUM + _ISGRAPH \
-        + __trans_lower[a] + __trans_upper[a] + __ctype_mask[a];}], \
-    ctype_solaris=yes, ctype_solaris=no)
-    AC_MSG_RESULT($ctype_solaris)
-
-    if test $ctype_solaris = "yes"; then
-      AC_MSG_CHECKING([  for version])
-      AC_LANG_CPLUSPLUS 
-      AC_TRY_COMPILE([#include <ctype.h>],
-      [typedef long* __to_type; __to_type const& _M_toupper = __trans_upper;],\
-      ctype_solaris26=yes, ctype_solaris26=no)
-      AC_LANG_C
-      if test $ctype_solaris26 = "yes"; then
-        ctype_include_dir="config/os/solaris/solaris2.6"
-        AC_MSG_RESULT([Solaris 2.6])
-        ctype_default=no
-      else
-        ctype_include_dir="config/os/solaris/solaris2.7"
-        AC_MSG_RESULT([Solaris 7,8])
-        ctype_default=no
-      fi
-    fi
-    fi  
-
-    dnl Test for <ctype> functionality -- Solaris 2.5.1
-    if test $ctype_default = "yes"; then
-    AC_MSG_CHECKING([<ctype> for Solaris 2.5.1])
-    AC_TRY_COMPILE([#include <ctype.h>],
-    [int
-    foo (int a)
-    { return _U + _L + _N + _S + _P + _C + _X + _B \
-        + __ctype[a];}], \
-    ctype_solaris25=yes, ctype_solaris25=no)
-    AC_MSG_RESULT($ctype_solaris25)
-    if test $ctype_solaris25 = "yes"; then
-      ctype_include_dir="config/os/solaris/solaris2.5"
-      ctype_default=no
-    fi
-    fi
-
-    dnl Test for <ctype> functionality -- AIX
-    if test $ctype_default = "yes"; then
-    AC_MSG_CHECKING([<ctype> for AIX])
-    AC_TRY_COMPILE([#include <ctype.h>],
-    [int
-    foo (int a)
-    { return _ISSPACE + _ISPRINT + _ISCNTRL + _ISUPPER + _ISLOWER + _ISALPHA \
-        + _ISDIGIT + _ISPUNCT + _ISXDIGIT + _ISALNUM + _ISGRAPH \
-        + _VALC('a') + _IS('c', 0);}], \
-    ctype_aix=yes, ctype_aix=no)
-    AC_MSG_RESULT($ctype_aix)
-    if test $ctype_aix = "yes"; then
-      ctype_include_dir="config/os/aix"
-      ctype_default=no
-    fi
-    fi
-
-    dnl Test for <ctype> functionality -- newlib
-    if test $ctype_default = "yes"; then
-    AC_MSG_CHECKING([<ctype> for newlib])
-    AC_TRY_COMPILE([#include <ctype.h>],
-    [int
-    foo (int a)
-    { return _U + _L + _N + _S + _P + _C + _X + _B \
-        + _ctype_[a];}], \
-    ctype_newlib=yes, ctype_newlib=no)
-    AC_MSG_RESULT($ctype_newlib)
-    if test $ctype_newlib = "yes"; then
-      ctype_include_dir="config/newlib"
-      ctype_default=no
-    fi
-    fi
-
-    if test $ctype_default = "yes"; then
-      ctype_include_dir="config/os/generic"
-      AC_MSG_WARN("Using default ctype headers.")
-    fi
-
-    AC_LINK_FILES($ctype_include_dir/bits/ctype_base.h, bits/ctype_base.h)
-    AC_LINK_FILES($ctype_include_dir/bits/ctype_inline.h, bits/ctype_inline.h)
-    AC_LINK_FILES($ctype_include_dir/bits/ctype_noninline.h, \
-    bits/ctype_noninline.h)
-  ])
+dnl GLIBCPP_CHECK_TARGET
+AC_DEFUN(GLIBCPP_CHECK_TARGET, [
+    . [$]{glibcpp_basedir}/configure.target
+    AC_MSG_RESULT(CPU config directory is $cpu_include_dir)
+    AC_MSG_RESULT(OS config directory is $os_include_dir)
+    AC_LINK_FILES($os_include_dir/bits/os_defines.h, include/bits/os_defines.h)
 ])
 
 
@@ -935,168 +770,111 @@ dnl If --disable-c-mbchar was given, no wchar_t stuff is enabled.  (This
 dnl must have been previously checked.)
 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 HAVE_MBSTATE_T if mbstate_t is not in wchar.h
 dnl
 dnl GLIBCPP_CHECK_WCHAR_T_SUPPORT
 AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
-  if test x$enable_c_mbchar != xno; then
-
-    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
+  dnl others even if wchar_t support is not on.
+  AC_MSG_CHECKING([for mbstate_t])
+  AC_TRY_COMPILE([#include <wchar.h>],
+  [mbstate_t teststate;], 
+  have_mbstate_t=yes, have_mbstate_t=no)
+  AC_MSG_RESULT($have_mbstate_t)
+  if test x"$have_mbstate_t" = xyes; then
+    AC_DEFINE(HAVE_MBSTATE_T)
+  fi
+
+  dnl Sanity check for existence of ISO C99 headers for extended encoding.
+  AC_CHECK_HEADERS(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 Test wchar.h for mbstate_t, which is needed for char_traits
-      dnl 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)
+  dnl Only continue checking if the ISO C99 headers exist and support is on.
+  if test x"$ac_has_wchar_h" = xyes &&
+     test x"$ac_has_wctype_h" = xyes &&
+     test x"$enable_c_mbchar" != xno; then
+      
+    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)
     
-      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 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 \
-      wcsrtombs mbsrtowcs, 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 Tests for wide character functions used in char_traits<wchar_t>.
+    ac_wfuncs=yes
+    AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset,, \
+    ac_wfuncs=no)
   
-      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_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
-      AC_CHECK_FUNCS(iconv_open iconv_close iconv nl_langinfo, \
-      ac_XPG2funcs=yes, ac_XPG2funcs=no)
+    dnl Checks for names injected into std:: by the c_std headers.
+    AC_CHECK_FUNCS(btowc wctob fgetwc fgetwc fgetws fputwc fputws fwide \
+    fwprintf fwscanf swprintf swscanf vfwprintf vfwscanf vswprintf vswscanf \
+    vwprintf vwscanf wprintf wscanf getwc getwchar mbsinit mbrlen mbrtowc \
+    mbsrtowcs wcsrtombs putwc putwchar ungetwc wcrtomb wcstod wcstof wcstol \
+    wcstoul wcscpy wcsncpy wcscat wcsncat wcscmp wcscoll wcsncmp wcsxfrm \
+    wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr,, \
+    ac_wfuncs=no)
+
+    AC_MSG_CHECKING([for ISO C99 wchar_t support])
+    if test x"$has_weof" = xyes &&
+       test x"$has_wchar_minmax" = xyes &&
+       test x"$ac_wfuncs" = xyes; then
+      ac_isoC99_wchar_t=yes
+    else
+      ac_isoC99_wchar_t=no
+    fi
+    AC_MSG_RESULT($ac_isoC99_wchar_t)
   
-      AC_MSG_CHECKING([for XPG2 wchar_t support])
-      if test x"$ac_has_iconv_h" = xyes && test x"$ac_has_langinfo_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 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_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
+
+    dnl Check for existence of libiconv.a providing XPG2 wchar_t support.
+    AC_CHECK_LIB(iconv, iconv, libiconv="-liconv")
+    ac_save_LIBS="$LIBS"
+    LIBS="$LIBS $libiconv"
+
+    AC_CHECK_FUNCS(iconv_open iconv_close iconv nl_langinfo, \
+    ac_XPG2funcs=yes, ac_XPG2funcs=no)
   
-      dnl At the moment, only enable wchar_t specializations if all the
-      dnl above support is present.
-      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)
+    LIBS="$ac_save_LIBS"
+
+    AC_MSG_CHECKING([for XPG2 wchar_t support])
+    if test x"$ac_has_iconv_h" = xyes &&
+       test x"$ac_has_langinfo_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.
+    AC_MSG_CHECKING([for enabled wchar_t specializations])
+    if test x"$ac_isoC99_wchar_t" = xyes &&
+       test x"$ac_XPG2_wchar_t" = xyes; then
+      AC_DEFINE(_GLIBCPP_USE_WCHAR_T)
+      AC_MSG_RESULT("yes")
     else
-      AC_MSG_WARN([<wchar.h> not found])
-      AC_DEFINE(_GLIBCPP_NEED_MBSTATE_T)
+      AC_MSG_RESULT("no")
     fi
-
   else
-    dnl Wide characters disabled by the user.  Maybe print a warning?
-    :
-  fi
-])
-
-
-dnl
-dnl Check to see if this version of GNU C++ is afflicted by bugs in
-dnl __complex__ float support.
-dnl
-dnl Define _GLIBCPP_BUGGY_FLOAT_COMPLEX if buggy.
-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 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
-    AC_LANG_CPLUSPLUS
-    rm -f conftest.h
-    cat > conftest.h <<EOB
-      //
-      // Check for buggy __complex__ that causes ICE in most versions of egcs
-      // and gcc-2.95.x on certain platforms (eg., x86-win32).
-      //
-      // See http://egcs.cygnus.com/ml/gcc-bugs/1999-07/msg00845.html for
-      // more info on the bug itself.
-      //
-      struct
-      float_complex
-      {
-       __complex__ float m_value;
-       float_complex (float = 0.0f, float = 0.0f);
-       float_complex (__complex__ float val) : m_value (val) {}
-       float_complex foo (const float_complex &val)
-         { return float_complex (~val.m_value); }
-      };
-EOB
-    AC_TRY_COMPILE([#include "conftest.h"], ,
-      glibcpp_cv_float_complex=ok,
-      glibcpp_cv_float_complex=buggy
-    )
-    AC_LANG_RESTORE
-  ])
-  AC_MSG_RESULT($glibcpp_cv_float_complex)
-  if test $glibcpp_cv_float_complex = buggy; then
-    AC_DEFINE(_GLIBCPP_BUGGY_FLOAT_COMPLEX)
+    dnl Wide characters disabled by the user. 
+    AC_MSG_WARN([wchar_t support disabled.])
   fi
 ])
 
@@ -1105,7 +883,7 @@ dnl
 dnl Check for special debugging mode; not for production use.
 dnl
 dnl GLIBCPP_ENABLE_DEBUG
-dnl --enable-debug sets '-ggdb -O0'.
+dnl --enable-debug sets '-ggdb3 -O0'.
 dnl --disable-debug sets '-g' and whatever optimization options the
 dnl     compiler can handle.
 dnl  +  --enable-maintainer-mode automatically defaults this to on.
@@ -1129,8 +907,8 @@ enable_debug=GLIBCPP_ENABLE_DEBUG_DEFAULT)dnl
 dnl Option parsed, now set things appropriately
 case "${enable_debug}" in
     yes) 
-        DEBUG_FLAGS='-O0 -ggdb'                        
-        ;;
+        DEBUG_FLAGS='-O0 -ggdb3'                        
+        ;; 
     no)   
         DEBUG_FLAGS='-g'
         ;;
@@ -1148,9 +926,9 @@ dnl     experimental flags such as -fhonor-std, -fsquangle, -Dfloat=char, etc.
 dnl     Somehow this same set of flags must be passed when [re]building
 dnl     libgcc.
 dnl --disable-cxx-flags passes nothing.
-dnl  +  See http://sourceware.cygnus.com/ml/libstdc++/2000-q2/msg00131.html
-dnl         http://sourceware.cygnus.com/ml/libstdc++/2000-q2/msg00284.html
-dnl         http://sourceware.cygnus.com/ml/libstdc++/2000-q1/msg00035.html
+dnl  +  See http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00131.html
+dnl         http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00284.html
+dnl         http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00035.html
 dnl  +  Usage:  GLIBCPP_ENABLE_CXX_FLAGS(default flags)
 dnl       If "default flags" is an empty string (or "none"), the effect is
 dnl       the same as --disable or --enable=no.
@@ -1194,31 +972,77 @@ AC_SUBST(EXTRA_CXX_FLAGS)
 
 
 dnl
+dnl Check for which locale library to use:  gnu or generic.
+dnl
+dnl GLIBCPP_ENABLE_CLOCALE
+dnl --enable-clocale=gnu sets config/c_locale_gnu.cc and friends
+dnl --enable-clocale=generic sets config/c_locale_generic.cc and friends
+dnl 
+dnl default is generic
+dnl
+AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
+  AC_MSG_CHECKING([for clocale to use])
+  AC_ARG_ENABLE(clocale,
+  [  --enable-clocale        enable model for target locale package. 
+  --enable-clocale=MODEL  use MODEL target-speific locale package. [default=generic]
+  ], 
+  if test x$enable_clocale = xno; then
+     enable_clocale=generic
+  fi,
+     enable_clocale=generic)
+
+  enable_clocale_flag=$enable_clocale
+
+  dnl Check if a valid locale package
+  case x${enable_clocale_flag} in
+    xgnu)
+      CLOCALE_H=config/c_locale_gnu.h
+      CLOCALE_CC=config/c_locale_gnu.cc
+      AC_MSG_RESULT(gnu)
+      ;;
+    xgeneric)
+      CLOCALE_H=config/c_locale_generic.h
+      CLOCALE_CC=config/c_locale_generic.cc
+      AC_MSG_RESULT(generic)
+      ;;
+    *)
+      echo "$enable_clocale is an unknown locale package" 1>&2
+      exit 1
+      ;;
+  esac
+
+  AC_LINK_FILES($CLOCALE_H, include/bits/c++locale.h)
+  AC_LINK_FILES($CLOCALE_CC, src/c++locale.cc)
+])
+
+
+dnl
 dnl Check for which I/O library to use:  libio, or something specific.
 dnl
 dnl GLIBCPP_ENABLE_CSTDIO
 dnl --enable-cstdio=libio sets config/c_io_libio.h and friends
 dnl 
-dnl default is libio
+dnl default is stdio
 dnl
 AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
   AC_MSG_CHECKING([for cstdio to use])
   AC_ARG_ENABLE(cstdio,
-  [  --enable-cstdio        enable GNU libio for target io package. (default)
-     --enable-cstdio=LIB    use LIB target-speific io package.], 
+  [  --enable-cstdio         enable stdio for target io package. 
+  --enable-cstdio=LIB     use LIB target-speific io package. [default=stdio]
+  ], 
   if test x$enable_cstdio = xno; then
-     enable_cstdio=libio
+     enable_cstdio=stdio
   fi,
-     enable_cstdio=libio)
+     enable_cstdio=stdio)
 
   enable_cstdio_flag=$enable_cstdio
 
   dnl Check if a valid I/O package
   case x${enable_cstdio_flag} in
-    xlibio | x | xno | xnone | xyes)
-      # default
+    xlibio)
       CSTDIO_H=config/c_io_libio.h
-      CSTDIO_CC=config/c_io_libio.cc
+      BASIC_FILE_H=config/basic_file_libio.h
+      BASIC_FILE_CC=config/basic_file_libio.cc
       AC_MSG_RESULT(libio)
 
       # see if we are on a system with libio native (ie, linux)
@@ -1247,11 +1071,9 @@ AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
 
         if test x$glibc_satisfactory = x"yes"; then
            need_libio=no
-           need_xtra_libio=no
            need_wlibio=no        
         else
            need_libio=yes
-           need_xtra_libio=yes
            # bkoz XXX need to add checks to enable this
            # pme XXX here's a first pass at such a check
            if test x$enable_c_mbchar != xno; then
@@ -1261,10 +1083,9 @@ AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
            fi
         fi
 
-      # Using libio, but <libio.h> doesn't exist on the target system. . .
       else
+         # Using libio, but <libio.h> doesn't exist on the target system. . .
          need_libio=yes
-         need_xtra_libio=no
          # bkoz XXX need to add checks to enable this
          # pme XXX here's a first pass at such a check
          if test x$enable_c_mbchar != xno; then
@@ -1274,130 +1095,289 @@ AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
          fi
       fi
       ;;
+    xstdio | x | xno | xnone | xyes)
+      # default
+      CSTDIO_H=config/c_io_stdio.h
+      BASIC_FILE_H=config/basic_file_stdio.h
+      BASIC_FILE_CC=config/basic_file_stdio.cc
+      AC_MSG_RESULT(stdio)
 
-    xwince)
-      CSTDIO_H=config/c_io_wince.h
-      CSTDIO_CC=config/c_io_wince.cc
-      AC_MSG_RESULT(wince)
-
+      # We're not using stdio.
       need_libio=no
+      need_wlibio=no
       ;;
     *)
       echo "$enable_cstdio is an unknown io package" 1>&2
       exit 1
       ;;
   esac
-  AC_LINK_FILES($CSTDIO_H, bits/c++io.h)
-  AC_LINK_FILES($CSTDIO_CC, src/c++io.cc)
+  AC_LINK_FILES($CSTDIO_H, include/bits/c++io.h)
+  AC_LINK_FILES($BASIC_FILE_H, include/bits/basic_file_model.h)
+  AC_LINK_FILES($BASIC_FILE_CC, src/basic_file.cc)
 
   # 2000-08-04 bkoz hack
   CCODECVT_C=config/c_io_libio_codecvt.c
   AC_LINK_FILES($CCODECVT_C, libio/c_codecvt.c)
   # 2000-08-04 bkoz hack
 
+  AM_CONDITIONAL(GLIBCPP_BUILD_LIBIO,
+                 test "$need_libio" = yes || test "$need_wlibio" = yes)
   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)
+  if test "$need_libio" = yes || test "$need_wlibio" = yes; then
+    libio_la=../libio/libio.la
+  else
+    libio_la=
+  fi
+  AC_SUBST(libio_la)
 ])
 
 
 dnl
-dnl Check for which threading library to use.
-dnl
-dnl GLIBCPP_ENABLE_THREADS
-dnl --enable-threads=posix sets config/threads-posix.h et. al.
-dnl 
-dnl Default is no threads, which also disables _IO_MTSAFE_IO in
-dnl libio.  Any actual thread package will enable it.
+dnl Setup to use the gcc gthr.h thread-specific memory and mutex model.
+dnl We must stage the required headers so that they will be installed
+dnl with the library (unlike libgcc, the STL implementation is provided
+dnl solely within headers).  Since we must not inject random user-space
+dnl macro names into user-provided C++ code, we first stage into <file>-in
+dnl and process to <file> with an output command.  The reason for a two-
+dnl stage process here is to correctly handle $srcdir!=$objdir without
+dnl having to write complex code (the sed commands to clean the macro
+dnl namespace are complex and fragile enough as it is).  We must also
+dnl add a relative path so that -I- is supported properly.
 dnl
 AC_DEFUN(GLIBCPP_ENABLE_THREADS, [
-  dnl Note this comes from the gcc/config.in and libjava/config.in
-  dnl Efforts should be made to keep this in sync.
-  AC_MSG_CHECKING([for threads package to use])
-  AC_ARG_ENABLE(threads,
-  [  --enable-threads        enable thread usage for target GCC.
-     --enable-threads=LIB    use LIB thread package for target GCC.],
-  if test x$enable_threads = xno; then
-    enable_threads=''
-  fi,
-    enable_threads='')
-
-  enable_threads_flag=$enable_threads
-
-  dnl Check if a valid thread package
-  case x${enable_threads_flag} in
-        x | xno | xnone)
-                # No threads
-                target_thread_file='single'
-                ;;
-        xyes)
-                # default
-                target_thread_file=''
-                ;;
-        xdecosf1 | xirix | xmach | xos2 | xposix | xpthreads | xsingle | \
-        xsolaris | xwin32 | xdce | xvxworks)
-                target_thread_file=$enable_threads_flag
-                ;;
-        *)
-                echo "$enable_threads is an unknown thread package" 1>&2
-                exit 1
-                ;;
-  esac
+  AC_MSG_CHECKING([for thread model used by GCC])
+  target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
+  AC_MSG_RESULT([$target_thread_file])
+
+  AC_LINK_FILES($toprel/gcc/gthr.h, include/bits/gthr.h-in)
+  AC_LINK_FILES($toprel/gcc/gthr-single.h,
+               include/bits/gthr-single.h-in)
+  AC_LINK_FILES($toprel/gcc/gthr-$target_thread_file.h,
+               include/bits/gthr-default.h-in)
+  if test $target_thread_file != single; then
+    AC_DEFINE(HAVE_GTHR_DEFAULT)
+    AC_DEFINE(_GLIBCPP_SUPPORTS_WEAK, __GXX_WEAK__)
+  fi
+  AC_OUTPUT_COMMANDS([d=include/bits
+    rm -f $d/gthr.h $d/gthr-single.h $d/gthr-default.h
+    sed '/^#/s/\([A-Z_][A-Z_]*\)/_GLIBCPP_\1/g' <$d/gthr.h-in \
+      | sed 's,"gthr-,"bits/gthr-,' >$d/gthr.h
+    sed 's/\(UNUSED\)/_GLIBCPP_\1/g' <$d/gthr-single.h-in \
+      | sed 's/\(GCC[A-Z_]*_H\)/_GLIBCPP_\1/g' >$d/gthr-single.h
+    sed 's/\(UNUSED\)/_GLIBCPP_\1/g' <$d/gthr-default.h-in \
+      | sed 's/\(GCC[A-Z_]*_H\)/_GLIBCPP_\1/g' \
+      | sed 's/\([A-Z_]*WEAK\)/_GLIBCPP_\1/g' >$d/gthr-default.h])
+])
 
-  dnl Check for thread package actually supported in libstdc++ 
-  THREADH=
-  case "$target_thread_file" in
-    no | none | single)
-      THREADH=threads-no.h
-      ;;
-    posix | pthreads)
-      THREADH=threads-posix.h
-      ;;
-    decosf1 | irix | mach | os2 | solaris | win32 | dce | vxworks)
-      AC_MSG_ERROR(thread package $THREADS not yet supported)
-      ;;
-    *)
-      AC_MSG_ERROR($THREADS is an unknown thread package)
-      ;;
-  esac
-  AC_MSG_RESULT($THREADH)
 
-  AC_LINK_FILES(config/$THREADH, bits/c++threads.h)
-  if test $THREADH != threads-no.h; then
-    AC_DEFINE(_GLIBCPP_USE_THREADS)
-  fi
+dnl
+dnl Check for exception handling support.  If an explicit enable/disable
+dnl sjlj exceptions is given, we don't have to detect.  Otherwise the
+dnl target may or may not support call frame exceptions.
+dnl
+dnl GLIBCPP_ENABLE_SJLJ_EXCEPTIONS
+dnl --enable-sjlj-exceptions forces the use of builtin setjmp.
+dnl --disable-sjlj-exceptions forces the use of call frame unwinding.
+dnl
+dnl Define _GLIBCPP_SJLJ_EXCEPTIONS if the compiler is configured for it.
+dnl
+AC_DEFUN(GLIBCPP_ENABLE_SJLJ_EXCEPTIONS, [
+  AC_MSG_CHECKING([for exception model to use])
+  AC_LANG_SAVE
+  AC_LANG_CPLUSPLUS
+  AC_ARG_ENABLE(sjlj-exceptions,
+  [  --enable-sjlj-exceptions  force use of builtin_setjmp for exceptions],
+  [:],
+  [dnl Botheration.  Now we've got to detect the exception model.
+   dnl Link tests against libgcc.a are problematic since -- at least
+   dnl as of this writing -- we've not been given proper -L bits for
+   dnl single-tree newlib and libgloss.
+   dnl
+   dnl This is what AC_TRY_COMPILE would do if it didn't delete the
+   dnl conftest files before we got a change to grep them first.
+   cat > conftest.$ac_ext << EOF
+[#]line __oline__ "configure"
+struct S { ~S(); };
+void bar();
+void foo()
+{
+  S s;
+  bar();
+}
+EOF
+   old_CXXFLAGS="$CXXFLAGS"  
+   CXXFLAGS=-S
+   if AC_TRY_EVAL(ac_compile); then
+     if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
+       enable_sjlj_exceptions=yes
+     elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
+       enable_sjlj_exceptions=no
+     fi
+   fi
+   CXXFLAGS="$old_CXXFLAGS"
+   rm -f conftest*])
+   if test x$enable_sjlj_exceptions = xyes; then
+     AC_DEFINE(_GLIBCPP_SJLJ_EXCEPTIONS, 1,
+        [Define if the compiler is configured for setjmp/longjmp exceptions.])
+     ac_exception_model_name=sjlj
+   elif test x$enable_sjlj_exceptions = xno; then
+     ac_exception_model_name="call frame"
+   else
+     AC_MSG_ERROR([unable to detect exception model])
+   fi
+   AC_LANG_RESTORE
+   AC_MSG_RESULT($ac_exception_model_name)
 ])
 
 
-dnl Enable atomic locking
-dnl GLIBCPP_ENABLE_ATOMICITY
-AC_DEFUN(GLIBCPP_ENABLE_ATOMICITY, [
-    AC_MSG_CHECKING([for atomicity.h])
-    case "$target" in
-      *-*-linux* | sparc*-*-*)
-        ATOMICITYH=$cpu_include_dir
-        ;;    
-      *-*-aix*)
-        ATOMICITYH=$os_include_dir
-        ;;
-      *)
-        # bit of overkill on this text...
-        AC_MSG_ERROR([Atomic locking requested, but $enable_threads is an unknown thread package and atomic operations are not present in the CPU])
-        ;;
-    esac
-    AC_MSG_RESULT($ATOMICITYH/bits/atomicity.h)
-    AC_LINK_FILES($ATOMICITYH/bits/atomicity.h, bits/atomicity.h)
+dnl
+dnl Check for ISO/IEC 9899:1999 "C99" support.
+dnl
+dnl GLIBCPP_ENABLE_C99
+dnl --enable-c99 defines _GLIBCPP_USE_C99
+dnl --disable-c99 leaves _GLIBCPP_USE_C99 undefined
+dnl  +  Usage:  GLIBCPP_ENABLE_C99[(DEFAULT)]
+dnl       Where DEFAULT is either `yes' or `no'.  If omitted, it
+dnl       defaults to `no'.
+dnl  +  If 'C99' stuff is not available, ignores DEFAULT and sets `no'.
+dnl
+dnl GLIBCPP_ENABLE_C99
+AC_DEFUN(GLIBCPP_ENABLE_C99, [dnl
+  define([GLIBCPP_ENABLE_C99_DEFAULT], ifelse($1, yes, yes, no))dnl
+
+  AC_ARG_ENABLE(c99,
+  changequote(<<, >>)dnl
+  <<--enable-c99      turns on 'ISO/IEC 9899:1999 support' [default=>>GLIBCPP_ENABLE_C99_DEFAULT],
+  changequote([, ])dnl
+  [case "$enableval" in
+   yes) enable_c99=yes ;;
+   no)  enable_c99=no ;;
+   *)   AC_MSG_ERROR([Unknown argument to enable/disable C99]) ;;
+   esac],
+  enable_c99=GLIBCPP_ENABLE_C99_DEFAULT)dnl
+  AC_LANG_SAVE
+  AC_LANG_CPLUSPLUS
+
+  # Check for the existence of <math.h> functions used if C99 is enabled.
+  ac_c99_math=yes;
+  AC_MSG_CHECKING([for ISO C99 support in <math.h>])
+  AC_TRY_COMPILE([#include <math.h>],[fpclassify(0.0);],, [ac_c99_math=no])
+  AC_TRY_COMPILE([#include <math.h>],[isfinite(0.0);],, [ac_c99_math=no])
+  AC_TRY_COMPILE([#include <math.h>],[isinf(0.0);],, [ac_c99_math=no])
+  AC_TRY_COMPILE([#include <math.h>],[isnan(0.0);],, [ac_c99_math=no])
+  AC_TRY_COMPILE([#include <math.h>],[isnormal(0.0);],, [ac_c99_math=no])
+  AC_TRY_COMPILE([#include <math.h>],[signbit(0.0);],, [ac_c99_math=no])
+  AC_TRY_COMPILE([#include <math.h>],[isgreater(0.0,0.0);],, [ac_c99_math=no])
+  AC_TRY_COMPILE([#include <math.h>],
+                 [isgreaterequal(0.0,0.0);],, [ac_c99_math=no])
+  AC_TRY_COMPILE([#include <math.h>],[isless(0.0,0.0);],, [ac_c99_math=no])
+  AC_TRY_COMPILE([#include <math.h>],[islessequal(0.0,0.0);],,[ac_c99_math=no])
+  AC_TRY_COMPILE([#include <math.h>],
+                [islessgreater(0.0,0.0);],, [ac_c99_math=no])
+  AC_TRY_COMPILE([#include <math.h>],
+                [isunordered(0.0,0.0);],, [ac_c99_math=no])
+  AC_MSG_RESULT($ac_c99_math)
+
+  # Check for the existence in <stdio.h> of vscanf, et. al.
+  ac_c99_stdio=yes;
+  AC_MSG_CHECKING([for ISO C99 support in <stdio.h>])
+  AC_TRY_COMPILE([#include <stdio.h>],
+                [snprintf("12", 0, "%i");],, [ac_c99_stdio=no])
+  AC_TRY_COMPILE([#include <stdio.h>
+                 #include <stdarg.h>
+                 void foo(char* fmt, ...)
+                 {va_list args; va_start(args, fmt);
+                 vfscanf(stderr, "%i", args);}],
+                 [],, [ac_c99_stdio=no])
+  AC_TRY_COMPILE([#include <stdio.h>
+                 #include <stdarg.h>
+                 void foo(char* fmt, ...)
+                 {va_list args; va_start(args, fmt);
+                 vscanf("%i", args);}],
+                 [],, [ac_c99_stdio=no])
+  AC_TRY_COMPILE([#include <stdio.h>
+                 #include <stdarg.h>
+                 void foo(char* fmt, ...)
+                 {va_list args; va_start(args, fmt);
+                 vsnprintf(fmt, 0, "%i", args);}],
+                 [],, [ac_c99_stdio=no])
+  AC_TRY_COMPILE([#include <stdio.h>
+                 #include <stdarg.h>
+                 void foo(char* fmt, ...)
+                 {va_list args; va_start(args, fmt);
+                 vsscanf(fmt, "%i", args);}],
+                 [],, [ac_c99_stdio=no])
+  AC_MSG_RESULT($ac_c99_stdio)
+
+  # Check for the existence in <stdlib.h> of lldiv_t, et. al.
+  ac_c99_stdlib=yes;
+  AC_MSG_CHECKING([for lldiv_t declaration])
+  AC_CACHE_VAL(ac_c99_lldiv_t, [
+  AC_TRY_COMPILE([#include <stdlib.h>], 
+                   [ lldiv_t mydivt;], 
+                   [ac_c99_lldiv_t=yes], [ac_c99_lldiv_t=no])
+  ])
+  AC_MSG_RESULT($ac_c99_lldiv_t)
+
+  AC_MSG_CHECKING([for ISO C99 support in <stdlib.h>])
+  AC_TRY_COMPILE([#include <stdlib.h>],
+                [char* tmp; strtof("gnu", &tmp);],, [ac_c99_stdlib=no])
+  AC_TRY_COMPILE([#include <stdlib.h>],
+                [char* tmp; strtold("gnu", &tmp);],, [ac_c99_stdlib=no])
+  AC_TRY_COMPILE([#include <stdlib.h>],
+                [char* tmp; strtoll("gnu", &tmp, 10);],, [ac_c99_stdlib=no])
+  AC_TRY_COMPILE([#include <stdlib.h>],
+                [char* tmp; strtoull("gnu", &tmp, 10);],, [ac_c99_stdlib=no])
+  AC_TRY_COMPILE([#include <stdlib.h>], [llabs(10);],, [ac_c99_stdlib=no])
+  AC_TRY_COMPILE([#include <stdlib.h>], [lldiv(10,1);],, [ac_c99_stdlib=no])
+  AC_TRY_COMPILE([#include <stdlib.h>], [atoll("10");],, [ac_c99_stdlib=no])
+  AC_TRY_COMPILE([#include <stdlib.h>], [_Exit(0);],, [ac_c99_stdlib=no])
+  if test x"$ac_c99_lldiv_t" = x"no"; then
+    ac_c99_stdlib=no; 
+  fi; 
+  AC_MSG_RESULT($ac_c99_stdlib)
+
+  # Check for the existence of <wchar.h> functions used if C99 is enabled.
+  # XXX the wchar.h checks should be rolled into the general C99 bits.
+  ac_c99_wchar=yes;
+  AC_MSG_CHECKING([for additional ISO C99 support in <wchar.h>])
+  AC_TRY_COMPILE([#include <wchar.h>], 
+                [wcstold(L"10.0", NULL);],, [ac_c99_wchar=no])
+  AC_TRY_COMPILE([#include <wchar.h>], 
+                [wcstoll(L"10", NULL, 10);],, [ac_c99_wchar=no])
+  AC_TRY_COMPILE([#include <wchar.h>], 
+                [wcstoull(L"10", NULL, 10);],, [ac_c99_wchar=no])
+  AC_MSG_RESULT($ac_c99_wchar)
+
+  AC_MSG_CHECKING([for enabled ISO C99 support])
+  if test x"$ac_c99_math" = x"no" ||
+     test x"$ac_c99_stdio" = x"no" ||
+     test x"$ac_c99_stdlib" = x"no" ||
+     test x"$ac_c99_wchar" = x"no"; then
+    enable_c99=no; 
+  fi; 
+  AC_MSG_RESULT($enable_c99)
+
+  # Option parsed, now set things appropriately
+  if test x"$enable_c99" = x"yes"; then
+    AC_DEFINE(_GLIBCPP_USE_C99)
+  fi
+
+  AC_LANG_RESTORE
 ])
 
 
 dnl
 dnl Check for template specializations for the 'long long' type extension.
+dnl NB: Must check for C99 support before calling _GLIBCPP_ENABLE_LONG_LONG
 dnl
 dnl GLIBCPP_ENABLE_LONG_LONG
 dnl --enable-long-long defines _GLIBCPP_USE_LONG_LONG
 dnl --disable-long-long leaves _GLIBCPP_USE_LONG_LONG undefined
 dnl  +  Usage:  GLIBCPP_ENABLE_LONG_LONG[(DEFAULT)]
-dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
+dnl       Where DEFAULT is either `yes' or `no'.  If omitted, it
 dnl       defaults to `no'.
 dnl  +  If 'long long' stuff is not available, ignores DEFAULT and sets `no'.
 dnl
@@ -1416,104 +1396,67 @@ AC_DEFUN(GLIBCPP_ENABLE_LONG_LONG, [dnl
    esac],
   enable_long_long=GLIBCPP_ENABLE_LONG_LONG_DEFAULT)dnl
 
-  # Check for the existance of functions used if long long is enabled.
-  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 
+  # iostreams require strtoll, strtoull to compile. If the
+  # GLIBCPP_ENABLE_C99 tests found these, and if C99 support is enabled,
+  # go ahead and allow long long to be used.
+  if test x"$enable_c99" = x"no"; then
     enable_long_long=no; 
-  fi; 
-  AC_MSG_RESULT($enable_long_long)
+  fi
 
-  dnl Option parsed, now set things appropriately
+  # Option parsed, now set things appropriately
+  AC_MSG_CHECKING([for enabled long long support])
   if test x"$enable_long_long" = xyes; then
     AC_DEFINE(_GLIBCPP_USE_LONG_LONG)
   fi
+  AC_MSG_RESULT($enable_long_long)
 ])
 
 
 dnl
-dnl Check for template specializations for the 'long double' type extension.
-dnl
-dnl GLIBCPP_ENABLE_LONG_DOUBLE
-dnl --enable-long-long defines _GLIBCPP_USE_LONG_DOUBLE
-dnl --disable-long-long leaves _GLIBCPP_USE_LONG_DOUBLE undefined
-dnl  +  Usage:  GLIBCPP_ENABLE_LONG_DOUBLE[(DEFAULT)]
-dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
-dnl       defaults to `no'.
-dnl  +  If 'long long' stuff is not available, ignores DEFAULT and sets `no'.
-dnl
-dnl GLIBCPP_ENABLE_LONG_DOUBLE
-AC_DEFUN(GLIBCPP_ENABLE_LONG_DOUBLE, [dnl
-  define([GLIBCPP_ENABLE_LONG_DOUBLE_DEFAULT], ifelse($1, yes, yes, no))dnl
-
-  AC_ARG_ENABLE(long-double,
-  changequote(<<, >>)dnl
-  <<--enable-long-double      turns on 'long double' [default=>>GLIBCPP_ENABLE_LONG_LONG_DEFAULT],
-  changequote([, ])dnl
-  [case "$enableval" in
-   yes) enable_long_double=yes ;;
-   no)  enable_long_double=no ;;
-   *)   AC_MSG_ERROR([Unknown argument to enable/disable long double]) ;;
-   esac],
-  enable_long_double=GLIBCPP_ENABLE_LONG_DOUBLE_DEFAULT)dnl
-
-  # Check for the existance of functions used if long double is enabled.
-  AC_CHECK_FUNC(cosl,,ac_cosl=no)
-  AC_CHECK_FUNC(sinl,,ac_sinl=no)
-
-  AC_MSG_CHECKING([for enabled long double])
-  if test x"$ac_cosl" = xno || test x"$ac_sinl" = xno; then 
-    enable_long_double=no; 
-  fi; 
-  AC_MSG_RESULT($enable_long_double)
-
-  dnl Option parsed, now set things appropriately
-  if test x"$enable_long_double" = xyes; then
-    AC_DEFINE(_GLIBCPP_USE_LONG_DOUBLE)
-  fi
-])
-
-
-dnl
-dnl Check for whether or not to do shadowed C headers.
+dnl Check for what kind of C headers to use.
 dnl
-dnl GLIBCPP_ENABLE_SHADOW
-dnl --enable-cshadow-headers [does stuff].
-dnl --disable-cshadow-headers [does not do stuff].
-dnl  +  This will eventually need to be on by default.
-dnl  +  Usage:  GLIBCPP_ENABLE_SHADOW[(DEFAULT)]
-dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
-dnl       defaults to `no'.
-AC_DEFUN(GLIBCPP_ENABLE_SHADOW, [dnl
-define([GLIBCPP_ENABLE_SHADOW_DEFAULT], ifelse($1, yes, yes, no))dnl
-AC_MSG_CHECKING([for enabled cshadow headers])
-AC_ARG_ENABLE(cshadow-headers,
+dnl GLIBCPP_ENABLE_CHEADERS
+dnl --enable-cheaders= [does stuff].
+dnl --disable-cheaders [does not do anything, really].
+dnl  +  This will eventually need to be 'c_shadow' by default.
+dnl  +  Usage:  GLIBCPP_ENABLE_CHEADERS[(DEFAULT)]
+dnl       Where DEFAULT is either `c' or `c_std' or 'c_shadow'.  
+dnl       If ommitted, it defaults to `c_std'.
+AC_DEFUN(GLIBCPP_ENABLE_CHEADERS, [dnl
+define([GLIBCPP_ENABLE_CHEADERS_DEFAULT], ifelse($1, c_std, c_std, c_std))dnl
+AC_MSG_CHECKING([for c header strategy to use])
+AC_ARG_ENABLE(cheaders,
 changequote(<<, >>)dnl
-<<  --enable-cshadow-headers construct "shadowed" C header files for
-                           g++ [default=>>GLIBCPP_ENABLE_SHADOW_DEFAULT],
+<<  --enable-cheaders       construct "C" header files for g++ [default=>>GLIBCPP_ENABLE_CHEADERS_DEFAULT],
 changequote([, ])
   [case "$enableval" in
-   yes) enable_cshadow_headers=yes 
+   c) 
+        enable_cheaders=c 
+        ;;
+   c_std)  
+        enable_cheaders=c_std 
         ;;
-   no)  enable_cshadow_headers=no 
+   c_shadow)  
+        enable_cheaders=c_shadow 
         ;;
-   *)   AC_MSG_ERROR([Unknown argument to enable/disable shadowed C headers]) 
+   *)   AC_MSG_ERROR([Unknown argument to enable/disable "C" headers]) 
         ;;
   esac],
-  enable_cshadow_headers=GLIBCPP_ENABLE_SHADOW_DEFAULT)
-  AC_MSG_RESULT($enable_cshadow_headers)
+  enable_cheaders=GLIBCPP_ENABLE_CHEADERS_DEFAULT)
+  AC_MSG_RESULT($enable_cheaders)
 
   dnl Option parsed, now set things appropriately
-  dnl NB: these things may be duplicated in c++config.h as well.
-  case "$enable_cshadow_headers" in
-    yes) 
+  case "$enable_cheaders" in
+    c_shadow) 
         CSHADOW_FLAGS="-fno-builtin"
-        C_INCLUDE_DIR='${top_srcdir}/include/c_std'
+        C_INCLUDE_DIR='${top_srcdir}/include/c_shadow'
         AC_DEFINE(_GLIBCPP_USE_SHADOW_HEADERS)
         ;;
-    no)   
+    c_std)   
+        CSHADOW_FLAGS=""
+        C_INCLUDE_DIR='${top_srcdir}/include/c_std'
+        ;;
+    c)   
         CSHADOW_FLAGS=""
         C_INCLUDE_DIR='${top_srcdir}/include/c'
         ;;
@@ -1521,7 +1464,7 @@ changequote([, ])
 
   AC_SUBST(CSHADOW_FLAGS)
   AC_SUBST(C_INCLUDE_DIR)
-  AM_CONDITIONAL(GLIBCPP_USE_CSHADOW, test "$enable_cshadow_headers" = yes)
+  AM_CONDITIONAL(GLIBCPP_USE_CSHADOW, test "$enable_cheaders" = c_shadow)
 ])
 
 
@@ -1569,10 +1512,12 @@ AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
 
   # Can either use include/c or include/c_std to grab "C" headers. This
   # variable is set to the include directory currently in use.
-  # set with C_INCLUDE_DIR in GLIBCPP_ENABLE_SHADOW
+  # set with C_INCLUDE_DIR in GLIBCPP_ENABLE_CHEADERS
    
-  # Passed down for cross compilers, canadian crosses.
-  TOPLEVEL_INCLUDES='-I$(includedir)'
+  # Passed down for canadian crosses.
+  if  test x"$CANADIAN" = xyes; then
+    TOPLEVEL_INCLUDES='-I$(includedir)'
+  fi
 
   LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
 
@@ -1588,7 +1533,7 @@ AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
   #  CSHADOW_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR) \
   #                   -I$(top_blddir)/cshadow'
   #else
-  CSHADOW_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR)'
+  CSTD_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR)'
   #endif
 
   # Now, export this to all the little Makefiles....
@@ -1597,7 +1542,7 @@ AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
   AC_SUBST(LIBMATH_INCLUDES)
   AC_SUBST(LIBSUPCXX_INCLUDES)
   AC_SUBST(LIBIO_INCLUDES)
-  AC_SUBST(CSHADOW_INCLUDES)
+  AC_SUBST(CSTD_INCLUDES)
 ])
 
 
@@ -1615,6 +1560,106 @@ AC_DEFUN(GLIBCPP_EXPORT_FLAGS, [
   AC_SUBST(WARN_FLAGS)
 ])
 
+dnl
+dnl  GLIBCPP_EXPORT_INSTALL_INFO
+dnl  calculates gxx_install_dir
+dnl  exports glibcpp_toolexecdir
+dnl  exports glibcpp_toolexeclibdir
+dnl  exports glibcpp_builddir
+dnl  exports glibcpp_srcdir
+dnl  exports glibcpp_prefixdir
+dnl
+dnl Assumes cross_compiling bits already done, and with_cross_host in
+dnl particular
+dnl
+dnl GLIBCPP_EXPORT_INSTALL_INFO
+AC_DEFUN(GLIBCPP_EXPORT_INSTALL_INFO, [
+
+glibcpp_toolexecdir=no
+glibcpp_toolexeclibdir=no
+
+# Export build and source directories.
+# These need to be absolute paths, yet at the same time need to
+# canonicalize only relative paths, because then amd will not unmount
+# drives. Thus the use of PWDCMD: set it to 'pawd' or 'amq -w' if using amd.
+glibcpp_builddir=`pwd`
+case $srcdir in
+[\\/$]* | ?:[\\/]*) glibcpp_srcdir=${srcdir} ;;
+*) glibcpp_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;;
+esac
+glibcpp_prefixdir=${prefix}
+
+AC_MSG_CHECKING([for interface version number])
+libstdcxx_interface=$INTERFACE
+AC_MSG_RESULT($libstdcxx_interface)
+
+# Process the option --with-gxx-include-dir=<path to include-files directory>
+AC_MSG_CHECKING([for --with-gxx-include-dir])
+AC_ARG_WITH(gxx-include-dir,
+[  --with-gxx-include-dir  the installation directory for include files],
+[case "${withval}" in
+  yes)
+    AC_MSG_ERROR(Missing directory for --with-gxx-include-dir)
+    gxx_include_dir=no
+    ;;
+  no)
+    gxx_include_dir=no
+    ;;
+  *)
+    gxx_include_dir=${withval}
+    ;;
+esac], [gxx_include_dir=no])
+AC_MSG_RESULT($gxx_include_dir)
+
+# Process the option "--enable-version-specific-runtime-libs"
+AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
+AC_ARG_ENABLE(version-specific-runtime-libs,
+[  --enable-version-specific-runtime-libs    Specify that runtime libraries should be installed in a compiler-specific directory ],
+[  version_specific_libs=yes
+# Need the gcc compiler version to know where to install libraries
+# and header files if --enable-version-specific-runtime-libs option
+# is selected.
+changequote(,)dnl
+gcc_version_trigger=${srcdir}/../gcc/version.c
+gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^\"]*\)\".*/\1/'`
+gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'`
+gxx_include_dir='$(libdir)/gcc-lib/$(target_alias)/'${gcc_version}/include/g++
+glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
+glibcpp_toolexeclibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)'
+changequote([,])dnl
+],version_specific_libs=no)
+AC_MSG_RESULT($version_specific_libs)
+
+# Default case for install directory for include files.
+if test x"$version_specific_libs" = x"no" \
+   && test x"$gxx_include_dir" = x"no"; then
+  gxx_include_dir='$(prefix)'/include/g++-${libstdcxx_interface}
+fi
+
+# Calculate glibcpp_toolexecdir, glibcpp_toolexeclibdir
+# Install a library built with a cross compiler in tooldir, not libdir.
+if test x"$glibcpp_toolexecdir" = x"no"; then 
+  if test -n "$with_cross_host" &&
+     test x"$with_cross_host" != x"no"; then
+    glibcpp_toolexecdir='$(exec_prefix)/$(target_alias)'
+    glibcpp_toolexeclibdir='$(toolexecdir)/lib$(MULTISUBDIR)'
+  else
+    glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
+    glibcpp_toolexeclibdir='$(libdir)$(MULTISUBDIR)'
+  fi
+fi
+
+AC_MSG_CHECKING([for install location])
+AC_MSG_RESULT($gxx_include_dir)
+
+AC_SUBST(glibcpp_builddir)
+AC_SUBST(glibcpp_srcdir)
+AC_SUBST(glibcpp_prefixdir)
+AC_SUBST(gxx_include_dir)
+AC_SUBST(glibcpp_toolexecdir)
+AC_SUBST(glibcpp_toolexeclibdir)
+])
+
 
 # Check whether LC_MESSAGES is available in <locale.h>.
 # Ulrich Drepper <drepper@cygnus.com>, 1995.
@@ -1626,15 +1671,16 @@ AC_DEFUN(GLIBCPP_EXPORT_FLAGS, [
 
 # serial 1
 
-AC_DEFUN(AC_LC_MESSAGES,
-  [if test $ac_cv_header_locale_h = yes; then
+AC_DEFUN(AC_LC_MESSAGES, [
+  AC_CHECK_HEADER(locale.h, [
     AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
       [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
        ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
     if test $ac_cv_val_LC_MESSAGES = yes; then
       AC_DEFINE(HAVE_LC_MESSAGES)
     fi
-  fi])
+  ])
+])
 
 
 # Check for functions in math library.
@@ -1715,12 +1761,15 @@ dnl #### GLIBCPP_ to the macro name; adding the :-make fallback in the
 dnl #### conditional's subshell (" --version" is not a command), using a
 dnl #### different option to grep(1).
 dnl #### -pme
+dnl #### Fixed Bourne shell portability bug (use ${MAKE-make}, not
+dnl #### ${MAKE:-make}).
+dnl #### -msokolov
 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 -c GNU )
+          for a in "${MAKE-make}" make gmake gnumake ; do
+                  if ( $a --version 2> /dev/null | grep -c GNU > /dev/null )
                   then
                           _cv_gnu_make_command=$a ;
                           break;
@@ -1747,3 +1796,4 @@ AC_DEFUN([AC_LIBTOOL_DLOPEN])
 AC_DEFUN([AC_PROG_LD])
 ])
 
+