X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=libstdc%2B%2B-v3%2Facinclude.m4;h=a4e733fe3b65f7203dc3d6cd1b0bc0ec0416605e;hb=5ece00cfd3929187ce2830d39077078bbe6193be;hp=7106fc594facc1a0d6fc027770162ad21d912ff2;hpb=7fdc2989844779a0b97c7ae898f80a634d59d06c;p=pf3gnuchains%2Fgcc-fork.git diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index 7106fc594fa..a4e733fe3b6 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -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,15 +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]) -# Use CXX_libstdcxx so that we do not cause CXX to be cached with the +# 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. -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]) +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 @@ -126,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 @@ -140,30 +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 # This does for the target what configure.host does for the host. In - # addition to modifying the same flags, it also sets up symlinks. + # addition to possibly modifying the same flags, it also sets up symlinks. GLIBCPP_CHECK_TARGET - - GLIBCPP_CFLAGS="[$]{glibcpp_cflags}" - GLIBCPP_CXXFLAGS="[$]{glibcpp_cxxflags}" - AC_SUBST(GLIBCPP_CFLAGS) - AC_SUBST(GLIBCPP_CXXFLAGS) ]) @@ -173,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 @@ -214,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' @@ -241,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) ]) @@ -271,7 +239,7 @@ AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [ AC_REQUIRE([AC_PROG_LD]) # Set --gc-sections. - if test "$ac_cv_prog_gnu_ld" = "broken"; then + 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. @@ -309,7 +277,8 @@ AC_DEFUN(GLIBCPP_CHECK_LINKER_FEATURES, [ fi # Set linker optimization flags. - if test "$ac_cv_prog_gnu_ld" = "yes"; then + if test x"$ac_cv_prog_gnu_ld" = x"yes" && + test x"$enable_debug" = x"no"; then OPT_LDFLAGS='-Wl,-O1' fi @@ -320,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 + #ifdef HAVE_IEEEFP_H + #include + #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 @@ -331,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 ], - [ $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 ], + [ `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 ], + [ $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 @@ -360,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 ], - [ $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 ], + [ $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 @@ -389,18 +439,14 @@ dnl ASSUMES argument is a math function with THREE parameters dnl dnl GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3 AC_DEFUN(GLIBCPP_CHECK_MATH_DECL_AND_LINKAGE_3, [ - AC_MSG_CHECKING([for $1 declaration]) - AC_CACHE_VAL(glibcpp_cv_func_$1_use, [ - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_COMPILE([#include ], - [ $1(0, 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_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 ]) @@ -410,9 +456,6 @@ 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 @@ -420,14 +463,16 @@ 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 ], - [ $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 ], + [ $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) @@ -451,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 ], - [ $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 ], + [ $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 ], - [ $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 ], + [ $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'` @@ -549,8 +598,9 @@ 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 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, [ @@ -558,8 +608,8 @@ 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) CXXFLAGS="$ac_save_CXXFLAGS" ]) @@ -595,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) @@ -614,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) @@ -643,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) @@ -655,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" @@ -735,23 +733,18 @@ 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_CHECK_LIB(m, main) - AC_REPLACE_MATHFUNCS(cabs cabsf 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_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(cabsl 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) @@ -772,354 +765,116 @@ AC_DEFUN(GLIBCPP_CHECK_TARGET, [ 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_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 functionality -- GNU/Linux - AC_MSG_CHECKING([ for GNU/Linux]) - AC_TRY_COMPILE([#include ], - [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 functionality -- FreeBSD 4.0 - if test $ctype_default = "yes"; then - AC_MSG_CHECKING([ for FreeBSD 4.0]) - AC_TRY_COMPILE([#include ], - [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 functionality -- FreeBSD 3.4 - if test $ctype_default = "yes"; then - AC_MSG_CHECKING([ for FreeBSD 3.4]) - AC_TRY_COMPILE([#include ], - [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 functionality -- Solaris 2.6 and up - if test $ctype_default = "yes"; then - AC_MSG_CHECKING([ for Solaris 2.6,7,8]) - AC_TRY_COMPILE([#include ], - [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 ], - [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 functionality -- Solaris 2.5.1 - if test $ctype_default = "yes"; then - AC_MSG_CHECKING([ for Solaris 2.5.1]) - AC_TRY_COMPILE([#include ], - [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 functionality -- AIX - if test $ctype_default = "yes"; then - AC_MSG_CHECKING([ for AIX]) - AC_TRY_COMPILE([#include ], - [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 functionality -- IRIX - if test $ctype_default = "yes"; then - AC_MSG_CHECKING([ for IRIX]) - AC_TRY_COMPILE([#include ], - [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 functionality -- newlib - if test $ctype_default = "yes"; then - AC_MSG_CHECKING([ for newlib]) - AC_TRY_COMPILE([#include ], - [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, - include/bits/ctype_base.h) - AC_LINK_FILES($ctype_include_dir/bits/ctype_inline.h, - include/bits/ctype_inline.h) - AC_LINK_FILES($ctype_include_dir/bits/ctype_noninline.h, \ - include/bits/ctype_noninline.h) - ]) -]) - - -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, [ - 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 ], + [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 ], - [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 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 + AC_MSG_CHECKING([for WCHAR_MIN and WCHAR_MAX]) + AC_TRY_COMPILE([#include ], + [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 WCHAR_MIN, WCHAR_MAX, which is needed before - dnl numeric_limits can instantiate type_traits - AC_MSG_CHECKING([for WCHAR_MIN and WCHAR_MAX]) - AC_TRY_COMPILE([#include ], - [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 or not. - AC_MSG_CHECKING([for WEOF]) - AC_TRY_COMPILE([ - #include - #include ], - [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 or not. + AC_MSG_CHECKING([for WEOF]) + AC_TRY_COMPILE([ + #include + #include ], + [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. - AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset \ - wcsrtombs mbsrtowcs, ac_wfuncs=yes, ac_wfuncs=no) + dnl Tests for wide character functions used in char_traits. + ac_wfuncs=yes + AC_CHECK_FUNCS(wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset,, \ + 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 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) - 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 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) - LIBS="$ac_save_LIBS" + 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_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) + 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([ 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 <&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 @@ -1240,7 +1041,8 @@ AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [ case x${enable_cstdio_flag} in 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) @@ -1296,14 +1098,13 @@ AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [ xstdio | x | xno | xnone | xyes) # default CSTDIO_H=config/c_io_stdio.h - CSTDIO_CC=config/c_io_stdio.cc + BASIC_FILE_H=config/basic_file_stdio.h + BASIC_FILE_CC=config/basic_file_stdio.cc AC_MSG_RESULT(stdio) # 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 @@ -1311,121 +1112,272 @@ AC_DEFUN(GLIBCPP_ENABLE_CSTDIO, [ ;; esac AC_LINK_FILES($CSTDIO_H, include/bits/c++io.h) - AC_LINK_FILES($CSTDIO_CC, src/c++io.cc) + 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_WLIBIO, test "$need_wlibio" = yes) if test "$need_libio" = yes || test "$need_wlibio" = yes; then - libio_la=../libio/libio.la + libio_la=../libio/libio.la else - libio_la= + 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 -in +dnl and process to 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='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 + 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 unsupported/unknown thread package) - ;; - esac - AC_MSG_RESULT($THREADH) - AC_LINK_FILES(config/$THREADH, include/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*-*-* | *-*-freebsd*) - ATOMICITYH=$cpu_include_dir - ;; - *-*-aix* | *-*-irix*) - 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, include/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 functions used if C99 is enabled. + ac_c99_math=yes; + AC_MSG_CHECKING([for ISO C99 support in ]) + AC_TRY_COMPILE([#include ],[fpclassify(0.0);],, [ac_c99_math=no]) + AC_TRY_COMPILE([#include ],[isfinite(0.0);],, [ac_c99_math=no]) + AC_TRY_COMPILE([#include ],[isinf(0.0);],, [ac_c99_math=no]) + AC_TRY_COMPILE([#include ],[isnan(0.0);],, [ac_c99_math=no]) + AC_TRY_COMPILE([#include ],[isnormal(0.0);],, [ac_c99_math=no]) + AC_TRY_COMPILE([#include ],[signbit(0.0);],, [ac_c99_math=no]) + AC_TRY_COMPILE([#include ],[isgreater(0.0,0.0);],, [ac_c99_math=no]) + AC_TRY_COMPILE([#include ], + [isgreaterequal(0.0,0.0);],, [ac_c99_math=no]) + AC_TRY_COMPILE([#include ],[isless(0.0,0.0);],, [ac_c99_math=no]) + AC_TRY_COMPILE([#include ],[islessequal(0.0,0.0);],,[ac_c99_math=no]) + AC_TRY_COMPILE([#include ], + [islessgreater(0.0,0.0);],, [ac_c99_math=no]) + AC_TRY_COMPILE([#include ], + [isunordered(0.0,0.0);],, [ac_c99_math=no]) + AC_MSG_RESULT($ac_c99_math) + + # Check for the existence in of vscanf, et. al. + ac_c99_stdio=yes; + AC_MSG_CHECKING([for ISO C99 support in ]) + AC_TRY_COMPILE([#include ], + [snprintf("12", 0, "%i");],, [ac_c99_stdio=no]) + AC_TRY_COMPILE([#include + #include + void foo(char* fmt, ...) + {va_list args; va_start(args, fmt); + vfscanf(stderr, "%i", args);}], + [],, [ac_c99_stdio=no]) + AC_TRY_COMPILE([#include + #include + void foo(char* fmt, ...) + {va_list args; va_start(args, fmt); + vscanf("%i", args);}], + [],, [ac_c99_stdio=no]) + AC_TRY_COMPILE([#include + #include + void foo(char* fmt, ...) + {va_list args; va_start(args, fmt); + vsnprintf(fmt, 0, "%i", args);}], + [],, [ac_c99_stdio=no]) + AC_TRY_COMPILE([#include + #include + 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 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 ], + [ 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 ]) + AC_TRY_COMPILE([#include ], + [char* tmp; strtof("gnu", &tmp);],, [ac_c99_stdlib=no]) + AC_TRY_COMPILE([#include ], + [char* tmp; strtold("gnu", &tmp);],, [ac_c99_stdlib=no]) + AC_TRY_COMPILE([#include ], + [char* tmp; strtoll("gnu", &tmp, 10);],, [ac_c99_stdlib=no]) + AC_TRY_COMPILE([#include ], + [char* tmp; strtoull("gnu", &tmp, 10);],, [ac_c99_stdlib=no]) + AC_TRY_COMPILE([#include ], [llabs(10);],, [ac_c99_stdlib=no]) + AC_TRY_COMPILE([#include ], [lldiv(10,1);],, [ac_c99_stdlib=no]) + AC_TRY_COMPILE([#include ], [atoll("10");],, [ac_c99_stdlib=no]) + AC_TRY_COMPILE([#include ], [_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 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 ]) + AC_TRY_COMPILE([#include ], + [wcstold(L"10.0", NULL);],, [ac_c99_wchar=no]) + AC_TRY_COMPILE([#include ], + [wcstoll(L"10", NULL, 10);],, [ac_c99_wchar=no]) + AC_TRY_COMPILE([#include ], + [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 @@ -1444,61 +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 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' ;; @@ -1506,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) ]) @@ -1554,7 +1512,7 @@ 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 canadian crosses. if test x"$CANADIAN" = xyes; then @@ -1575,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.... @@ -1584,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) ]) @@ -1602,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= +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 . # Ulrich Drepper , 1995. @@ -1613,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 ], [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. @@ -1702,11 +1761,14 @@ 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 + 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 ; @@ -1734,3 +1796,4 @@ AC_DEFUN([AC_LIBTOOL_DLOPEN]) AC_DEFUN([AC_PROG_LD]) ]) +