diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index edc2e5b1877..0b6a12a9ca5 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,20 @@ +2003-06-16 Benjamin Kosnik + + * Makefile.am (check-abi): Move... + (new-abi-baseline): Move... + * testsuite/Makefile.am: ...here. + (new-abi-baseline): Conditionalize. + (check-abi): Conditionalize. + (check-abi-verbose): New. + * Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + * configure.in: Consolidate testsuite configure bits. + * acinclude.m4 (GLIBCPP_CONFIGURE_TESTSUITE): Same. + * configure: Regenerate. + * aclocal.m4: Regenerate. + * testsuite/abi_check.cc: Add --check-verbose. + Only output detailed information if --check-verbose. + 2003-06-16 Andreas Jaeger * testsuite/abi_check.cc: Create summary report. diff --git a/libstdc++-v3/Makefile.am b/libstdc++-v3/Makefile.am index d17784bdea3..58edd36937a 100644 --- a/libstdc++-v3/Makefile.am +++ b/libstdc++-v3/Makefile.am @@ -46,26 +46,6 @@ check-script-install: $(top_builddir)/mkcheck cd testsuite; \ @glibcpp_builddir@/mkcheck 1) -# Use 'new-abi-baseline' to create an initial symbol file. Then run -# 'check-abi' to test for changes against that file. -baseline_file = @baseline_file@ -check-abi: $(top_builddir)/testsuite/abi_check - -@(cd testsuite; \ - @glibcpp_srcdir@/config/abi/extract_symvers \ - ../src/.libs/libstdc++.so \ - ./current_symbols.txt && \ - ./abi_check --check ./current_symbols.txt ${baseline_file}) - -new-abi-baseline: - -@(output=${baseline_file}; \ - if test -f $${output}; then \ - output=$${output}.new; \ - t=`echo $${output} | sed 's=.*config/abi/=='`; \ - echo "Baseline file already exists, writing to $${t} instead."; \ - fi; \ - @glibcpp_srcdir@/config/abi/extract_symvers \ - src/.libs/libstdc++.so $${output}) - # These rules are messy, but are hella worth it. doxygen: -(srcdir=`cd ${top_srcdir}; ${PWD}`; \ diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in index 37efa7c29fc..cdd497cac6d 100644 --- a/libstdc++-v3/Makefile.in +++ b/libstdc++-v3/Makefile.in @@ -121,6 +121,7 @@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARN_FLAGS = @WARN_FLAGS@ WERROR = @WERROR@ +baseline_file = @baseline_file@ check_msgfmt = @check_msgfmt@ enable_shared = @enable_shared@ enable_static = @enable_static@ @@ -150,10 +151,6 @@ mkinstalldirs = $(SHELL) $(toplevel_srcdir)/mkinstalldirs PWD = $${PWDCMD-pwd} -# Use 'new-abi-baseline' to create an initial symbol file. Then run -# 'check-abi' to test for changes against that file. -baseline_file = @baseline_file@ - # Multilib support. MAKEOVERRIDES = @@ -496,22 +493,6 @@ check-script-install: $(top_builddir)/mkcheck -(chmod + $(top_builddir)/mkcheck; \ cd testsuite; \ @glibcpp_builddir@/mkcheck 1) -check-abi: $(top_builddir)/testsuite/abi_check - -@(cd testsuite; \ - @glibcpp_srcdir@/config/abi/extract_symvers \ - ../src/.libs/libstdc++.so \ - ./current_symbols.txt && \ - ./abi_check --check ./current_symbols.txt ${baseline_file}) - -new-abi-baseline: - -@(output=${baseline_file}; \ - if test -f $${output}; then \ - output=$${output}.new; \ - t=`echo $${output} | sed 's=.*config/abi/=='`; \ - echo "Baseline file already exists, writing to $${t} instead."; \ - fi; \ - @glibcpp_srcdir@/config/abi/extract_symvers \ - src/.libs/libstdc++.so $${output}) # These rules are messy, but are hella worth it. doxygen: diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index fe6d1195cf2..7fef68416c6 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -209,7 +209,7 @@ AC_DEFUN(GLIBCPP_CONFIGURE, [ #glibcpp_pch_comp=no #enable_cheaders=c #c_compatibility=no - enable_abi_check=no + #enable_abi_check=no #enable_symvers=no # Find platform-specific directories containing configuration info. In @@ -2049,20 +2049,33 @@ dnl the testsuite_hooks.h header. dnl dnl GLIBCPP_CONFIGURE_TESTSUITE [no args] AC_DEFUN(GLIBCPP_CONFIGURE_TESTSUITE, [ - GLIBCPP_CHECK_SETRLIMIT - # Look for setenv, so that extended locale tests can be performed. - GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv) + if test x"$GLIBCPP_IS_CROSS_COMPILING" = xfalse; then + # Do checks for memory limit functions. + GLIBCPP_CHECK_SETRLIMIT + + # Look for setenv, so that extended locale tests can be performed. + GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv) + fi # Export file names for ABI checking. baseline_file="${glibcpp_srcdir}/config/abi/${abi_baseline_pair}\$(MULTISUBDIR)/baseline_symbols.txt" AC_SUBST(baseline_file) - dnl XXX move to configure.host? - case "$target" in - *-*-cygwin* ) enable_abi_check=no ;; - * ) enable_abi_check=yes ;; - esac + # Determine if checking the ABI is desirable. + if test x$enable_symvers = xno; then + enable_abi_check=no + else + case "$host" in + *-*-cygwin*) + enable_abi_check=no ;; + *) + enable_abi_check=yes ;; + esac + fi + + AM_CONDITIONAL(GLIBCPP_TEST_WCHAR_T, test "$enable_wchar_t" = yes) + AM_CONDITIONAL(GLIBCPP_TEST_ABI, test "$enable_abi_check" = yes) ]) diff --git a/libstdc++-v3/aclocal.m4 b/libstdc++-v3/aclocal.m4 index ae824634c26..34d40f102b6 100644 --- a/libstdc++-v3/aclocal.m4 +++ b/libstdc++-v3/aclocal.m4 @@ -221,7 +221,7 @@ AC_DEFUN(GLIBCPP_CONFIGURE, [ #glibcpp_pch_comp=no #enable_cheaders=c #c_compatibility=no - enable_abi_check=no + #enable_abi_check=no #enable_symvers=no # Find platform-specific directories containing configuration info. In @@ -2061,20 +2061,33 @@ dnl the testsuite_hooks.h header. dnl dnl GLIBCPP_CONFIGURE_TESTSUITE [no args] AC_DEFUN(GLIBCPP_CONFIGURE_TESTSUITE, [ - GLIBCPP_CHECK_SETRLIMIT - # Look for setenv, so that extended locale tests can be performed. - GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv) + if test x"$GLIBCPP_IS_CROSS_COMPILING" = xfalse; then + # Do checks for memory limit functions. + GLIBCPP_CHECK_SETRLIMIT + + # Look for setenv, so that extended locale tests can be performed. + GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_3(setenv) + fi # Export file names for ABI checking. baseline_file="${glibcpp_srcdir}/config/abi/${abi_baseline_pair}\$(MULTISUBDIR)/baseline_symbols.txt" AC_SUBST(baseline_file) - dnl XXX move to configure.host? - case "$target" in - *-*-cygwin* ) enable_abi_check=no ;; - * ) enable_abi_check=yes ;; - esac + # Determine if checking the ABI is desirable. + if test x$enable_symvers = xno; then + enable_abi_check=no + else + case "$host" in + *-*-cygwin*) + enable_abi_check=no ;; + *) + enable_abi_check=yes ;; + esac + fi + + AM_CONDITIONAL(GLIBCPP_TEST_WCHAR_T, test "$enable_wchar_t" = yes) + AM_CONDITIONAL(GLIBCPP_TEST_ABI, test "$enable_abi_check" = yes) ]) diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index a6623c42ebe..a6b7b910264 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -1504,7 +1504,7 @@ ac_exeext=$EXEEXT #glibcpp_pch_comp=no #enable_cheaders=c #c_compatibility=no - enable_abi_check=no + #enable_abi_check=no #enable_symvers=no # Find platform-specific directories containing configuration info. In @@ -23161,328 +23161,9 @@ EOF fi - - # Establish limits on memory usage during 'make check' - - - setrlimit_have_headers=yes - for ac_hdr in unistd.h sys/time.h sys/resource.h -do -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:23174: checking for $ac_hdr" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:23184: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` - cat >> confdefs.h <&6 -setrlimit_have_headers=no -fi -done - - # If don't have the headers, then we can't run the tests now, and we - # won't be seeing any of these during testsuite compilation. - if test $setrlimit_have_headers = yes; then - # Can't do these in a loop, else the resulting syntax is wrong. - - cat > conftest.$ac_ext < - #include - #include - -int main() { - int f = RLIMIT_DATA ; -; return 0; } -EOF -if { (eval echo configure:23227: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - glibcpp_mresult=1 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - glibcpp_mresult=0 -fi -rm -f conftest* - cat >> confdefs.h < conftest.$ac_ext < - #include - #include - -int main() { - int f = RLIMIT_RSS ; -; return 0; } -EOF -if { (eval echo configure:23254: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - glibcpp_mresult=1 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - glibcpp_mresult=0 -fi -rm -f conftest* - cat >> confdefs.h < conftest.$ac_ext < - #include - #include - -int main() { - int f = RLIMIT_VMEM ; -; return 0; } -EOF -if { (eval echo configure:23281: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - glibcpp_mresult=1 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - glibcpp_mresult=0 -fi -rm -f conftest* - cat >> confdefs.h < conftest.$ac_ext < - #include - #include - -int main() { - int f = RLIMIT_AS ; -; return 0; } -EOF -if { (eval echo configure:23308: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - glibcpp_mresult=1 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - glibcpp_mresult=0 -fi -rm -f conftest* - cat >> confdefs.h <&6 -else - - cat > conftest.$ac_ext < - #include - #include - -int main() { - struct rlimit r; setrlimit(0, &r); -; return 0; } -EOF -if { (eval echo configure:23340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_setrlimit=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_setrlimit=no -fi -rm -f conftest* - fi - fi - - echo $ac_n "checking for testsuite memory limit support""... $ac_c" 1>&6 -echo "configure:23356: checking for testsuite memory limit support" >&5 - if test $setrlimit_have_headers = yes && test $ac_setrlimit = yes; then - ac_mem_limits=yes - cat >> confdefs.h <<\EOF -#define _GLIBCPP_MEM_LIMITS 1 -EOF - - else - ac_mem_limits=no - fi - echo "$ac_t""$ac_mem_limits" 1>&6 - - - # Look for setenv, so that extended locale tests can be performed. - - echo $ac_n "checking for setenv declaration""... $ac_c" 1>&6 -echo "configure:23372: checking for setenv declaration" >&5 - if test x${glibcpp_cv_func_setenv_use+set} != xset; then - if eval "test \"`echo '$''{'glibcpp_cv_func_setenv_use'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - - - ac_ext=C -# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cxx_cross - - cat > conftest.$ac_ext < -int main() { - setenv(0, 0, 0); -; return 0; } -EOF -if { (eval echo configure:23394: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - glibcpp_cv_func_setenv_use=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - glibcpp_cv_func_setenv_use=no -fi -rm -f conftest* - ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - - -fi - - fi - echo "$ac_t""$glibcpp_cv_func_setenv_use" 1>&6 - if test x$glibcpp_cv_func_setenv_use = x"yes"; then - for ac_func in setenv -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:23420: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:23448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <&6 -fi -done - - fi - - - # Export file names for ABI checking. - baseline_file="${glibcpp_srcdir}/config/abi/${abi_baseline_pair}\$(MULTISUBDIR)/baseline_symbols.txt" - - - case "$target" in - *-*-cygwin* ) enable_abi_check=no ;; - * ) enable_abi_check=yes ;; - esac - -fi - -# This depends on the possibly-skipped linker test above. +# This depends on GLIBCPP_CHECK_LINKER_FEATURES, but without it assumes no. # Check whether --enable-symvers or --disable-symvers was given. if test "${enable_symvers+set}" = set; then enableval="$enable_symvers" @@ -23509,18 +23190,18 @@ fi # Check to see if libgcc_s exists, indicating that shared libgcc is possible. if test $enable_symvers != no; then echo $ac_n "checking for shared libgcc""... $ac_c" 1>&6 -echo "configure:23513: checking for shared libgcc" >&5 +echo "configure:23194: checking for shared libgcc" >&5 ac_save_CFLAGS="$CFLAGS" CFLAGS=' -lgcc_s' cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:23205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* glibcpp_shared_libgcc=yes else @@ -23555,14 +23236,14 @@ if test $enable_symvers = yes ; then echo 'FOO { global: f[a-z]o; local: *; };' > conftest.map cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:23247: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* enable_symvers=gnu else @@ -23608,10 +23289,359 @@ else GLIBCPP_BUILD_VERSIONED_SHLIB_FALSE= fi echo $ac_n "checking versioning on shared library symbols""... $ac_c" 1>&6 -echo "configure:23612: checking versioning on shared library symbols" >&5 +echo "configure:23293: checking versioning on shared library symbols" >&5 echo "$ac_t""$enable_symvers" 1>&6 +# This depends on GLIBCPP_ENABLE_SYMVERS and GLIBCPP_IS_CROSS_COMPILING. + + + if test x"$GLIBCPP_IS_CROSS_COMPILING" = xfalse; then + # Do checks for memory limit functions. + + setrlimit_have_headers=yes + for ac_hdr in unistd.h sys/time.h sys/resource.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:23308: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:23318: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +setrlimit_have_headers=no +fi +done + + # If don't have the headers, then we can't run the tests now, and we + # won't be seeing any of these during testsuite compilation. + if test $setrlimit_have_headers = yes; then + # Can't do these in a loop, else the resulting syntax is wrong. + + cat > conftest.$ac_ext < + #include + #include + +int main() { + int f = RLIMIT_DATA ; +; return 0; } +EOF +if { (eval echo configure:23361: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + glibcpp_mresult=1 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + glibcpp_mresult=0 +fi +rm -f conftest* + cat >> confdefs.h < conftest.$ac_ext < + #include + #include + +int main() { + int f = RLIMIT_RSS ; +; return 0; } +EOF +if { (eval echo configure:23388: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + glibcpp_mresult=1 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + glibcpp_mresult=0 +fi +rm -f conftest* + cat >> confdefs.h < conftest.$ac_ext < + #include + #include + +int main() { + int f = RLIMIT_VMEM ; +; return 0; } +EOF +if { (eval echo configure:23415: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + glibcpp_mresult=1 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + glibcpp_mresult=0 +fi +rm -f conftest* + cat >> confdefs.h < conftest.$ac_ext < + #include + #include + +int main() { + int f = RLIMIT_AS ; +; return 0; } +EOF +if { (eval echo configure:23442: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + glibcpp_mresult=1 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + glibcpp_mresult=0 +fi +rm -f conftest* + cat >> confdefs.h <&6 +else + + cat > conftest.$ac_ext < + #include + #include + +int main() { + struct rlimit r; setrlimit(0, &r); +; return 0; } +EOF +if { (eval echo configure:23474: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_setrlimit=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_setrlimit=no +fi +rm -f conftest* + +fi + + fi + + echo $ac_n "checking for testsuite memory limit support""... $ac_c" 1>&6 +echo "configure:23490: checking for testsuite memory limit support" >&5 + if test $setrlimit_have_headers = yes && test $ac_setrlimit = yes; then + ac_mem_limits=yes + cat >> confdefs.h <<\EOF +#define _GLIBCPP_MEM_LIMITS 1 +EOF + + else + ac_mem_limits=no + fi + echo "$ac_t""$ac_mem_limits" 1>&6 + + + # Look for setenv, so that extended locale tests can be performed. + + echo $ac_n "checking for setenv declaration""... $ac_c" 1>&6 +echo "configure:23506: checking for setenv declaration" >&5 + if test x${glibcpp_cv_func_setenv_use+set} != xset; then + if eval "test \"`echo '$''{'glibcpp_cv_func_setenv_use'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + + ac_ext=C +# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cxx_cross + + cat > conftest.$ac_ext < +int main() { + setenv(0, 0, 0); +; return 0; } +EOF +if { (eval echo configure:23528: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + glibcpp_cv_func_setenv_use=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + glibcpp_cv_func_setenv_use=no +fi +rm -f conftest* + ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + + +fi + + fi + echo "$ac_t""$glibcpp_cv_func_setenv_use" 1>&6 + if test x$glibcpp_cv_func_setenv_use = x"yes"; then + for ac_func in setenv +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:23554: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:23582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + fi + + fi + + # Export file names for ABI checking. + baseline_file="${glibcpp_srcdir}/config/abi/${abi_baseline_pair}\$(MULTISUBDIR)/baseline_symbols.txt" + + + # Determine if checking the ABI is desirable. + if test x$enable_symvers = xno; then + enable_abi_check=no + else + case "$host" in + *-*-cygwin*) + enable_abi_check=no ;; + *) + enable_abi_check=yes ;; + esac + fi + + + +if test "$enable_wchar_t" = yes; then + GLIBCPP_TEST_WCHAR_T_TRUE= + GLIBCPP_TEST_WCHAR_T_FALSE='#' +else + GLIBCPP_TEST_WCHAR_T_TRUE='#' + GLIBCPP_TEST_WCHAR_T_FALSE= +fi + + +if test "$enable_abi_check" = yes; then + GLIBCPP_TEST_ABI_TRUE= + GLIBCPP_TEST_ABI_FALSE='#' +else + GLIBCPP_TEST_ABI_TRUE='#' + GLIBCPP_TEST_ABI_FALSE= +fi + + # Propagate the target-specific source directories through the build chain. # (Nothing currently uses cpu_include_dir directly; only ATOMICITYH # uses it, and it only gets used in this file.) @@ -23620,7 +23650,7 @@ ATOMICITY_INC_SRCDIR=config/${ATOMICITYH} -# Set up cross-compile flags and all AM_CONDITIONALs. +# Determine cross-compile flags and all AM_CONDITIONALs. @@ -23640,24 +23670,6 @@ else GLIBCPP_BUILD_LIBMATH_TRUE='#' GLIBCPP_BUILD_LIBMATH_FALSE= fi - - -if test "$enable_wchar_t" = yes; then - GLIBCPP_TEST_WCHAR_T_TRUE= - GLIBCPP_TEST_WCHAR_T_FALSE='#' -else - GLIBCPP_TEST_WCHAR_T_TRUE='#' - GLIBCPP_TEST_WCHAR_T_FALSE= -fi - - -if test "$enable_abi_check" = yes; then - GLIBCPP_BUILD_ABI_CHECK_TRUE= - GLIBCPP_BUILD_ABI_CHECK_FALSE='#' -else - GLIBCPP_BUILD_ABI_CHECK_TRUE='#' - GLIBCPP_BUILD_ABI_CHECK_FALSE= -fi cat > confcache <<\EOF # This file is a shell script that caches the results of configure @@ -23723,7 +23735,7 @@ glibcpp_prefixdir=${prefix} # Process the option --with-gxx-include-dir= echo $ac_n "checking for --with-gxx-include-dir""... $ac_c" 1>&6 -echo "configure:23727: checking for --with-gxx-include-dir" >&5 +echo "configure:23739: checking for --with-gxx-include-dir" >&5 # Check whether --with-gxx-include-dir or --without-gxx-include-dir was given. if test "${with_gxx_include_dir+set}" = set; then withval="$with_gxx_include_dir" @@ -23747,7 +23759,7 @@ echo "$ac_t""$gxx_include_dir" 1>&6 # Process the option "--enable-version-specific-runtime-libs" echo $ac_n "checking for --enable-version-specific-runtime-libs""... $ac_c" 1>&6 -echo "configure:23751: checking for --enable-version-specific-runtime-libs" >&5 +echo "configure:23763: checking for --enable-version-specific-runtime-libs" >&5 # Check whether --enable-version-specific-runtime-libs or --disable-version-specific-runtime-libs was given. if test "${enable_version_specific_runtime_libs+set}" = set; then enableval="$enable_version_specific_runtime_libs" @@ -23798,7 +23810,7 @@ if test x"$glibcpp_toolexecdir" = x"no"; then fi echo $ac_n "checking for install location""... $ac_c" 1>&6 -echo "configure:23802: checking for install location" >&5 +echo "configure:23814: checking for install location" >&5 echo "$ac_t""$gxx_include_dir" 1>&6 @@ -24080,10 +24092,14 @@ s%@SECTION_LDFLAGS@%$SECTION_LDFLAGS%g s%@OPT_LDFLAGS@%$OPT_LDFLAGS%g s%@LIBMATHOBJS@%$LIBMATHOBJS%g s%@WERROR@%$WERROR%g -s%@baseline_file@%$baseline_file%g s%@SYMVER_MAP@%$SYMVER_MAP%g s%@GLIBCPP_BUILD_VERSIONED_SHLIB_TRUE@%$GLIBCPP_BUILD_VERSIONED_SHLIB_TRUE%g s%@GLIBCPP_BUILD_VERSIONED_SHLIB_FALSE@%$GLIBCPP_BUILD_VERSIONED_SHLIB_FALSE%g +s%@baseline_file@%$baseline_file%g +s%@GLIBCPP_TEST_WCHAR_T_TRUE@%$GLIBCPP_TEST_WCHAR_T_TRUE%g +s%@GLIBCPP_TEST_WCHAR_T_FALSE@%$GLIBCPP_TEST_WCHAR_T_FALSE%g +s%@GLIBCPP_TEST_ABI_TRUE@%$GLIBCPP_TEST_ABI_TRUE%g +s%@GLIBCPP_TEST_ABI_FALSE@%$GLIBCPP_TEST_ABI_FALSE%g s%@OS_INC_SRCDIR@%$OS_INC_SRCDIR%g s%@ATOMICITY_INC_SRCDIR@%$ATOMICITY_INC_SRCDIR%g s%@GLIBCPP_IS_CROSS_COMPILING@%$GLIBCPP_IS_CROSS_COMPILING%g @@ -24091,10 +24107,6 @@ s%@CANADIAN_TRUE@%$CANADIAN_TRUE%g s%@CANADIAN_FALSE@%$CANADIAN_FALSE%g s%@GLIBCPP_BUILD_LIBMATH_TRUE@%$GLIBCPP_BUILD_LIBMATH_TRUE%g s%@GLIBCPP_BUILD_LIBMATH_FALSE@%$GLIBCPP_BUILD_LIBMATH_FALSE%g -s%@GLIBCPP_TEST_WCHAR_T_TRUE@%$GLIBCPP_TEST_WCHAR_T_TRUE%g -s%@GLIBCPP_TEST_WCHAR_T_FALSE@%$GLIBCPP_TEST_WCHAR_T_FALSE%g -s%@GLIBCPP_BUILD_ABI_CHECK_TRUE@%$GLIBCPP_BUILD_ABI_CHECK_TRUE%g -s%@GLIBCPP_BUILD_ABI_CHECK_FALSE@%$GLIBCPP_BUILD_ABI_CHECK_FALSE%g s%@glibcpp_prefixdir@%$glibcpp_prefixdir%g s%@gxx_include_dir@%$gxx_include_dir%g s%@glibcpp_toolexecdir@%$glibcpp_toolexecdir%g diff --git a/libstdc++-v3/configure.in b/libstdc++-v3/configure.in index c5fa8fcac3f..f7ff247602b 100644 --- a/libstdc++-v3/configure.in +++ b/libstdc++-v3/configure.in @@ -431,14 +431,14 @@ else ]) AC_FUNC_MMAP - - # Establish limits on memory usage during 'make check' - GLIBCPP_CONFIGURE_TESTSUITE fi -# This depends on the possibly-skipped linker test above. +# This depends on GLIBCPP_CHECK_LINKER_FEATURES, but without it assumes no. GLIBCPP_ENABLE_SYMVERS([yes]) +# This depends on GLIBCPP_ENABLE_SYMVERS and GLIBCPP_IS_CROSS_COMPILING. +GLIBCPP_CONFIGURE_TESTSUITE + # Propagate the target-specific source directories through the build chain. # (Nothing currently uses cpu_include_dir directly; only ATOMICITYH # uses it, and it only gets used in this file.) @@ -447,15 +447,11 @@ ATOMICITY_INC_SRCDIR=config/${ATOMICITYH} AC_SUBST(OS_INC_SRCDIR) AC_SUBST(ATOMICITY_INC_SRCDIR) -# Set up cross-compile flags and all AM_CONDITIONALs. +# Determine cross-compile flags and all AM_CONDITIONALs. AC_SUBST(GLIBCPP_IS_CROSS_COMPILING) AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes) dnl from GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT: AM_CONDITIONAL(GLIBCPP_BUILD_LIBMATH, test "$need_libmath" = yes) -dnl from GLIBCPP_CHECK_WCHAR_T_SUPPORT: -AM_CONDITIONAL(GLIBCPP_TEST_WCHAR_T, test "$enable_wchar_t" = yes) -dnl from GLIBCPP_CONFIGURE_TESTSUITE: -AM_CONDITIONAL(GLIBCPP_BUILD_ABI_CHECK, test "$enable_abi_check" = yes) AC_CACHE_SAVE diff --git a/libstdc++-v3/testsuite/Makefile.am b/libstdc++-v3/testsuite/Makefile.am index 9ea34275f94..7e5af5e37c9 100644 --- a/libstdc++-v3/testsuite/Makefile.am +++ b/libstdc++-v3/testsuite/Makefile.am @@ -54,23 +54,67 @@ noinst_LIBRARIES = libv3test.a libv3test_a_SOURCES = testsuite_hooks.cc testsuite_allocator.cc ## Build support utilities. -## Only build this as native, as need to find startup files and libc to link. -if GLIBCPP_BUILD_ABI_CHECK +if GLIBCPP_TEST_ABI noinst_PROGRAMS = abi_check else noinst_PROGRAMS = endif abi_check_SOURCES = abi_check.cc +all-local: stamp_wchar + # Enable wchar_t tests if capable. if GLIBCPP_TEST_WCHAR_T -all-local: stamp_wchar -else -all-local: -endif - stamp_wchar: touch testsuite_wchar_t +else +stamp_wchar: +endif + +# Override this so local rules are possible. +check-am: + $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU; \ + $(MAKE) $(AM_MAKEFLAGS) check-local + +check-local: check-abi + +baseline_file = @baseline_file@ +extract_symvers = @glibcpp_srcdir@/config/abi/extract_symvers + +current_symbols.txt: ${extract_symvers} ../src/.libs/libstdc++.so + -@(${extract_symvers} ../src/.libs/libstdc++.so current_symbols.txt) + +baseline_symbols: + -@(output=${baseline_file}; \ + if test ! -f $${output}; then \ + echo "Baseline file doesn't exist."; \ + echo "Try 'make new-abi-baseline' to create it."; \ + exit 1; \ + fi; \ + touch baseline_symbols) + +new-abi-baseline: + -@(output=${baseline_file}; \ + if test -f $${output}; then \ + output=$${output}.new; \ + t=`echo $${output} | sed 's=.*config/abi/=='`; \ + echo "Baseline file already exists, writing to $${t} instead."; \ + fi; \ + ${extract_symvers} ../src/.libs/libstdc++.so $${output}) + +if GLIBCPP_TEST_ABI +# Use 'new-abi-baseline' to create an initial symbol file. Then run +# 'check-abi' to test for changes against that file. +check-abi: abi_check baseline_symbols current_symbols.txt + -@(./abi_check --check ./current_symbols.txt ${baseline_file}) + +check-abi-verbose: abi_check baseline_symbols current_symbols.txt + -@(./abi_check --check-verbose ./current_symbols.txt ${baseline_file}) +else +check-abi: +check-abi-verbose: +endif + # By adding these files here, automake will remove them for 'make clean' CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \ diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in index 3c6cd842bbd..bd1e20b541c 100644 --- a/libstdc++-v3/testsuite/Makefile.in +++ b/libstdc++-v3/testsuite/Makefile.in @@ -120,7 +120,6 @@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARN_FLAGS = @WARN_FLAGS@ WERROR = @WERROR@ -baseline_file = @baseline_file@ check_msgfmt = @check_msgfmt@ enable_shared = @enable_shared@ enable_static = @enable_static@ @@ -173,10 +172,13 @@ INCLUDES = \ noinst_LIBRARIES = libv3test.a libv3test_a_SOURCES = testsuite_hooks.cc testsuite_allocator.cc -@GLIBCPP_BUILD_ABI_CHECK_TRUE@noinst_PROGRAMS = @GLIBCPP_BUILD_ABI_CHECK_TRUE@abi_check -@GLIBCPP_BUILD_ABI_CHECK_FALSE@noinst_PROGRAMS = +@GLIBCPP_TEST_ABI_TRUE@noinst_PROGRAMS = @GLIBCPP_TEST_ABI_TRUE@abi_check +@GLIBCPP_TEST_ABI_FALSE@noinst_PROGRAMS = abi_check_SOURCES = abi_check.cc +baseline_file = @baseline_file@ +extract_symvers = @glibcpp_srcdir@/config/abi/extract_symvers + # By adding these files here, automake will remove them for 'make clean' CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \ testsuite_* site.exp abi_check @@ -194,7 +196,7 @@ LIBS = @LIBS@ libv3test_a_LIBADD = libv3test_a_OBJECTS = testsuite_hooks.$(OBJEXT) \ testsuite_allocator.$(OBJEXT) -@GLIBCPP_BUILD_ABI_CHECK_FALSE@noinst_PROGRAMS = +@GLIBCPP_TEST_ABI_FALSE@noinst_PROGRAMS = PROGRAMS = $(noinst_PROGRAMS) abi_check_OBJECTS = abi_check.$(OBJEXT) @@ -386,7 +388,7 @@ info: info-am dvi-am: dvi: dvi-am check-am: - $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU + $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU check-local check: check-am installcheck-am: installcheck: installcheck-am @@ -456,19 +458,58 @@ clean-libtool maintainer-clean-libtool mostlyclean-noinstPROGRAMS \ distclean-noinstPROGRAMS clean-noinstPROGRAMS \ maintainer-clean-noinstPROGRAMS tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir check-DEJAGNU info-am info \ -dvi-am dvi check check-am installcheck-am installcheck install-info-am \ -install-info install-exec-am install-exec install-data-am install-data \ -install-am install uninstall-am uninstall all-local all-redirect all-am \ -all installdirs mostlyclean-generic distclean-generic clean-generic \ -maintainer-clean-generic clean mostlyclean distclean maintainer-clean +dvi-am dvi check-local check check-am installcheck-am installcheck \ +install-info-am install-info install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-local all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean +all-local: stamp_wchar + # Enable wchar_t tests if capable. -@GLIBCPP_TEST_WCHAR_T_TRUE@all-local: stamp_wchar -@GLIBCPP_TEST_WCHAR_T_FALSE@all-local: +@GLIBCPP_TEST_WCHAR_T_TRUE@stamp_wchar: +@GLIBCPP_TEST_WCHAR_T_TRUE@ touch testsuite_wchar_t +@GLIBCPP_TEST_WCHAR_T_FALSE@stamp_wchar: -stamp_wchar: - touch testsuite_wchar_t +# Override this so local rules are possible. +check-am: + $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU; \ + $(MAKE) $(AM_MAKEFLAGS) check-local + +check-local: check-abi + +current_symbols.txt: ${extract_symvers} ../src/.libs/libstdc++.so + -@(${extract_symvers} ../src/.libs/libstdc++.so current_symbols.txt) + +baseline_symbols: + -@(output=${baseline_file}; \ + if test ! -f $${output}; then \ + echo "Baseline file doesn't exist."; \ + echo "Try 'make new-abi-baseline' to create it."; \ + exit 1; \ + fi; \ + touch baseline_symbols) + +new-abi-baseline: + -@(output=${baseline_file}; \ + if test -f $${output}; then \ + output=$${output}.new; \ + t=`echo $${output} | sed 's=.*config/abi/=='`; \ + echo "Baseline file already exists, writing to $${t} instead."; \ + fi; \ + ${extract_symvers} ../src/.libs/libstdc++.so $${output}) + +# Use 'new-abi-baseline' to create an initial symbol file. Then run +# 'check-abi' to test for changes against that file. +@GLIBCPP_TEST_ABI_TRUE@check-abi: abi_check baseline_symbols current_symbols.txt +@GLIBCPP_TEST_ABI_TRUE@ -@(./abi_check --check ./current_symbols.txt ${baseline_file}) + +@GLIBCPP_TEST_ABI_TRUE@check-abi-verbose: abi_check baseline_symbols current_symbols.txt +@GLIBCPP_TEST_ABI_TRUE@ -@(./abi_check --check-verbose ./current_symbols.txt ${baseline_file}) +@GLIBCPP_TEST_ABI_FALSE@check-abi: +@GLIBCPP_TEST_ABI_FALSE@check-abi-verbose: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/libstdc++-v3/testsuite/abi_check.cc b/libstdc++-v3/testsuite/abi_check.cc index c2768258f09..c4d7805e086 100644 --- a/libstdc++-v3/testsuite/abi_check.cc +++ b/libstdc++-v3/testsuite/abi_check.cc @@ -313,17 +313,20 @@ main(int argc, char** argv) using namespace std; // Get arguments. (Heading towards getopt_long, I can feel it.) - string argv1; - if (argc < 4 || (string("--help") == (argv1 = argv[1]))) + bool verbose = false; + string argv1 = argc > 1 ? argv[1] : ""; + if (argv1 == "--help" || argc < 4) { - cerr << "Usage: abi_check --check cur baseline\n" - " --help\n\n" - "Where CUR is a file containing the current results from\n" + cerr << "usage: abi_check --check current baseline\n" + " --check-verbose current baseline\n" + " --help\n\n" + "Where CURRENT is a file containing the current results from\n" "extract_symvers, and BASELINE is one from config/abi.\n" << endl; exit(1); } - + else if (argv1 == "--check-verbose") + verbose = true; // Quick sanity/setup check for arguments. const char* test_file = argv[2]; @@ -412,21 +415,21 @@ main(int argc, char** argv) } // Report results. - if (added_names.size()) + if (verbose && added_names.size()) { cout << added_names.size() << " added symbols " << endl; for (size_t j = 0; j < added_names.size() ; ++j) report_symbol_info(test_symbols[added_names[j]], j + 1); } - if (missing_names.size()) + if (verbose && missing_names.size()) { cout << missing_names.size() << " missing symbols " << endl; for (size_t j = 0; j < missing_names.size() ; ++j) report_symbol_info(baseline_symbols[missing_names[j]], j + 1); } - if (incompatible.size ()) + if (verbose && incompatible.size()) { cout << incompatible.size() << " incompatible symbols " << endl; for (size_t j = 0; j < incompatible.size() ; ++j) @@ -441,11 +444,13 @@ main(int argc, char** argv) } } - cout << "\n\t\t=== libstdc++-v3 check-abi Summary for " << baseline_file - << " ===" << endl << endl; + cout << "\n\t\t=== libstdc++-v3 check-abi Summary ===" << endl; + cout << endl; cout << "# of added symbols:\t\t " << added_names.size() << endl; cout << "# of missing symbols:\t\t " << missing_names.size() << endl; cout << "# of incompatible symbols:\t " << incompatible.size() << endl; + cout << endl; + cout << "using: " << baseline_file << endl; return 0; }