diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 014eef94ccc..9873fb170d9 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,16 @@ +2005-04-01 Mark Mitchell + + * testsuite/Makefile.am (noinst_PROGRAMS): Remove. + (site.exp): Write out the path to the baseline file. + (check-abi): Use DejaGNU. + (check-abi-verbose): Remove. + * testsuite/Makefile.in: Regenerated. + * testsuite/abi_check.cc (main): Check the return value from + compare_symbols. + * testsuite/testsuite_abi.cc (compare_symbols): Return a value. + * testsuite/testsuite_abi.h (compare_symbols): Adjust prototype. + * testsuite/libstdc++-abi/abi.exp: New file. + 2005-03-31 Chris Jefferson * include/tr1/tuple: Support iteration via tuple_iterate.h. diff --git a/libstdc++-v3/testsuite/Makefile.am b/libstdc++-v3/testsuite/Makefile.am index 868e58beeb1..3cfa19b67ed 100644 --- a/libstdc++-v3/testsuite/Makefile.am +++ b/libstdc++-v3/testsuite/Makefile.am @@ -50,15 +50,6 @@ libv3test_a_SOURCES = \ testsuite_allocator.cc \ testsuite_hooks.cc -## Build support utilities. -if GLIBCXX_TEST_ABI -noinst_PROGRAMS = abi_check -else -noinst_PROGRAMS = -endif -abi_check_SOURCES = abi_check.cc -abi_check_DEPENDENCIES = libv3test.a - all-local: stamp_wchar stamp_thread # Enable wchar_t tests if capable. @@ -104,6 +95,7 @@ site.exp: Makefile @echo 'set target_triplet $(target_triplet)' >>site.tmp @echo 'set target_triplet $(target_triplet)' >>site.tmp @echo 'set libiconv "$(LIBICONV)"' >>site.tmp + @echo 'set baseline_file "$(baseline_file)"' >> site.tmp @echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp @test ! -f site.exp || \ sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp @@ -141,19 +133,10 @@ new-abi-baseline: if GLIBCXX_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} \ - 2>&1 | tee libstdc++-abi.sum - -@cp libstdc++-abi.sum libstdc++-abi.log - -check-abi-verbose: abi_check baseline_symbols current_symbols.txt - -@./abi_check --check-verbose ./current_symbols.txt ${baseline_file} \ - 2>&1 | tee libstdc++-abi.sum - -@cp libstdc++-abi.sum libstdc++-abi.log - +check-abi: baseline_symbols current_symbols.txt site.exp + -@runtest --tool libstdc++ abi.exp else check-abi: -check-abi-verbose: endif diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in index 1353a7a2309..d62b56a1d7b 100644 --- a/libstdc++-v3/testsuite/Makefile.in +++ b/libstdc++-v3/testsuite/Makefile.in @@ -14,8 +14,7 @@ @SET_MAKE@ - -SOURCES = $(libv3test_a_SOURCES) $(abi_check_SOURCES) +SOURCES = $(libv3test_a_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ @@ -42,7 +41,6 @@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/fragment.am -@GLIBCXX_TEST_ABI_TRUE@noinst_PROGRAMS = abi_check$(EXEEXT) subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ @@ -61,10 +59,6 @@ libv3test_a_LIBADD = am_libv3test_a_OBJECTS = testsuite_abi.$(OBJEXT) \ testsuite_allocator.$(OBJEXT) testsuite_hooks.$(OBJEXT) libv3test_a_OBJECTS = $(am_libv3test_a_OBJECTS) -PROGRAMS = $(noinst_PROGRAMS) -am_abi_check_OBJECTS = abi_check.$(OBJEXT) -abi_check_OBJECTS = $(am_abi_check_OBJECTS) -abi_check_LDADD = $(LDADD) DEFAULT_INCLUDES = depcomp = am__depfiles_maybe = @@ -74,8 +68,8 @@ LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -SOURCES = $(libv3test_a_SOURCES) $(abi_check_SOURCES) -DIST_SOURCES = $(libv3test_a_SOURCES) $(abi_check_SOURCES) +SOURCES = $(libv3test_a_SOURCES) +DIST_SOURCES = $(libv3test_a_SOURCES) ETAGS = etags CTAGS = ctags DEJATOOL = $(PACKAGE) @@ -289,8 +283,6 @@ libv3test_a_SOURCES = \ testsuite_allocator.cc \ testsuite_hooks.cc -abi_check_SOURCES = abi_check.cc -abi_check_DEPENDENCIES = libv3test.a # Generated lists of files to run. All of these names are valid make # targets, if you wish to generate a list manually. @@ -364,16 +356,6 @@ libv3test.a: $(libv3test_a_OBJECTS) $(libv3test_a_DEPENDENCIES) $(libv3test_a_AR) libv3test.a $(libv3test_a_OBJECTS) $(libv3test_a_LIBADD) $(RANLIB) libv3test.a -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done -abi_check$(EXEEXT): $(abi_check_OBJECTS) $(abi_check_DEPENDENCIES) - @rm -f abi_check$(EXEEXT) - $(CXXLINK) $(abi_check_LDFLAGS) $(abi_check_OBJECTS) $(abi_check_LDADD) $(LIBS) - mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -495,7 +477,7 @@ distdir: $(DISTFILES) check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU check-local check: check-am -all-am: Makefile $(LIBRARIES) $(PROGRAMS) all-local +all-am: Makefile $(LIBRARIES) all-local installdirs: install: install-am install-exec: install-exec-am @@ -525,7 +507,7 @@ maintainer-clean-generic: clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ - clean-noinstPROGRAMS mostlyclean-am + mostlyclean-am distclean: distclean-am -rm -f Makefile @@ -573,16 +555,16 @@ uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am all-local check check-DEJAGNU check-am \ check-local clean clean-generic clean-libtool \ - clean-noinstLIBRARIES clean-noinstPROGRAMS ctags distclean \ - distclean-DEJAGNU distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-info-am + clean-noinstLIBRARIES ctags distclean distclean-DEJAGNU \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-info-am all-local: stamp_wchar stamp_thread @@ -616,6 +598,7 @@ site.exp: Makefile @echo 'set target_triplet $(target_triplet)' >>site.tmp @echo 'set target_triplet $(target_triplet)' >>site.tmp @echo 'set libiconv "$(LIBICONV)"' >>site.tmp + @echo 'set baseline_file "$(baseline_file)"' >> site.tmp @echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp @test ! -f site.exp || \ sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp @@ -649,18 +632,9 @@ new-abi-baseline: # Use 'new-abi-baseline' to create an initial symbol file. Then run # 'check-abi' to test for changes against that file. -@GLIBCXX_TEST_ABI_TRUE@check-abi: abi_check baseline_symbols current_symbols.txt -@GLIBCXX_TEST_ABI_TRUE@ -@./abi_check --check ./current_symbols.txt ${baseline_file} \ -@GLIBCXX_TEST_ABI_TRUE@ 2>&1 | tee libstdc++-abi.sum -@GLIBCXX_TEST_ABI_TRUE@ -@cp libstdc++-abi.sum libstdc++-abi.log - -@GLIBCXX_TEST_ABI_TRUE@check-abi-verbose: abi_check baseline_symbols current_symbols.txt -@GLIBCXX_TEST_ABI_TRUE@ -@./abi_check --check-verbose ./current_symbols.txt ${baseline_file} \ -@GLIBCXX_TEST_ABI_TRUE@ 2>&1 | tee libstdc++-abi.sum -@GLIBCXX_TEST_ABI_TRUE@ -@cp libstdc++-abi.sum libstdc++-abi.log - +@GLIBCXX_TEST_ABI_TRUE@check-abi: baseline_symbols current_symbols.txt site.exp +@GLIBCXX_TEST_ABI_TRUE@ -@runtest --tool libstdc++ abi.exp @GLIBCXX_TEST_ABI_FALSE@check-abi: -@GLIBCXX_TEST_ABI_FALSE@check-abi-verbose: check-script: ${survey_script} -@(chmod + ${survey_script}; \ ${survey_script} 0) diff --git a/libstdc++-v3/testsuite/abi_check.cc b/libstdc++-v3/testsuite/abi_check.cc index e0991e7a4da..028db89c93e 100644 --- a/libstdc++-v3/testsuite/abi_check.cc +++ b/libstdc++-v3/testsuite/abi_check.cc @@ -77,7 +77,8 @@ main(int argc, char** argv) cerr << "Cannot read baseline file " << baseline_file << endl; exit(1); } - compare_symbols(baseline_file, test_file, verbose); + if (!compare_symbols(baseline_file, test_file, verbose)) + exit (1); } if (argv1 == "--examine") diff --git a/libstdc++-v3/testsuite/libstdc++-abi/abi.exp b/libstdc++-v3/testsuite/libstdc++-abi/abi.exp new file mode 100644 index 00000000000..12504f940f9 --- /dev/null +++ b/libstdc++-v3/testsuite/libstdc++-abi/abi.exp @@ -0,0 +1,36 @@ +# Copyright (C) 2005 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# If there is no current_symbols.txt file, then skip this test. +if { ![file exists "current_symbols.txt"] } { + return +} + +# Build the support objects. +v3-build_support + +# Build the abi_check program. +if { [v3_target_compile "$srcdir/abi_check.cc" "abi_check" \ + "executable" [list "additional_flags=-w"]] != "" } { + error "could not compile abi_check.cc" +} + +remote_download "target" $baseline_file "baseline_symbols.txt" +remote_download "target" "current_symbols.txt" "current_symbols.txt" +set result [${tool}_load "./abi_check" \ + [list "--check-verbose" "current_symbols.txt" \ + "baseline_symbols.txt"]] +[lindex $result 0] "abi_check" diff --git a/libstdc++-v3/testsuite/testsuite_abi.cc b/libstdc++-v3/testsuite/testsuite_abi.cc index 4b9534fb339..5f6e23ed83b 100644 --- a/libstdc++-v3/testsuite/testsuite_abi.cc +++ b/libstdc++-v3/testsuite/testsuite_abi.cc @@ -281,7 +281,7 @@ examine_symbol(const char* name, const char* file) { __throw_exception_again; } } -void +int compare_symbols(const char* baseline_file, const char* test_file, bool verbose) { @@ -393,6 +393,8 @@ compare_symbols(const char* baseline_file, const char* test_file, cout << "# of incompatible symbols:\t " << incompatible.size() << endl; cout << endl; cout << "using: " << baseline_file << endl; + + return !(missing_names.size() || incompatible.size()); } diff --git a/libstdc++-v3/testsuite/testsuite_abi.h b/libstdc++-v3/testsuite/testsuite_abi.h index 2078eb76fa3..e682274951f 100644 --- a/libstdc++-v3/testsuite/testsuite_abi.h +++ b/libstdc++-v3/testsuite/testsuite_abi.h @@ -94,7 +94,7 @@ get_symbol(const std::string& mangled, const symbols& list); extern "C" void examine_symbol(const char* name, const char* file); -extern "C" void +extern "C" int compare_symbols(const char* baseline_file, const char* test_file, bool verb);