OSDN Git Service

2001-01-02 Benjamin Kosnik <bkoz@redhat.com>
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / acinclude.m4
index 54edb75..66a0bcc 100644 (file)
@@ -1,4 +1,3 @@
-
 dnl
 dnl Initialize configure bits.
 dnl
@@ -89,7 +88,14 @@ 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)
+# Use CXX_libstdcxx 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.
+CXX_libstdcxx=$CXX
+AC_CHECK_PROGS(CXX_libstdcxx, $CCC c++ g++ gcc CC cxx cc++, gcc)
+CXX=$CXX_libstdcxx
+AC_SUBST(CXX)
 test -z "$CXX" && AC_MSG_ERROR([no acceptable c++ found in \$PATH])
 
 AC_PROG_CXX_GNU
@@ -138,8 +144,8 @@ LIB_AC_PROG_CXX
   fi
 
   # configure.host sets the following important variables
-  #    glibcpp_cflags    - host specific C compiler flags
-  #    glibcpp_cxxflags  - host specific C++ compiler flags
+  #        glibcpp_cflags    - host specific C compiler flags
+  #        glibcpp_cxxflags  - host specific C++ compiler flags
   glibcpp_cflags=
   glibcpp_cxxflags=
 
@@ -150,6 +156,10 @@ LIB_AC_PROG_CXX
     *) glibcpp_flagbasedir='[$](top_builddir)/'[$]{glibcpp_basedir} ;;
   esac
 
+  # This does for the target what configure.host does for the host.  In
+  # addition to modifying the same flags, it also sets up symlinks.
+  GLIBCPP_CHECK_TARGET
+
   GLIBCPP_CFLAGS="[$]{glibcpp_cflags}"
   GLIBCPP_CXXFLAGS="[$]{glibcpp_cxxflags}"
   AC_SUBST(GLIBCPP_CFLAGS)
@@ -163,14 +173,19 @@ 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) 
+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_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"))
+  ], gpp_satisfactory=yes, AC_MSG_ERROR([please upgrade to gcc-2.95 or above]))
+  AC_LANG_RESTORE
   AC_MSG_RESULT($gpp_satisfactory)
+  touch stamp-sanity-compiler
+fi
 ])
 
 
@@ -181,8 +196,9 @@ dnl here.
 dnl
 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.  
+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.  
@@ -195,27 +211,17 @@ AC_DEFUN(GLIBCPP_CHECK_COMPILER_FEATURES, [
   AC_LANG_CPLUSPLUS
   ac_test_CXXFLAGS="${CXXFLAGS+set}"
   ac_save_CXXFLAGS="$CXXFLAGS"
-  WERROR='-Werror'
 
-  # Check for pragma system_header.
-  AC_MSG_CHECKING([for g++ that supports pragma system_header])
-  CXXFLAGS='-Wunknown-pragmas -Werror'
-  AC_TRY_COMPILE([#pragma GCC system_header], [int foo;
-  ], [ac_newpragma=yes], [ac_newpragma=no])
-  if test "$ac_test_CXXFLAGS" = set; then
-    CXXFLAGS="$ac_save_CXXFLAGS"
+  # Check for maintainer-mode bits.
+  if test x"$USE_MAINTAINER_MODE" = xno; then
+    WERROR=''
   else
-    # this is the suspicious part
-    CXXFLAGS=''
-  fi
-  if test "$ac_newpragma" = "no"; then
-    WERROR="$WERROR -Wno-unknown-pragmas"
+    WERROR='-Werror'
   fi
-  AC_MSG_RESULT($ac_newpragma)
 
   # Check for more sophisticated diagnostic control.
   AC_MSG_CHECKING([for g++ that supports -fdiagnostics-show-location=once])
-  CXXFLAGS='-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
@@ -224,14 +230,14 @@ AC_DEFUN(GLIBCPP_CHECK_COMPILER_FEATURES, [
     # this is the suspicious part
     CXXFLAGS=''
   fi
-  if test "$ac_gabydiags" = "yes"; then
+  if test x"$ac_gabydiags" = x"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='-ffunction-sections -fdata-sections'
+  CXXFLAGS='-Werror -ffunction-sections -fdata-sections'
   AC_TRY_COMPILE(, [int foo;
   ], [ac_fdsections=yes], [ac_fdsections=no])
   if test "$ac_test_CXXFLAGS" = set; then
@@ -240,7 +246,7 @@ 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)
@@ -265,12 +271,13 @@ AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
   # If we're not using GNU ld, then there's no point in even trying these
   # tests.  Check for that first.  We should have already tested for gld
   # by now (in libtool), but require it now just to be safe...
+  SECTION_LDFLAGS=''
+  OPT_LDFLAGS=''
   AC_REQUIRE([AC_PROG_LD])
-  if test "$ac_cv_prog_gnu_ld" = "no"; then
-    SECTION_LDFLAGS=''
-    OPT_LDFLAGS=''
 
-  else   # GNU ld it is!  Joy and bunny rabbits!
+  # 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++
@@ -279,6 +286,12 @@ AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
     CFLAGS='-x c++  -Wl,--gc-sections'
 
     # Check for -Wl,--gc-sections
+    # XXX This test is broken at the moment, as symbols required for
+    # linking are now in libsupc++ (not built yet.....). In addition, 
+    # this test has cored on solaris in the past. In addition,
+    # --gc-sections doesn't really work at the moment (keeps on discarding
+    # used sections, first .eh_frame and now some of the glibc sections for
+    # iconv). Bzzzzt. Thanks for playing, maybe next time.
     AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
     AC_TRY_RUN([
      int main(void) 
@@ -287,7 +300,7 @@ AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
        catch (...) { };
        return 0;
      }
-    ], [ac_sectionLDflags=yes], [ac_sectionLFflags=no], [ac_sectionLDflags=yes])
+    ], [ac_sectionLDflags=yes],[ac_sectionLFflags=no], [ac_sectionLDflags=yes])
     if test "$ac_test_CFLAGS" = set; then
       CFLAGS="$ac_save_CFLAGS"
     else
