OSDN Git Service

* c-pragma.h (HANDLE_PRAGMA_WEAK): Define iff ASM_WEAKEN_LABEL and
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / aclocal.m4
index 4741a87..2b62537 100644 (file)
@@ -13,8 +13,6 @@ dnl PARTICULAR PURPOSE.
 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
@@ -26,10 +24,10 @@ AC_DEFUN(GLIBCPP_CONFIGURE, [
     *)   AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
    esac], [multilib=yes])dnl
 
-  glibcpp_basedir=$auxdir/$1/libstdc++-v3
+  glibcpp_basedir=$srcdir/$toprel/$1/libstdc++-v3
   AC_SUBST(glibcpp_basedir)
 
-  AM_INIT_AUTOMAKE(libstdc++, 2.91)
+  AM_INIT_AUTOMAKE(libstdc++, 3.0.0)
 
   # Never versions of autoconf add an underscore to these functions.
   # Prevent future problems ...
@@ -129,10 +127,6 @@ LIB_AC_PROG_CXX
   AC_CHECK_TOOL(AS, as)
   AC_CHECK_TOOL(AR, ar)
   AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error)
-  AC_CHECK_TOOL(glibcpp_expect, expect, expect-not-found-in-path-error)
-  AC_CHECK_TOOL(glibcpp_runtest, runtest, runtest-not-found-in-path-error)
-  AC_SUBST(glibcpp_expect)
-  AC_SUBST(glibcpp_runtest)
   AC_PROG_INSTALL
 
   AM_MAINTAINER_MODE
@@ -145,6 +139,10 @@ 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
 
@@ -171,9 +169,9 @@ 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__ >= 3
-    ok
+  AC_TRY_COMPILE(, [
+  #if __GNUC__ < 3
+    not_ok
   #endif
   ], gpp_satisfactory=yes, AC_MSG_ERROR([please upgrade to GCC 3.0 or above]))
   AC_LANG_RESTORE
