]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++.exp (v3-build_support): Look for __GTHREADS...
authorMark Mitchell <mark@codesourcery.com>
Thu, 5 May 2005 04:09:23 +0000 (04:09 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Thu, 5 May 2005 04:09:23 +0000 (04:09 +0000)
* 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  <mark@codesourcery.com>
* 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  <mark@codesourcery.com>
* 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  <dave.anglin@nrc-cnrc.gc.ca>
* testsuite/lib/libstdc++.exp: Use new procs in target-libpath.exp.

From-SVN: r99259

libstdc++-v3/ChangeLog
libstdc++-v3/testsuite/lib/libstdc++.exp
libstdc++-v3/testsuite/libstdc++-dg/normal.exp

index 0d7d32f4b5aa1b68082188b437f492db11cd77b3..8c70ca745011d62c4aaf3406af2015fd73cb4687 100644 (file)
@@ -1,3 +1,42 @@
+2005-05-04  Mark Mitchell  <mark@codesourcery.com>
+
+       * 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  <mark@codesourcery.com>
+
+       Backport:
+       2005-03-25  Mark Mitchell  <mark@codesourcery.com>
+       * 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  <mark@codesourcery.com>
+       * 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  <dave.anglin@nrc-cnrc.gc.ca>
+       * testsuite/lib/libstdc++.exp: Use new procs in target-libpath.exp.
+
 2005-04-26  Jones Desougi  <jones@ingate.com>
 
        PR libstdc++/21131
index f16f20f5e1c7d9a2443d60a7f7d7de5a7aa53523..c5ea2cd2ca303e0c4ccbf204541e8e4aa33382d2 100644 (file)
@@ -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
 }
index b613c66da1cbca3ef9e7ad3a8976267e704c3586..746c7a8ec3f11dc1a9fd99cc3f38757ec32d09ed 100644 (file)
 # 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