aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/lib/libstdc++.exp
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/testsuite/lib/libstdc++.exp')
-rw-r--r--libstdc++-v3/testsuite/lib/libstdc++.exp177
1 files changed, 92 insertions, 85 deletions
diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp
index f16f20f5e1c..c5ea2cd2ca3 100644
--- a/libstdc++-v3/testsuite/lib/libstdc++.exp
+++ b/libstdc++-v3/testsuite/lib/libstdc++.exp
@@ -50,6 +50,7 @@ load_lib libgloss.exp
load_gcc_lib target-supports.exp
load_lib prune.exp
load_lib dg-options.exp
+load_gcc_lib target-libpath.exp
# Useful for debugging. Pass the name of a variable and the verbosity
# threshold (number of -v's on the command line).
@@ -81,7 +82,7 @@ proc libstdc++_init { testfile } {
global cxx cxxflags
global includes
global gluefile wrap_flags
- global original_ld_library_path
+ global ld_library_path
global target_triplet
set blddir [lookfor_file [get_multilibs] libstdc++-v3]
@@ -119,26 +120,6 @@ proc libstdc++_init { testfile } {
v3-copy-files [glob -nocomplain "$srcdir/data/*.tst"]
v3-copy-files [glob -nocomplain "$srcdir/data/*.txt"]
- # Setup LD_LIBRARY_PATH so that libgcc_s, libstdc++ binaries can be found.
- # Find the existing LD_LIBRARY_PATH.
- if [info exists env(LD_LIBRARY_PATH)] {
- set original_ld_library_path $env(LD_LIBRARY_PATH)
- # For HP-UX
- } elseif [info exists env(SHLIB_PATH)] {
- set original_ld_library_path $env(SHLIB_PATH)
- # For Darwin:
- } elseif [info exists env(DYLD_LIBRARY_PATH)] {
- set original_ld_library_path $env(DYLD_LIBRARY_PATH)
- # For Solaris 32 bit:
- } elseif [info exists env(LD_LIBRARY_PATH_32)] {
- set original_ld_library_path $env(LD_LIBRARY_PATH_32)
- # For Solaris 64 bit:
- } elseif [info exists env(LD_LIBRARY_PATH_64)] {
- set original_ld_library_path $env(LD_LIBRARY_PATH_64)
- } else {
- set original_ld_library_path ""
- }
-
# Locate libgcc.a so we don't need to account for different values of
# SHLIB_EXT on different platforms
set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a]
@@ -148,41 +129,33 @@ 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}"
- }
- }
+ 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)"
+ }
+ } else {
+ set compiler [transform "g++"]
}
- append ld_library_path ":${blddir}/src/.libs"
-
- # On IRIX 6, we have to set variables akin to LD_LIBRARY_PATH, but
- # called LD_LIBRARYN32_PATH (for the N32 ABI) and LD_LIBRARY64_PATH
- # (for the 64-bit ABI). The right way to do this would be to modify
- # unix.exp -- but that's not an option since it's part of DejaGNU
- # proper, so we do it here.
- # The same applies to darwin (DYLD_LIBRARY_PATH), solaris 32 bit
- # (LD_LIBRARY_PATH_32), solaris 64 bit (LD_LIBRARY_PATH_64), and HP-UX
- # (SHLIB_PATH).
- setenv LD_LIBRARY_PATH "$ld_library_path:$original_ld_library_path"
- setenv SHLIB_PATH "$ld_library_path:$original_ld_library_path"
- setenv LD_LIBRARYN32_PATH "$ld_library_path:$original_ld_library_path"
- setenv LD_LIBRARY64_PATH "$ld_library_path:$original_ld_library_path"
- setenv LD_RUN_PATH "$ld_library_path:$original_ld_library_path"
- setenv LD_LIBRARY_PATH_32 "$ld_library_path:$original_ld_library_path"
- setenv LD_LIBRARY_PATH_64 "$ld_library_path:$original_ld_library_path"
- setenv DYLD_LIBRARY_PATH "$ld_library_path:$original_ld_library_path"
- verbose -log "LD_LIBRARY_PATH = $env(LD_LIBRARY_PATH)"
# Do a bunch of handstands and backflips for cross compiling and
# finding simulators...
@@ -203,8 +176,16 @@ 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}"
+ # Guess at the location of the installed locale files.
+ # (It would be nice if "gcc --print-file-name" could find
+ # message files, but it cannot.)
+ set absolute_cxx [which $cxx]
+ if { $absolute_cxx != "" } {
+ set localedir "[file dirname $absolute_cxx]/../share/locale"
+ }
+ set cxxflags "$cxxflags -DLOCALEDIR=\"$localedir\""
}
}
@@ -269,6 +250,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 v3-wchar_t 0
+
+# True if the library supports threads.
+set v3-threads 0
+
+# A string naming object files to be linked into all tests.
+set v3-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 } {
@@ -278,6 +268,7 @@ proc v3_target_compile { source dest type options } {
global cxxflags
global includes
global blddir
+ global v3-test_objs
if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
lappend options "libs=${gluefile}"
@@ -289,42 +280,58 @@ 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 ${v3-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 v3-wchar_t, v3-threads, and v3-test_objs
+# appropriately.
+proc v3-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 v3-wchar_t
+ global v3-threads
+ global v3-test_objs
+
+ # Figure out whether or not the library supports certain features.
+ set v3-wchar_t 0
+ set v3-threads 0
+ set v3-test_objs ""
+
+ set config_src "config.cc"
+ set f [open $config_src "w"]
+ puts $f "#include <bits/c++config.h>"
+ puts $f "#include <bits/gthr.h>"
+ close $f
+ set preprocessed [v3_target_compile $config_src "" \
+ preprocess "additional_flags=-dN"]
+ if { [string first "_GLIBCXX_USE_WCHAR_T" $preprocessed] != -1 } {
+ verbose -log "wchar_t support detected"
+ set v3-wchar_t 1
+ }
+ if { [string first "__GTHREADS" $preprocessed] != -1 } {
+ verbose -log "thread support detected"
+ set v3-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
+ # Compile with "-w" so that warnings issued by the compiler
+ # do not prevent compilation.
+ if { [v3_target_compile $srcdir/$f $object_file "object" \
+ [list "incdir=$srcdir" "additional_flags=-w"]]
+ != "" } {
+ error "could not compile $f"
+ }
+ append v3-test_objs "$object_file "
}
- return $sfiles
}