@@ -184,9 +182,9 @@ 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 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.
@@ -198,7 +196,7 @@ 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
@@ -223,7 +221,8 @@ AC_DEFUN(GLIBCPP_CHECK_COMPILER_FEATURES, [
     # this is the suspicious part
     CXXFLAGS=''
   fi
-  if test x"$ac_fdsections" = x"yes" && test x"$enable_debug" = x"no"; 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)
@@ -290,7 +289,8 @@ AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [
   fi
 
   # Set linker optimization flags.
-  if test x"$ac_cv_prog_gnu_ld" = x"yes" && test x"$enable_debug" = x"no"; then
+  if test x"$ac_cv_prog_gnu_ld" = x"yes" &&
+     test x"$enable_debug" = x"no"; then
     OPT_LDFLAGS='-Wl,-O1'
   fi
 
@@ -345,7 +345,7 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_1, [
     GLIBCPP_CHECK_MATH_DECL_1(_$1)
     if test x$glibcpp_cv_func__$1_use = x"yes"; then
       AC_CHECK_FUNCS(_$1)    
-    fi 
+    fi
   fi
 ])
 
@@ -374,7 +374,7 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_DECLS_AND_LINKAGES_1, [
 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 ASSUMES argument is a math function with TWO parameters
 dnl
 dnl GLIBCPP_CHECK_MATH_DECL_2
 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_2, [
@@ -412,7 +412,7 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2, [
     GLIBCPP_CHECK_MATH_DECL_2(_$1)
     if test x$glibcpp_cv_func__$1_use = x"yes"; then
       AC_CHECK_FUNCS(_$1)    
-    fi 
+    fi
   fi
 ])
 
@@ -420,7 +420,7 @@ AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_2, [
 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 ASSUMES argument is a math function with THREE parameters
 dnl
 dnl GLIBCPP_CHECK_MATH_DECL_3
 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_3, [
@@ -458,7 +458,7 @@ 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)    
-    fi 
+    fi
   fi
 ])
 
@@ -620,7 +620,6 @@ AC_DEFUN(GLIBCPP_CHECK_STDLIB_SUPPORT, [
   ac_save_CXXFLAGS="$CXXFLAGS"
   CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
 
-  AC_CHECK_FUNCS(strtof)
   GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_2(strtold)
   AC_CHECK_FUNCS(drand48)
 
@@ -747,15 +746,15 @@ 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_LIB(m, main)
-  AC_REPLACE_MATHFUNCS(nan hypot hypotf atan2f expf copysignf)
+  AC_REPLACE_MATHFUNCS(nan hypot hypotf 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(hypotl signbitl)
   fi
@@ -773,7 +772,6 @@ 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)
 ])
 
 
@@ -804,8 +802,9 @@ AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
   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
+  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>
@@ -826,12 +825,23 @@ AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
     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_wfuncs=yes
+    AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset,, \
+    ac_wfuncs=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
+    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
@@ -854,8 +864,9 @@ AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
     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
+    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
@@ -865,8 +876,8 @@ AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
     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
+    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
@@ -880,75 +891,6 @@ AC_DEFUN(GLIBCPP_CHECK_WCHAR_T_SUPPORT, [
 
 
 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://gcc.gnu.org/ml/gcc-bugs/1999-07n/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)
-  fi
-])
-
-
-dnl
 dnl Check for special debugging mode; not for production use.
 dnl
 dnl GLIBCPP_ENABLE_DEBUG
@@ -1052,8 +994,8 @@ 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]
+  [  --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
@@ -1080,7 +1022,7 @@ AC_DEFUN(GLIBCPP_ENABLE_CLOCALE, [
       ;;
   esac
 
-  AC_LINK_FILES($CLOCALE_H, include/bits/c++locale.h)
+  AC_SUBST(CLOCALE_H)
   AC_LINK_FILES($CLOCALE_CC, src/c++locale.cc)
 ])
 
@@ -1096,8 +1038,8 @@ dnl
 AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
   AC_MSG_CHECKING([for cstdio to use])
   AC_ARG_ENABLE(cstdio,
-  [  --enable-cstdio        enable stdio for target io package. 
-     --enable-cstdio=LIB    use LIB target-speific io package. [default=stdio]
+  [  --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=stdio
@@ -1180,13 +1122,13 @@ AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
       exit 1
       ;;
   esac
-  AC_LINK_FILES($CSTDIO_H, include/bits/c++io.h)
-  AC_LINK_FILES($BASIC_FILE_H, include/bits/basic_file_model.h)
+  AC_SUBST(CSTDIO_H)
+  AC_SUBST(BASIC_FILE_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)
+  AC_SUBST(CCODECVT_C)
   # 2000-08-04 bkoz hack
 
   AM_CONDITIONAL(GLIBCPP_BUILD_LIBIO,
@@ -1203,41 +1145,29 @@ AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [
 
 
 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, [
   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])
 
-  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_WARN(disabling unsupported thread package $target_thread_file)
-      THREADH=threads-no.h
-      ;;
-    *)
-      AC_MSG_ERROR($target_thread_file: unsupported/unknown thread package)
-      ;;
-  esac
-
-  AC_LINK_FILES(config/$THREADH, include/bits/c++threads.h)
-  if test $THREADH != threads-no.h; then
-    AC_DEFINE(_GLIBCPP_USE_THREADS)
+  if test $target_thread_file != single; then
+    AC_DEFINE(HAVE_GTHR_DEFAULT)
+    AC_DEFINE(_GLIBCPP_SUPPORTS_WEAK, __GXX_WEAK__)
   fi
+
+  glibcpp_thread_h=gthr-$target_thread_file.h
+  AC_SUBST(glibcpp_thread_h)
 ])
 
 
@@ -1289,7 +1219,7 @@ EOF
    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.])