@@ -298,9 +311,13 @@ AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
       SECTION_LDFLAGS='-Wl,--gc-sections'
     fi
     AC_MSG_RESULT($ac_sectionLDflags)
-    OPT_LDFLAGS='-Wl,-O1'
+  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)
 ])
@@ -320,14 +337,16 @@ 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
-  ])
+  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_CHECK_FUNCS($1)    
@@ -349,14 +368,16 @@ 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
-  ])
+  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)
   if test x$glibcpp_cv_func_$1_use = x"yes"; then
     AC_CHECK_FUNCS($1)    
@@ -378,14 +399,48 @@ dnl
 dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3
 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3, [
   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 <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)
+  if test x$glibcpp_cv_func_$1_use = x"yes"; then
+    AC_CHECK_FUNCS($1)    
+  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 Define HAVE_STRTOLD if "strtold" is declared and links
+dnl Define HAVE_STRTOF if "strtof" 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_STDLIB_DECL_AND_LINKAGE_2
+AC_DEFUN(GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_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 <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 +464,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 +560,29 @@ 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_STRTOF etc if "strtof" is found.
+dnl Define HAVE_STRTOLD etc if "strtold" is found.
+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'
+
+  AC_CHECK_FUNCS(strtof)
+  GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
+
+  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 +602,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)
@@ -538,11 +617,9 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
   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)
@@ -593,7 +670,6 @@ 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.
-  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)
@@ -608,11 +684,9 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_SUPPORT, [
   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)
