aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2005-03-23 16:45:45 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2005-03-23 16:45:45 +0000
commit0b3deaafebd053f8bc5f52c38d64909068f27d03 (patch)
treeb99d5b20a5e77f6a8312c03317a424ec844ed67b /libstdc++-v3
parent17ac08e2fb86675af83171afbeccfe7936c48709 (diff)
downloadgcc-0b3deaafebd053f8bc5f52c38d64909068f27d03.zip
gcc-0b3deaafebd053f8bc5f52c38d64909068f27d03.tar.gz
gcc-0b3deaafebd053f8bc5f52c38d64909068f27d03.tar.bz2
target-supports.exp (check_iconv_available): Default libiconv to -liconv, if there is no definition.
* lib/target-supports.exp (check_iconv_available): Default libiconv to -liconv, if there is no definition. * testsuite/lib/libstdc++.exp (libstdc++_init): Improve handling of compilers not in the build directory. (libstdc++_wchar_t): New variable. (libstdc++_threads): Likewise. (libstdc++_test_objs): Likewise. (v3_target_compile): Use libstdc++_test_objs. (v3-list-tests): Remove. (listdc++_build_support): New function. * testsuite/libstdc++-dg/normal.exp: Rework to dynamically generate list of tests. From-SVN: r96934
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog13
-rw-r--r--libstdc++-v3/testsuite/lib/libstdc++.exp129
-rw-r--r--libstdc++-v3/testsuite/libstdc++-dg/normal.exp41
3 files changed, 131 insertions, 52 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index fe273ac..c62add6 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,16 @@
+2005-03-23 Mark Mitchell <mark@codesourcery.com>
+
+ * testsuite/lib/libstdc++.exp (libstdc++_init): Improve handling
+ of compilers not in the build directory.
+ (libstdc++_wchar_t): New variable.
+ (libstdc++_threads): Likewise.
+ (libstdc++_test_objs): Likewise.
+ (v3_target_compile): Use libstdc++_test_objs.
+ (v3-list-tests): Remove.
+ (listdc++_build_support): New function.
+ * testsuite/libstdc++-dg/normal.exp: Rework to dynamically
+ generate list of tests.
+
2005-03-21 Chris Jefferson <chris@bubblescope.net>
PR libstdc++/20577
diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp
index 0ac4196..5d7b642 100644
--- a/libstdc++-v3/testsuite/lib/libstdc++.exp
+++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
@@ -134,27 +134,32 @@ proc libstdc++_init { testfile } {
v3track gccdir 3
# Compute what needs to be added to the existing LD_LIBRARY_PATH.
- set ld_library_path ""
- append ld_library_path ":${gccdir}"
- set compiler ${gccdir}/g++
- if { [is_remote host] == 0 && [which $compiler] != 0 } {
- foreach i "[exec $compiler --print-multi-lib]" {
- set mldir ""
- regexp -- "\[a-z0-9=/\.-\]*;" $i mldir
- set mldir [string trimright $mldir "\;@"]
- if { "$mldir" == "." } {
- continue
- }
- if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } {
- append ld_library_path ":${gccdir}/${mldir}"
- }
- }
- }
- append ld_library_path ":${blddir}/src/.libs"
+ if {$gccdir != ""} {
+ set ld_library_path ""
+ append ld_library_path ":${gccdir}"
+ set compiler ${gccdir}/g++
+ append ld_library_path ":${blddir}/src/.libs"
+
+ if { [is_remote host] == 0 && [which $compiler] != 0 } {
+ foreach i "[exec $compiler --print-multi-lib]" {
+ set mldir ""
+ regexp -- "\[a-z0-9=/\.-\]*;" $i mldir
+ set mldir [string trimright $mldir "\;@"]
+ if { "$mldir" == "." } {
+ continue
+ }
+ if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } {
+ append ld_library_path ":${gccdir}/${mldir}"
+ }
+ }
+ }
- set_ld_library_path_env_vars
- if [info exists env(LD_LIBRARY_PATH)] {
- verbose -log "LD_LIBRARY_PATH = $env(LD_LIBRARY_PATH)"
+ set_ld_library_path_env_vars
+ if [info exists env(LD_LIBRARY_PATH)] {
+ verbose -log "LD_LIBRARY_PATH = $env(LD_LIBRARY_PATH)"
+ }
+ } else {
+ set compiler [transform "g++"]
}
# Do a bunch of handstands and backflips for cross compiling and
@@ -176,7 +181,7 @@ proc libstdc++_init { testfile } {
set includes [exec sh $flags_file --build-includes]
} else {
set cxx [transform "g++"]
- set cxxflags "-ggdb3"
+ set cxxflags "-g -O2 -D_GLIBCXX_ASSERT -fmessage-length=0"
set includes "-I${srcdir}"
}
}
@@ -242,6 +247,15 @@ proc libstdc++-dg-test { prog do_what extra_tool_flags } {
return [list $comp_output $output_file]
}
+# True if the library supports wchar_t.
+set libstdc++_wchar_t 0
+
+# True if the library supports threads.
+set libstdc++_threads 0
+
+# A string naming object files to be linked into all tests.
+set libstdc++_test_objs ""
+
# Called from libstdc++-dg-test above. Calls back into system's
# target_compile to actually do the work.
proc v3_target_compile { source dest type options } {
@@ -251,6 +265,7 @@ proc v3_target_compile { source dest type options } {
global cxxflags
global includes
global blddir
+ global libstdc++_test_objs
if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
lappend options "libs=${gluefile}"
@@ -262,42 +277,56 @@ proc v3_target_compile { source dest type options } {
set cxx_final [concat $cxx_final $cxxlibglossflags]
set cxx_final [concat $cxx_final $cxxflags]
set cxx_final [concat $cxx_final $includes]
+ # Link the support objects into executables.
+ if { $type == "executable" } {
+ set cxx_final [concat $cxx_final ${libstdc++_test_objs}]
+ }
lappend options "compiler=$cxx_final"
- # Picks up the freshly-built testsuite library corresponding to the
- # multilib under test.
- lappend options "ldflags=-L${blddir}/testsuite"
- lappend options "libs=-lv3test"
-
return [target_compile $source $dest $type $options]
}
-
-# Called once, from libstdc++/normal.exp.
-proc v3-list-tests { filename } {
+# Build the support objects linked in with the libstdc++ tests. In
+# addition, set libstdc++_wchar_t, libstdc++_threads, and libstdc++_test_objs
+# appropriately.
+proc libstdc++_build_support {} {
global srcdir
- global blddir
-
- set tests_file "${blddir}/testsuite/${filename}"
- set sfiles ""
-
- verbose -log "In v3-list-tests"
- verbose -log "blddir = ${blddir}"
- verbose -log "tests_file = $tests_file"
+ global libstdc++_wchar_t
+ global libstdc++_threads
+ global libstdc++_test_objs
+
+ # Figure out whether or not the library supports certain features.
+ set libstdc++_wchar_t 0
+ set libstdc++_threads 0
+ set libstdc++_test_objs ""
+
+ set config_src "config.cc"
+ set f [open $config_src "w"]
+ puts $f "#include <bits/c++config.h>"
+ close $f
+ set preprocessed [v3_target_compile $config_src "" \
+ preprocess "additional_flags=-dN"]
+ foreach l $preprocessed {
+ if { [string first "_GLIBCXX_USE_WCHAR_T" $l] != -1 } {
+ verbose -log "wchar_t support detected"
+ set libstdc++_wchar_t 1
+ } elseif { [string first "_GLIBCXX_HAVE_GTHR_DEFAULT" $l] != -1 } {
+ verbose -log "thread support detected"
+ set libstdc++_threads 1
+ }
+ }
- # If there is a testsuite_file, use it.
- if { [file exists $tests_file] } {
- set f [open $tests_file]
- while { ! [eof $f] } {
- set t [gets $f]
- if { [string length "$t"] != 0 } {
- lappend sfiles ${srcdir}/${t}
- }
- }
- close $f
- } else {
- verbose "cannot open $tests_file"
+ # Build the support objects.
+ set source_files \
+ [list testsuite_abi.cc testsuite_allocator.cc testsuite_hooks.cc]
+ foreach f $source_files {
+ set object_file [file rootname $f].o
+ if { [v3_target_compile $srcdir/$f $object_file "object" \
+ "incdir=$srcdir"]
+ != "" } {
+ error "could not compile $f"
+ }
+ append libstdc++_test_objs "$object_file "
}
- return $sfiles
}
diff --git a/libstdc++-v3/testsuite/libstdc++-dg/normal.exp b/libstdc++-v3/testsuite/libstdc++-dg/normal.exp
index b613c66..67f4920 100644
--- a/libstdc++-v3/testsuite/libstdc++-dg/normal.exp
+++ b/libstdc++-v3/testsuite/libstdc++-dg/normal.exp
@@ -21,10 +21,47 @@
# Initialization.
dg-init
+# Build the support objects.
+libstdc++_build_support
+
+# Find directories that might have tests.
+set subdirs [glob "$srcdir/\[0-9\]\[0-9\]*"]
+foreach d [glob "$srcdir/\[a-z\]*"] {
+ if {[file isdirectory $d]} {
+ lappend subdirs $d
+ }
+}
+
+# Find all the tests.
+set tests [list]
+foreach s $subdirs {
+ set subdir_tests [find $s *.cc]
+ # Filter out tests that should not be run.
+ foreach t $subdir_tests {
+ # The DejaGNU "find" procedure sometimes returns a list
+ # containing an empty string, when it should realy return
+ # an empty list.
+ if { $t == "" } {
+ continue
+ }
+ # Filter out:
+ # 1. interactive tests.
+ # 2. performance tests.
+ # 3. wchar_t tests, if not supported.
+ # 4. thread tests, if not supported.
+ if { [string first _xin $t] == -1
+ && [string first performance $t] == -1
+ && (${libstdc++_wchar_t} || [string first wchar_t $t] == -1)
+ && (${libstdc++_threads} || [string first thread $t] == -1) } {
+ lappend tests $t
+ }
+ }
+}
+set tests [lsort $tests]
+
# Main loop.
global DEFAULT_CXXFLAGS
-dg-runtest [v3-list-tests testsuite_files] "" $DEFAULT_CXXFLAGS
-#dg-runtest [v3-list-tests testsuite_files_interactive] "" $DEFAULT_CXXFLAGS
+dg-runtest $tests "" $DEFAULT_CXXFLAGS
# All done.
dg-finish