+        [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"
@@ -1331,6 +1261,8 @@ AC_DEFUN(GLIBCPP_ENABLE_C99, [dnl
   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])
@@ -1339,21 +1271,48 @@ AC_DEFUN(GLIBCPP_ENABLE_C99, [dnl
   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])
+                 [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])
+                [islessgreater(0.0,0.0);],, [ac_c99_math=no])
   AC_TRY_COMPILE([#include <math.h>],
-                [isunordered(0.0,0.0);], , [ac_c99_math=no])
+                [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_CHECK_FUNC(strtoll,,ac_c99_stdlib=no)
-  AC_CHECK_FUNC(strtoull,,ac_c99_stdlib=no)
-  AC_CHECK_FUNC(llabs,,ac_c99_stdlib=no)
-  AC_CHECK_FUNC(lldiv,,ac_c99_stdlib=no)
-  AC_CHECK_FUNC(atoll,,ac_c99_stdlib=no)
-       
+  ac_c99_stdlib=yes;
   AC_MSG_CHECKING([for lldiv_t declaration])
   AC_CACHE_VAL(ac_c99_lldiv_t, [
   AC_TRY_COMPILE([#include <stdlib.h>], 
@@ -1361,18 +1320,42 @@ AC_DEFUN(GLIBCPP_ENABLE_C99, [dnl
                    [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.
-  AC_CHECK_FUNC(wcstold,,ac_c99_wchar=no)
-  AC_CHECK_FUNC(wcstoll,,ac_c99_wchar=no)
-  AC_CHECK_FUNC(wcstoull,,ac_c99_wchar=no)
+  # 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_wchar" = x"no" \
-       || test x"$ac_c99_stdlib" = x"no"; then 
+  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)
@@ -1444,8 +1427,7 @@ 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-cheaders construct "C" header files for
-                           g++ [default=>>GLIBCPP_ENABLE_CHEADERS_DEFAULT],
+<<  --enable-cheaders       construct "C" header files for g++ [default=>>GLIBCPP_ENABLE_CHEADERS_DEFAULT],
 changequote([, ])
   [case "$enableval" in
    c) 
@@ -1467,16 +1449,16 @@ changequote([, ])
   case "$enable_cheaders" in
     c_shadow) 
         CSHADOW_FLAGS="-fno-builtin"
-        C_INCLUDE_DIR='${top_srcdir}/include/c_shadow'
+        C_INCLUDE_DIR='${glibcpp_srcdir}/include/c_shadow'
         AC_DEFINE(_GLIBCPP_USE_SHADOW_HEADERS)
         ;;
     c_std)   
         CSHADOW_FLAGS=""
-        C_INCLUDE_DIR='${top_srcdir}/include/c_std'
+        C_INCLUDE_DIR='${glibcpp_srcdir}/include/c_std'
         ;;
     c)   
         CSHADOW_FLAGS=""
-        C_INCLUDE_DIR='${top_srcdir}/include/c'
+        C_INCLUDE_DIR='${glibcpp_srcdir}/include/c'
         ;;
   esac
 
@@ -1515,25 +1497,19 @@ 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
+dnl GLIBCPP_EXPORT_INCLUDES
 AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
-  # Root level of the include sources.
-  GLIBCPP_INCLUDE_DIR='$(top_srcdir)/include'
+  # Root level of the build directory include sources.
+  GLIBCPP_INCLUDES="-I${glibcpp_builddir}/include/${target_alias} -I${glibcpp_builddir}/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
+  if test x"$CANADIAN" = xyes; then
     TOPLEVEL_INCLUDES='-I$(includedir)'
   fi
 
@@ -1541,26 +1517,16 @@ AC_DEFUN(GLIBCPP_EXPORT_INCLUDES, [
 
   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
+  if test x"$need_libio" = xyes; then
+    LIBIO_INCLUDES='-I$(top_builddir)/libio -I$(top_srcdir)/libio'
+    AC_SUBST(LIBIO_INCLUDES)
+  fi
 
   # Now, export this to all the little Makefiles....
-  AC_SUBST(GLIBCPP_INCLUDE_DIR)
+  AC_SUBST(GLIBCPP_INCLUDES)
   AC_SUBST(TOPLEVEL_INCLUDES)
   AC_SUBST(LIBMATH_INCLUDES)
   AC_SUBST(LIBSUPCXX_INCLUDES)
-  AC_SUBST(LIBIO_INCLUDES)
-  AC_SUBST(CSTD_INCLUDES)
 ])
 
 
@@ -1583,6 +1549,9 @@ 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
@@ -1593,6 +1562,17 @@ 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)
@@ -1600,7 +1580,7 @@ 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],
+[  --with-gxx-include-dir  the installation directory for include files],
 [case "${withval}" in
   yes)
     AC_MSG_ERROR(Missing directory for --with-gxx-include-dir)
@@ -1629,7 +1609,7 @@ gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([
 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}
+glibcpp_toolexeclibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)'
 changequote([,])dnl
 ],version_specific_libs=no)
 AC_MSG_RESULT($version_specific_libs)
@@ -1643,7 +1623,8 @@ 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
+  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
@@ -1655,6 +1636,9 @@ 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)