@@ -669,15 +743,13 @@ 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 Define USE_COMPLEX_LONG_DOUBLE etc if "atan2l/copysignl" 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)
+  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.
@@ -687,59 +759,26 @@ AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT, [
   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. If it's
-dnl supported, use special hand-crafted routines to provide thread
-dnl primitives. Also, if architecture-specific flags are required for 
-dnl 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 Depending on what is found, select configure/cpu/*/bits/atomicity.h 
-dnl If not found, select configure/cpu/generic/bits/atomicity.h
-dnl
-dnl GLIBCPP_CHECK_CPU
-AC_DEFUN(GLIBCPP_CHECK_CPU, [
-    AC_MSG_CHECKING([for cpu primitives directory])
-    CPU_FLAGS=                 
-    case "${target_cpu}" in
-      alpha*)
-       cpu_include_dir="config/cpu/alpha"
-        ;;
-      arm*)
-       cpu_include_dir="config/cpu/arm"
-        ;;
-      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"
-       CPU_FLAGS='-mcpu=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)
-    AC_SUBST(cpu_include_dir)
-    AC_SUBST(CPU_FLAGS)
+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)
 ])
 
+
 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
@@ -748,47 +787,47 @@ 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, [
+dnl GLIBCPP_CHECK_CTYPE_SUPPORT
+AC_DEFUN(GLIBCPP_CHECK_CTYPE_SUPPORT, [
   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 ])
+    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];}], \
+        + _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/gnu-linux"
+      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_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_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/bsd"
+      ctype_include_dir="config/os/bsd/freebsd"
       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_MSG_CHECKING([<ctype> for FreeBSD 3.4])
     AC_TRY_COMPILE([#include <ctype.h>],
     [int
     foo (int a)
@@ -797,20 +836,36 @@ AC_DEFUN(GLIBCPP_CHECK_CTYPE, [
     ctype_freebsd34=yes, ctype_freebsd34=no)
     AC_MSG_RESULT($ctype_freebsd34)
     if test $ctype_freebsd34 = "yes"; then
-      ctype_include_dir="config/bsd"
+      ctype_include_dir="config/os/bsd/freebsd"
+      ctype_default=no
+    fi
+    fi
+
+    dnl Test for <ctype> functionality -- NetBSD
+    if test $ctype_default = "yes"; then
+    AC_MSG_CHECKING([<ctype> for NetBSD])
+    AC_TRY_COMPILE([#include <ctype.h>],
+    [int
+    foo (int a)
+    { return _S + _C + _U + _L \
+      + _N + _P + _X + _tolower_tab_[a] + _toupper_tab_[a];}], \
+    ctype_netbsd=yes, ctype_netbsd=no)
+    AC_MSG_RESULT($ctype_netbsd)
+    if test $ctype_netbsd = "yes"; then
+      ctype_include_dir="config/os/bsd/netbsd"
       ctype_default=no
     fi
     fi
 
-    dnl Test for <ctype> functionality -- solaris 2.6 and 2.7
+    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_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];}], \
+        + _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)
 
@@ -822,101 +877,120 @@ AC_DEFUN(GLIBCPP_CHECK_CTYPE, [
       ctype_solaris26=yes, ctype_solaris26=no)
       AC_LANG_C
       if test $ctype_solaris26 = "yes"; then
-        ctype_include_dir="config/solaris/solaris2.6"
-        AC_MSG_RESULT("solaris2.6")
+        ctype_include_dir="config/os/solaris/solaris2.6"
+        AC_MSG_RESULT([Solaris 2.6])
         ctype_default=no
       else
-        ctype_include_dir="config/solaris/solaris2.7"
-        AC_MSG_RESULT("solaris2.[7,8]")
+        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
+    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_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[a];}], \
     ctype_solaris25=yes, ctype_solaris25=no)
     AC_MSG_RESULT($ctype_solaris25)
     if test $ctype_solaris25 = "yes"; then
-      ctype_include_dir="config/solaris/solaris2.5"
+      ctype_include_dir="config/os/solaris/solaris2.5"
       ctype_default=no
     fi
     fi
 
-    dnl Test for <ctype> functionality -- aix
+    dnl Test for <ctype> functionality -- AIX
     if test $ctype_default = "yes"; then
-    AC_MSG_CHECKING([<ctype> for aix ])
+    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);}], \
+        + _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/aix"
+      ctype_include_dir="config/os/aix"
+      ctype_default=no
+    fi
+    fi
+
+    dnl Test for <ctype> functionality -- IRIX
+    if test $ctype_default = "yes"; then 
+    AC_MSG_CHECKING([<ctype> for IRIX])
+    AC_TRY_COMPILE([#include <ctype.h>],
+    [int
+    foo (int a)
+    { return _U + _L + _N + _S + _P + _C + _B + _X + \
+             _A + _PR + _G + _BL;}], \
+    ctype_irix=yes, ctype_irix=no)
+    AC_MSG_RESULT($ctype_irix)
+    if test $ctype_irix = "yes"; then
+      ctype_include_dir="config/os/irix"
       ctype_default=no
     fi
     fi
 
     dnl Test for <ctype> functionality -- newlib
     if test $ctype_default = "yes"; then
-    AC_MSG_CHECKING([<ctype> for newlib ])
+    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_[a];}], \
     ctype_newlib=yes, ctype_newlib=no)
     AC_MSG_RESULT($ctype_newlib)
     if test $ctype_newlib = "yes"; then
-      ctype_include_dir="config/newlib"
+      ctype_include_dir="config/os/newlib"
       ctype_default=no
     fi
     fi
 
     if test $ctype_default = "yes"; then
-      ctype_include_dir="config/generic"
+      ctype_include_dir="config/os/generic"
       AC_MSG_WARN("Using default ctype headers.")
     fi
-    AC_SUBST(ctype_include_dir)
   ])
 ])
 
 
 dnl
 dnl Check to see if this target can enable the wchar_t parts of libstdc++.
+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, [
 
-  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 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 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 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])
@@ -924,7 +998,7 @@ AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
     [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])
@@ -934,39 +1008,49 @@ AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
     [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
+    AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset \
+    wcsrtombs mbsrtowcs, ac_wfuncs=yes, 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_isoC9X_wchar_t=no
+      ac_isoC99_wchar_t=no
     fi
-    AC_MSG_RESULT($ac_isoC9X_wchar_t)
-
+    AC_MSG_RESULT($ac_isoC99_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_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)
+  
+    LIBS="$ac_save_LIBS"
 
     AC_MSG_CHECKING([for XPG2 wchar_t support])
-    if test x"$ac_has_iconv_h" = xyes && test x"$ac_XPG2funcs" = xyes; then
+    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.
-    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
+    if test x"$ac_isoC99_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")
@@ -975,10 +1059,10 @@ AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
       AC_MSG_RESULT("no")
     fi
     AC_SUBST(libinst_wstring_la)
-
+  
   else
-    AC_MSG_WARN([<wchar.h> not found])
-    AC_DEFINE(_GLIBCPP_NEED_MBSTATE_T)
+    dnl Wide characters disabled by the user. 
+    AC_MSG_WARN([wchar_t support disabled.])
   fi
 ])
 
@@ -1004,8 +1088,8 @@ AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_COMPILER_SUPPORT, [
     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); ],
+                    dcomplex f(const dcomplex& x) { return dcomplex(x); }], \
+                    [ dcomplex x; f(x); ],
       glibcpp_cv_complex=ok,
       glibcpp_cv_complex=buggy
     )
@@ -1026,7 +1110,7 @@ AC_DEFUN(GLIBCPP_CHECK_COMPLEX_MATH_COMPILER_SUPPORT, [
       // 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
+      // See http://gcc.gnu.org/ml/gcc-bugs/1999-07n/msg00845.html for
       // more info on the bug itself.
       //
       struct
@@ -1056,10 +1140,10 @@ 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  +  Perhaps --enable-maintainer-mode should automatically turn this on?
+dnl  +  --enable-maintainer-mode automatically defaults this to on.
 dnl  +  Perhaps -D/-U of NDEBUG, DEBUG, DEBUG_ASSERT, ...?
 dnl  +  Usage:  GLIBCPP_ENABLE_DEBUG[(DEFAULT)]
 dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
@@ -1080,10 +1164,10 @@ 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'
+        DEBUG_FLAGS='-g'
         ;;
 esac
 AC_SUBST(DEBUG_FLAGS)
@@ -1099,9 +1183,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.
@@ -1114,11 +1198,11 @@ changequote(<<, >>)dnl
 changequote([, ])dnl
 [case "x$enableval" in
  xyes)   
-       AC_MSG_ERROR([--enable-cxx-flags needs compiler flags as arguments]) ;;
+        AC_MSG_ERROR([--enable-cxx-flags needs compiler flags as arguments]) ;;
  xno|x)  
-       enable_cxx_flags='' ;;
+        enable_cxx_flags='' ;;
  *)      
-       enable_cxx_flags="$enableval" ;;
+        enable_cxx_flags="$enableval" ;;
  esac],
 enable_cxx_flags='GLIBCPP_ENABLE_CXX_FLAGS_DEFAULT')
 
@@ -1145,71 +1229,29 @@ AC_SUBST(EXTRA_CXX_FLAGS)
 
 
 dnl
-dnl Check for instructions to automatically rebuild libgcc.a.  Requires,
-dnl of course, the location of the gcc objdir.  Note that if --disable-
-dnl namespaces is in effect, rebuilding libgcc.a is an expensive no-op.
-dnl
-dnl GLIBCPP_ENABLE_RELIBGCC
-dnl --enable-libgcc-rebuild=/absolute/path/to/gcc/objdir sets GCC_OBJDIR
-dnl     (presumably in the top-level Makefile) to /absol.../objdir
-dnl --disable-libgcc-rebuild will not touch libgcc.a at all (maybe print
-dnl     a warning if this is given along with --enable-namespaces), by
-dnl     setting GCC_OBJDIR to `no'.
-dnl  +  Doing this by default is going to be interesting.  What default
-dnl     "on" value can there be?
-dnl  +  Usage:  GLIBCPP_ENABLE_RELIBGCC[(DEFAULT)]
-dnl       The default path should be ../.. if bundled with GCC source.
-dnl       If ommitted, it defaults to `no'.
-dnl
-AC_DEFUN(GLIBCPP_ENABLE_RELIBGCC, [dnl
-define([GLIBCPP_ENABLE_RELIBGCC_DEFAULT], ifelse($1,, no, $1))dnl
-AC_ARG_ENABLE(libgcc-rebuild,
-changequote(<<, >>)dnl
-<<  --enable-libgcc-rebuild=DIR     also rebuild libgcc.a; DIR is
-                                  the GCC objdir; see install.html>>,
-changequote([, ])dnl
-[case "$enableval" in
- yes) AC_MSG_ERROR([--enable-libgcc-rebuild needs a pathname]) ;;
- no)  enable_libgcc_rebuild=no ;;
- *)   if test -d "$enableval" && test -d "${enableval}/gcc" && \
-         test -d "${enableval}/libiberty"
-      then
-         enable_libgcc_rebuild="$enableval"
-      else
-         AC_MSG_ERROR(["$enableval" does not appear to be the GCC objdir])
-      fi
-      ;;
- esac],
-enable_libgcc_rebuild=GLIBCPP_ENABLE_RELIBGCC_DEFAULT)dnl
-GCC_OBJDIR="$enable_libgcc_rebuild"
-AC_SUBST(GCC_OBJDIR)
-])
-
-
-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 thread package
+  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
       AC_MSG_RESULT(libio)
@@ -1223,54 +1265,82 @@ AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
       if test x$has_libio = x"yes"; then
         case "$target" in
           *-*-linux*)
-           AC_MSG_CHECKING([for glibc version >= 2.2])
-           AC_EGREP_CPP([ok], [
-           #include <features.h>
-           #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) 
-               ok
-           #endif
-           ], glibc_satisfactory=yes, glibc_satisfactory=no)
-           AC_MSG_RESULT($glibc_satisfactory)
-           ;;
+              AC_MSG_CHECKING([for glibc version >= 2.2])
+              AC_EGREP_CPP([ok], [
+            #include <features.h>
+              #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
-         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
-          need_wlibio=yes
-       fi
-
-      # Using libio, but <libio.h> doesn't exist on the target system. . .
+        # XXX at the moment, admit defeat and force the recompilation
+        # XXX of glibc even on glibc-2.2 systems, because libio is not synched.
+        glibc_satisfactory=no        
+
+        if test x$glibc_satisfactory = x"yes"; then
+           need_libio=no
+           need_wlibio=no        
+        else
+           need_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
+              need_wlibio=yes
+           else
+              need_wlibio=no
+           fi
+        fi
+
       else
-       need_libio=yes
-        need_xtra_libio=no
-        # bkoz XXX need to add checks to enable this
-        need_wlibio=no
+         # Using libio, but <libio.h> doesn't exist on the target system. . .
+         need_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
+             need_wlibio=yes
+         else
+             need_wlibio=no
+         fi
       fi
       ;;
+    xstdio | x | xno | xnone | xyes)
+      # default
+      CSTDIO_H=config/c_io_stdio.h
+      CSTDIO_CC=config/c_io_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
+      # Wide characters are not supported with this package.
+      enable_c_mbchar=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_H, include/bits/c++io.h)
   AC_LINK_FILES($CSTDIO_CC, src/c++io.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)
 ])
 
 
@@ -1280,15 +1350,17 @@ dnl
 dnl GLIBCPP_ENABLE_THREADS
 dnl --enable-threads=posix sets config/threads-posix.h et. al.
 dnl 
-dnl default is no threads
+dnl Default is no threads, which also disables _IO_MTSAFE_IO in
+dnl libio.  Any actual thread package will enable it.
 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.],
+  [  --enable-threads       enable thread usage for target GCC.
+     --enable-threads=LIB   use LIB thread package for target GCC. [default=no]
+  ],
   if test x$enable_threads = xno; then
     enable_threads=''
   fi,
@@ -1298,72 +1370,59 @@ AC_DEFUN(GLIBCPP_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
-               ;;
+        x | xno | xnone)
+                # No threads
+                target_thread_file='single'
+                ;;
+        xyes)
+                # default
+                target_thread_file='posix'
+                ;;
+        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
 
   dnl Check for thread package actually supported in libstdc++ 
+  THREADH=
   case "$target_thread_file" in
     no | none | single)
-      THREADS=none
+      THREADH=threads-no.h
       ;;
     posix | pthreads)
-      THREADS=posix
-      case "$target" in
-        *-*-linux*)
-       ;;
-      esac
+      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)
+      AC_MSG_ERROR($THREADS is an unsupported/unknown thread package)
       ;;
   esac
-  AC_MSG_RESULT($THREADS)
+  AC_MSG_RESULT($THREADH)
 
-  THREADLIBS=
-  THREADINCS=
-  THREADDEPS=
-  THREADOBJS=
-  THREADH=
-  THREADSPEC=
-  case "$THREADS" in
-    posix)
-      AC_CHECK_HEADER(pthread.h, [have_pthread_h=yes], [have_pthread_h=])
-      THREADLIBS=-lpthread
-      THREADSPEC=-lpthread
-      dnl Not presently used
-      dnl THREADOBJS=threads-posix.lo
-      THREADH=threads-posix.h
-      ;;
-    none)
-      dnl Not presently used
-      dnl THREADOBJS=threads-no.lo
-      THREADH=threads-no.h
-      ;;
-  esac
-  AC_SUBST(THREADLIBS)
-  AC_SUBST(THREADINCS)
-  AC_SUBST(THREADDEPS)
-  AC_SUBST(THREADOBJS)
-  AC_SUBST(THREADSPEC)
-  AC_LINK_FILES(config/$THREADH, bits/c++threads.h)
+  AC_LINK_FILES(config/$THREADH, include/bits/c++threads.h)
+  if test $THREADH != threads-no.h; then
+    AC_DEFINE(_GLIBCPP_USE_THREADS)
+  fi
+])
+
+
+dnl Enable atomic locking
+dnl GLIBCPP_ENABLE_ATOMICITY
+AC_DEFUN(GLIBCPP_ENABLE_ATOMICITY, [
+    AC_MSG_CHECKING([for atomicity.h])
+    # We have ATOMICITY already from GLIBCPP_CONFIGURE
+    if test "$ATOMICITYH" = "config/cpu/generic"; then
+      AC_MSG_WARN([No ATOMICITY settings found, using generic atomic ops.])
+    fi
+    AC_MSG_RESULT($ATOMICITYH/bits/atomicity.h)
+    AC_LINK_FILES($ATOMICITYH/bits/atomicity.h, include/bits/atomicity.h)
 ])
 
 
@@ -1392,67 +1451,194 @@ AC_DEFUN(GLIBCPP_ENABLE_LONG_LONG, [dnl
    *)   AC_MSG_ERROR([Unknown argument to enable/disable long long]) ;;
    esac],
   enable_long_long=GLIBCPP_ENABLE_LONG_LONG_DEFAULT)dnl
+  # Allow use of os-dependent settings, so that macros that turn on
+  # C99 capabilities can be defined and used in a consistent way.
+  OS_INC_PATH=${srcdir}/$os_include_dir
+  ac_test_CFLAGS="${CFLAGS+set}"
+  ac_save_CFLAGS="$CFLAGS"
+  CFLAGS="-I$OS_INC_PATH"
 
-  # Check for the existance of functions used if long long is enabled.
+  # Check for the existence of functions used if long long is enabled.
   AC_CHECK_FUNC(strtoll,,ac_strtoll=no)
   AC_CHECK_FUNC(strtoull,,ac_strtoull=no)
 
+  # Check for lldiv_t, et. al.
+  AC_MSG_CHECKING([for lldiv_t declaration])
+  AC_CACHE_VAL(glibcpp_lldiv_t_use, [
+  AC_TRY_COMPILE([#include <bits/os_defines.h>
+                  #include <stdlib.h>], 
+                   [ lldiv_t mydivt;], 
+                   [glibcpp_lldiv_t_use=yes], [glibcpp_lldiv_t_use=no])
+  ])
+  AC_MSG_RESULT($glibcpp_lldiv_t_use)
+  if test x$glibcpp_lldiv_t_use = x"yes"; then
+    AC_DEFINE(HAVE_LLDIV_T)
+  fi
+
   AC_MSG_CHECKING([for enabled long long])
   if test x"$ac_strtoll" = xno || test x"$ac_strtoull" = xno; then 
     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)
-          ;;
-  esac
+  # Option parsed, now set things appropriately
+  if test x"$enable_long_long" = xyes; then
+    AC_DEFINE(_GLIBCPP_USE_LONG_LONG)
+  fi
+
+  # Reset CFLAGS
+  CFLAGS="$ac_save_CFLAGS"
 ])
 
 
 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 
-       ;;
-   no)  enable_cshadow_headers=no 
-       ;;
-   *)   AC_MSG_ERROR([Unknown argument to enable/disable shadowed C headers]) 
-       ;;
+   c) 
+       enable_cheaders=c 
+        ;;
+   c_std)  
+       enable_cheaders=c_std 
+        ;;
+   c_shadow)  
+       enable_cheaders=c_shadow 
+        ;;
+   *)   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 CSHADOWFLAGS is currently unused, but may be useful in the future.
-  case "$enable_cshadow_headers" in
-    yes) 
-       CSHADOWFLAGS=""
-       ;;
-    no)   
-       CSHADOWFLAGS=""
+  case "$enable_cheaders" in
+    c_shadow) 
+        CSHADOW_FLAGS="-fno-builtin"
+        C_INCLUDE_DIR='${top_srcdir}/include/c_shadow'
+        AC_DEFINE(_GLIBCPP_USE_SHADOW_HEADERS)
+        ;;
+    c_std)   
+        CSHADOW_FLAGS=""
+        C_INCLUDE_DIR='${top_srcdir}/include/c_std'
+        ;;
+    c)   
+        CSHADOW_FLAGS=""
+        C_INCLUDE_DIR='${top_srcdir}/include/c'
         ;;
   esac
 
-  AC_SUBST(CSHADOWFLAGS)
-  AM_CONDITIONAL(GLIBCPP_USE_CSHADOW, test "$enable_cshadow_headers" = yes)
+  AC_SUBST(CSHADOW_FLAGS)
+  AC_SUBST(C_INCLUDE_DIR)
+  AM_CONDITIONAL(GLIBCPP_USE_CSHADOW, test "$enable_cheaders" = c_shadow)
+])
+
+
+dnl
+dnl Check for wide character support.  Has the same effect as the option
+dnl in gcc's configure, but in a form that autoconf can mess with.
+dnl
+dnl GLIBCPP_ENABLE_C_MBCHAR
+dnl --enable-c-mbchar requests all the wchar_t stuff.
+dnl --disable-c-mbchar doesn't.
+dnl  +  Usage:  GLIBCPP_ENABLE_C_MBCHAR[(DEFAULT)]
+dnl       Where DEFAULT is either `yes' or `no'.  If ommitted, it
+dnl       defaults to `no'.
+AC_DEFUN(GLIBCPP_ENABLE_C_MBCHAR, [dnl
+define([GLIBCPP_ENABLE_C_MBCHAR_DEFAULT], ifelse($1, yes, yes, no))dnl
+AC_ARG_ENABLE(c-mbchar,
+changequote(<<, >>)dnl
+<<  --enable-c-mbchar       enable multibyte (wide) characters [default=>>GLIBCPP_ENABLE_C_MBCHAR_DEFAULT],
+changequote([, ])dnl
+[case "$enableval" in
+ yes) enable_c_mbchar=yes ;;
+ no)  enable_c_mbchar=no ;;
+ *)   AC_MSG_ERROR([Unknown argument to enable/disable c-mbchar]) ;;
+ esac],
+enable_c_mbchar=GLIBCPP_ENABLE_C_MBCHAR_DEFAULT)dnl
+dnl Option parsed, now other scripts can test enable_c_mbchar for yes/no.
+])
+
+
+dnl
+dnl Set up *_INCLUDES and *_INCLUDE_DIR variables for all sundry Makefile.am's.
+dnl
+dnl GLIBCPP_INCLUDE_DIR
+dnl C_INCLUDE_DIR
+dnl TOPLEVEL_INCLUDES
+dnl LIBMATH_INCLUDES
+dnl LIBSUPCXX_INCLUDES
+dnl LIBIO_INCLUDES
+dnl CSHADOW_INCLUDES
+dnl
+dnl GLIBCPP_EXPORT_INCLUDE
+AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
+  # Root level of the include sources.
+  GLIBCPP_INCLUDE_DIR='$(top_srcdir)/include'
+
+  # 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_CHEADERS
+   
+  # Passed down for canadian crosses.
+  if  test x"$CANADIAN" = xyes; then
+    TOPLEVEL_INCLUDES='-I$(includedir)'
+  fi
+
+  LIBMATH_INCLUDES='-I$(top_srcdir)/libmath'
+
+  LIBSUPCXX_INCLUDES='-I$(top_srcdir)/libsupc++'
+
+  #if GLIBCPP_NEED_LIBIO
+  LIBIO_INCLUDES='-I$(top_builddir)/libio -I$(top_srcdir)/libio'
+  #else
+  #LIBIO_INCLUDES='-I$(top_srcdir)/libio'
+  #endif
+
+  #if GLIBCPP_USE_CSHADOW
+  #  CSHADOW_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR) \
+  #                   -I$(top_blddir)/cshadow'
+  #else
+  CSTD_INCLUDES='-I$(GLIBCPP_INCLUDE_DIR)/std -I$(C_INCLUDE_DIR)'
+  #endif
+
+  # Now, export this to all the little Makefiles....
+  AC_SUBST(GLIBCPP_INCLUDE_DIR)
+  AC_SUBST(TOPLEVEL_INCLUDES)
+  AC_SUBST(LIBMATH_INCLUDES)
+  AC_SUBST(LIBSUPCXX_INCLUDES)
+  AC_SUBST(LIBIO_INCLUDES)
+  AC_SUBST(CSTD_INCLUDES)
+])
+
+
+dnl
+dnl Set up *_FLAGS and *FLAGS variables for all sundry Makefile.am's.
+dnl
+AC_DEFUN(GLIBCPP_EXPORT_FLAGS, [
+  # Optimization flags that are probably a good idea for thrill-seekers. Just
+  # uncomment the lines below and make, everything else is ready to go... 
+  # OPTIMIZE_CXXFLAGS = -O3 -fstrict-aliasing -fvtable-gc 
+  OPTIMIZE_CXXFLAGS=
+  AC_SUBST(OPTIMIZE_CXXFLAGS)
+
+  WARN_FLAGS='-Wall -Wno-format -W -Wwrite-strings -Winline'
+  AC_SUBST(WARN_FLAGS)
 ])
 
 
@@ -1466,15 +1652,16 @@ changequote([, ])
 
 # 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.
@@ -1552,14 +1739,16 @@ dnl @version 1.1 #### replaced Id string now that Id is for lib-v3; pme
 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 #### conditional's subshell (" --version" is not a command), using a
+dnl #### different option to grep(1).
 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
+                  if ( $a --version 2> /dev/null | grep -c GNU > /dev/null )
+                  then
                           _cv_gnu_make_command=$a ;
                           break;
                   fi
@@ -1583,4 +1772,5 @@ ifelse(,,,[AC_SUBST(LIBTOOL)
 AC_DEFUN([AM_PROG_LIBTOOL])
 AC_DEFUN([AC_LIBTOOL_DLOPEN])
 AC_DEFUN([AC_PROG_LD])
-])
\ No newline at end of file
+])
+