From: Mark Mitchell Date: Thu, 5 May 2005 04:09:23 +0000 (+0000) Subject: libstdc++.exp (v3-build_support): Look for __GTHREADS... X-Git-Tag: releases/gcc-3.4.4~41 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b2c2d20dad780a27a01769f2ebcfe2099a128832;p=thirdparty%2Fgcc.git libstdc++.exp (v3-build_support): Look for __GTHREADS... * testsuite/lib/libstdc++.exp (v3-build_support): Look for __GTHREADS, rather than _GLIBCXX_HAVE_GTHR_DEFAULT, to determine whether or not thread support is available. Backport: 2005-03-25 Mark Mitchell * testsuite/lib/libstdc++.exp (libstdc++_init): Define LOCALEDIR when testing an installed compiler. * testsuite/lib/libstdc++.exp (v3-build_support): Pass -w when compiling support objects. 2005-03-23 Mark Mitchell * testsuite/libstdc++-dg/normal.exp: Read testsuite_files, if it exists. * testsuite/lib/libstdc++.exp (libstdc++_wchar_t): Rename to ... (v3-wchar_t): ... this. (libstdc++_threads): Rename to ... (v3-threads): ... this. (libstdc++_test_objs): Rename to ... (v3-test_objs): ... this. (libstdc++_build_support): Rename to ... (v3-build_support): ... this. * testsuite/libstdc++-dg/normal.exp: Adjust to use new names. * 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. 2004-11-23 John David Anglin * testsuite/lib/libstdc++.exp: Use new procs in target-libpath.exp. From-SVN: r99259 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 0d7d32f4b5aa..8c70ca745011 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,42 @@ +2005-05-04 Mark Mitchell + + * testsuite/lib/libstdc++.exp (v3-build_support): Look for + __GTHREADS, rather than _GLIBCXX_HAVE_GTHR_DEFAULT, to determine + whether or not thread support is available. + +2005-05-04 Mark Mitchell + + Backport: + 2005-03-25 Mark Mitchell + * testsuite/lib/libstdc++.exp (libstdc++_init): Define LOCALEDIR + when testing an installed compiler. + * testsuite/lib/libstdc++.exp (v3-build_support): Pass -w when + compiling support objects. + 2005-03-23 Mark Mitchell + * testsuite/libstdc++-dg/normal.exp: Read testsuite_files, if it + exists. + * testsuite/lib/libstdc++.exp (libstdc++_wchar_t): Rename to ... + (v3-wchar_t): ... this. + (libstdc++_threads): Rename to ... + (v3-threads): ... this. + (libstdc++_test_objs): Rename to ... + (v3-test_objs): ... this. + (libstdc++_build_support): Rename to ... + (v3-build_support): ... this. + * testsuite/libstdc++-dg/normal.exp: Adjust to use new names. + * 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. + 2004-11-23 John David Anglin + * testsuite/lib/libstdc++.exp: Use new procs in target-libpath.exp. + 2005-04-26 Jones Desougi PR libstdc++/21131 diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp index f16f20f5e1c7..c5ea2cd2ca30 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 " + puts $f "#include " + 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 } diff --git a/libstdc++-v3/testsuite/libstdc++-dg/normal.exp b/libstdc++-v3/testsuite/libstdc++-dg/normal.exp index b613c66da1cb..746c7a8ec3f1 100644 --- a/libstdc++-v3/testsuite/libstdc++-dg/normal.exp +++ b/libstdc++-v3/testsuite/libstdc++-dg/normal.exp @@ -21,10 +21,73 @@ # Initialization. dg-init +# Build the support objects. +v3-build_support + +set tests [list] + +# If there is a "testsuite_files" file, use it. +# +# This is a workaround for problems reported with using: +# +# runtest normal.exp="`cat testsuite_files`" +# +# See: +# http://gcc.gnu.org/ml/libstdc++/2005-03/msg00278.html +# for discussion of the problem. +# +# If that worked consistently, we could modify "make check" to +# pass that option, and then remove this code. +if {[info exists blddir]} { + set tests_file "${blddir}/testsuite/testsuite_files" +} +if {[info exists tests_file] && [file exists $tests_file]} { + set f [open $tests_file] + while { ! [eof $f] } { + set t [gets $f] + if { [string length "$t"] != 0 } { + lappend tests ${srcdir}/${t} + } + } + close $f +} else { + # 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. + 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 really 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 + && (${v3-wchar_t} || [string first wchar_t $t] == -1) + && (${v3-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