This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[libstdc++] new autotools and cleanup: testsuite
- From: Phil Edwards <phil at jaj dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 4 Aug 2003 21:34:53 -0400
- Subject: [libstdc++] new autotools and cleanup: testsuite
As discussed on the library list. The configury is a lot friendlier if
things are named "libstdc++" rather than "libstdc++-v3". This brings the
Makefile.am into line with the new tools (but does not regenerate it, that's
coming), and renames files/directories/functions to make dejagnu happier.
2003-08-04 Phil Edwards <pme@gcc.gnu.org>
* testsuite/Makefile.am (DEJATOOL,EXPECT,RUNTEST,RUNTESTFLAGS):
Remove unneeded variable assignments. Leave them for automake.
* testsuite/lib/libstdc++-v3.exp: Rename...
* testsuite/lib/libstdc++.exp: ...to this. Adjust function names
accordingly.
* testsuite/libstdc++-v3.dg/dg.exp: Rename...
* testsuite/libstdc++-dg/normal.exp: ...to this. Adjust function
names accordingly.
Index: testsuite/Makefile.am
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/testsuite/Makefile.am,v
retrieving revision 1.28
diff -u -3 -p -r1.28 Makefile.am
--- testsuite/Makefile.am 6 Jul 2003 03:14:37 -0000 1.28
+++ testsuite/Makefile.am 5 Aug 2003 01:32:23 -0000
@@ -21,23 +21,12 @@
## Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
## USA.
-AUTOMAKE_OPTIONS = cygnus dejagnu
+AUTOMAKE_OPTIONS = dejagnu
mkinstalldirs = $(SHELL) $(toplevel_srcdir)/mkinstalldirs
-DEJATOOL = libstdc++-v3
-
-EXPECT = `if [ -f @glibcxx_builddir@/../../expect/expect ] ; then \
- echo @glibcxx_builddir@/../../expect/expect ; \
- else echo expect ; fi`
-
-RUNTEST = `if [ -f @glibcxx_srcdir@/../dejagnu/runtest ] ; then \
- echo @glibcxx_srcdir@/../dejagnu/runtest ; \
- else echo runtest; fi`
-
AM_MAKEFLAGS = -j1
AM_RUNTESTFLAGS =
-RUNTESTFLAGS =
PWD_COMMAND = $${PWDCMD-pwd}
## CXX is actually a "C" compiler. These are real C++ programs.
Index: testsuite/lib/libstdc++-v3.exp
===================================================================
RCS file: testsuite/lib/libstdc++-v3.exp
diff -N testsuite/lib/libstdc++-v3.exp
--- testsuite/lib/libstdc++-v3.exp 1 Aug 2003 00:49:14 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,240 +0,0 @@
-# Copyright (C) 2001, 2002, 2003 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.
-
-# Define libstdc++-v3 callbacks for dg.exp.
-
-load_lib dg.exp
-load_lib libgloss.exp
-load_lib prune.exp
-
-# Called once, by libstdc++-v3-init below. "Static" to this file.
-proc libstdc++-v3-copy-files {srcfiles dstdir} {
- foreach f $srcfiles {
- if { [catch { set symlink [file readlink $f] } x] } then {
- file copy -force $f $dstdir
- } else {
- if { [regexp "^/" "$symlink"] } then {
- file copy -force $symlink $dstdir
- } else {
- set dirname [file dirname $f]
- file copy -force $dirname/$symlink $dstdir
- }
- }
- }
-}
-
-# Called once, from libstdc++-v3.dg/dg.exp.
-proc libstdc++-v3-init { args } {
- global srcdir
- global outdir
- global blddir
- global cxx
- global includes
- global cxxflags
- global objdir
- global gluefile wrap_flags
- global ld_library_path
- global tool_root_dir
-
- set blddir [lookfor_file [get_multilibs] libstdc++-v3]
-
- # By default, we assume we want to run program images.
- global dg-do-what-default
- set dg-do-what-default run
-
- # Copy any required data files.
- libstdc++-v3-copy-files [glob -nocomplain "$srcdir/data/*.tst"] $outdir
- libstdc++-v3-copy-files [glob -nocomplain "$srcdir/data/*.txt"] $outdir
-
- # set LD_LIBRARY_PATH so that libgcc_s, libstdc++ binaries can be found.
- # 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]
- if {$gccdir != ""} {
- set gccdir [file dirname $gccdir]
- }
-
- 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"
-
- # 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. We really only need to do
- # this on IRIX, but it shouldn't hurt to do it anywhere else.
- setenv LD_LIBRARY_PATH $ld_library_path
- setenv SHLIB_PATH $ld_library_path
- setenv LD_LIBRARYN32_PATH $ld_library_path
- setenv LD_LIBRARY64_PATH $ld_library_path
- setenv LD_RUN_PATH $ld_library_path
- verbose -log "Set LD_*_PATHs to ${ld_library_path}"
-
- # Do a bunch of handstands and backflips for cross compiling and
- # finding simulators...
- if [is_remote host] {
- set header [remote_download host ${blddir}/testsuite/testsuite_hooks.h]
- if { $header == "" } {
- verbose -log "Unable to download ${blddir}/testsuite/testsuite_hooks.h to host."
- return "untested"
- }
- set cxx [transform "g++"]
- set cxxflags "-ggdb3 -D_GLIBCXX_ASSERT"
- set includes "-I./"
- } else {
- # If we find a testsuite_flags file, we're testing in the build dir.
- set flags_file "${blddir}/scripts/testsuite_flags"
- if { [file exists $flags_file] } {
- set cxx [exec sh $flags_file --build-cxx]
- set cxxflags [exec sh $flags_file --cxxflags]
- set includes [exec sh $flags_file --build-includes]
- } else {
- set cxx [transform "g++"]
- set cxxflags "-ggdb3 -D_GLIBCXX_ASSERT"
- set includes "-I${srcdir}"
- }
- }
-
- if { [target_info needs_status_wrapper]!=""} {
- file delete ${objdir}/testglue.o;
- set gluefile ${objdir}/testglue.o;
- set result [build_wrapper $gluefile];
- if { $result != "" } {
- set gluefile [lindex $result 0];
- set wrap_flags [lindex $result 1];
- } else {
- unset gluefile
- }
- }
-}
-
-# Callback from system dg-test.
-proc libstdc++-v3-dg-test { prog do_what extra_tool_flags } {
- # Set up the compiler flags, based on what we're going to do.
-
- switch $do_what {
- "preprocess" {
- set compile_type "preprocess"
- set output_file "[file rootname [file tail $prog]].i"
- }
- "compile" {
- set compile_type "assembly"
- set output_file "[file rootname [file tail $prog]].s"
- }
- "assemble" {
- set compile_type "object"
- set output_file "[file rootname [file tail $prog]].o"
- }
- "link" {
- set compile_type "executable"
- set output_file "./[file rootname [file tail $prog]].exe"
- }
- "run" {
- set compile_type "executable"
- # FIXME: "./" is to cope with "." not being in $PATH.
- # Should this be handled elsewhere?
- # YES.
- set output_file "./[file rootname [file tail $prog]].exe"
- # This is the only place where we care if an executable was
- # created or not. If it was, dg.exp will try to run it.
- remote_file build delete $output_file;
- }
- default {
- perror "$do_what: not a valid dg-do keyword"
- return ""
- }
- }
- set options ""
- if { $extra_tool_flags != "" } {
- lappend options "additional_flags=$extra_tool_flags"
- }
-
- set comp_output [libstdc++-v3_target_compile "$prog" "$output_file" "$compile_type" $options];
- set comp_output [ prune_g++_output $comp_output ];
-
- return [list $comp_output $output_file]
-}
-
-# Called from libstdc++-v3-dg-test above. Calls back into system's
-# target_compile to actually do the work.
-proc libstdc++-v3_target_compile { source dest type options } {
- global gluefile
- global wrap_flags
- global cxx
- global cxxflags
- global includes
- global blddir
-
- if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
- lappend options "libs=${gluefile}"
- lappend options "ldflags=${wrap_flags}"
- }
-
- set cxx_final $cxx
- set cxxlibglossflags [libgloss_link_flags]
- set cxx_final [concat $cxx_final $cxxlibglossflags]
- set cxx_final [concat $cxx_final $cxxflags]
- set cxx_final [concat $cxx_final $includes]
-
- 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++-v3.dg/dg.exp.
-proc v3-list-tests { filename } {
- global srcdir
- global outdir
-
- set tests_file "${outdir}/${filename}"
- set sfiles ""
-
- # 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"
- }
- return $sfiles
-}
Index: testsuite/lib/libstdc++.exp
===================================================================
RCS file: testsuite/lib/libstdc++.exp
diff -N testsuite/lib/libstdc++.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ testsuite/lib/libstdc++.exp 5 Aug 2003 01:32:23 -0000
@@ -0,0 +1,240 @@
+# Copyright (C) 2001, 2002, 2003 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.
+
+# Define callbacks for dg.exp. This file is loaded early.
+
+load_lib dg.exp
+load_lib libgloss.exp
+load_lib prune.exp
+
+# Called by v3-init below. "Static" to this file.
+proc v3-copy-files {srcfiles dstdir} {
+ foreach f $srcfiles {
+ if { [catch { set symlink [file readlink $f] } x] } then {
+ file copy -force $f $dstdir
+ } else {
+ if { [regexp "^/" "$symlink"] } then {
+ file copy -force $symlink $dstdir
+ } else {
+ set dirname [file dirname $f]
+ file copy -force $dirname/$symlink $dstdir
+ }
+ }
+ }
+}
+
+# Called once, from libstdc++/dg.exp.
+proc v3-init { args } {
+ global srcdir
+ global outdir
+ global blddir
+ global cxx
+ global includes
+ global cxxflags
+ global objdir
+ global gluefile wrap_flags
+ global ld_library_path
+ global tool_root_dir
+
+ set blddir [lookfor_file [get_multilibs] libstdc++-v3]
+
+ # By default, we assume we want to run program images.
+ global dg-do-what-default
+ set dg-do-what-default run
+
+ # Copy any required data files.
+ v3-copy-files [glob -nocomplain "$srcdir/data/*.tst"] $outdir
+ v3-copy-files [glob -nocomplain "$srcdir/data/*.txt"] $outdir
+
+ # set LD_LIBRARY_PATH so that libgcc_s, libstdc++ binaries can be found.
+ # 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]
+ if {$gccdir != ""} {
+ set gccdir [file dirname $gccdir]
+ }
+
+ 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"
+
+ # 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. We really only need to do
+ # this on IRIX, but it shouldn't hurt to do it anywhere else.
+ setenv LD_LIBRARY_PATH $ld_library_path
+ setenv SHLIB_PATH $ld_library_path
+ setenv LD_LIBRARYN32_PATH $ld_library_path
+ setenv LD_LIBRARY64_PATH $ld_library_path
+ setenv LD_RUN_PATH $ld_library_path
+ verbose -log "Set LD_*_PATHs to ${ld_library_path}"
+
+ # Do a bunch of handstands and backflips for cross compiling and
+ # finding simulators...
+ if [is_remote host] {
+ set header [remote_download host ${blddir}/testsuite/testsuite_hooks.h]
+ if { $header == "" } {
+ verbose -log "Unable to download ${blddir}/testsuite/testsuite_hooks.h to host."
+ return "untested"
+ }
+ set cxx [transform "g++"]
+ set cxxflags "-ggdb3 -D_GLIBCXX_ASSERT"
+ set includes "-I./"
+ } else {
+ # If we find a testsuite_flags file, we're testing in the build dir.
+ set flags_file "${blddir}/scripts/testsuite_flags"
+ if { [file exists $flags_file] } {
+ set cxx [exec sh $flags_file --build-cxx]
+ set cxxflags [exec sh $flags_file --cxxflags]
+ set includes [exec sh $flags_file --build-includes]
+ } else {
+ set cxx [transform "g++"]
+ set cxxflags "-ggdb3 -D_GLIBCXX_ASSERT"
+ set includes "-I${srcdir}"
+ }
+ }
+
+ if { [target_info needs_status_wrapper]!=""} {
+ file delete ${objdir}/testglue.o;
+ set gluefile ${objdir}/testglue.o;
+ set result [build_wrapper $gluefile];
+ if { $result != "" } {
+ set gluefile [lindex $result 0];
+ set wrap_flags [lindex $result 1];
+ } else {
+ unset gluefile
+ }
+ }
+}
+
+# Callback from system dg-test.
+proc libstdc++-dg-test { prog do_what extra_tool_flags } {
+ # Set up the compiler flags, based on what we're going to do.
+
+ switch $do_what {
+ "preprocess" {
+ set compile_type "preprocess"
+ set output_file "[file rootname [file tail $prog]].i"
+ }
+ "compile" {
+ set compile_type "assembly"
+ set output_file "[file rootname [file tail $prog]].s"
+ }
+ "assemble" {
+ set compile_type "object"
+ set output_file "[file rootname [file tail $prog]].o"
+ }
+ "link" {
+ set compile_type "executable"
+ set output_file "./[file rootname [file tail $prog]].exe"
+ }
+ "run" {
+ set compile_type "executable"
+ # FIXME: "./" is to cope with "." not being in $PATH.
+ # Should this be handled elsewhere?
+ # YES.
+ set output_file "./[file rootname [file tail $prog]].exe"
+ # This is the only place where we care if an executable was
+ # created or not. If it was, dg.exp will try to run it.
+ remote_file build delete $output_file;
+ }
+ default {
+ perror "$do_what: not a valid dg-do keyword"
+ return ""
+ }
+ }
+ set options ""
+ if { $extra_tool_flags != "" } {
+ lappend options "additional_flags=$extra_tool_flags"
+ }
+
+ set comp_output [v3_target_compile "$prog" "$output_file" "$compile_type" $options];
+ set comp_output [ prune_g++_output $comp_output ];
+
+ return [list $comp_output $output_file]
+}
+
+# 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 } {
+ global gluefile
+ global wrap_flags
+ global cxx
+ global cxxflags
+ global includes
+ global blddir
+
+ if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
+ lappend options "libs=${gluefile}"
+ lappend options "ldflags=${wrap_flags}"
+ }
+
+ set cxx_final $cxx
+ set cxxlibglossflags [libgloss_link_flags]
+ set cxx_final [concat $cxx_final $cxxlibglossflags]
+ set cxx_final [concat $cxx_final $cxxflags]
+ set cxx_final [concat $cxx_final $includes]
+
+ 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++*/dg.exp.
+proc v3-list-tests { filename } {
+ global srcdir
+ global outdir
+
+ set tests_file "${outdir}/${filename}"
+ set sfiles ""
+
+ # 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"
+ }
+ return $sfiles
+}
Index: testsuite/libstdc++-dg/normal.exp
===================================================================
RCS file: testsuite/libstdc++-dg/normal.exp
diff -N testsuite/libstdc++-dg/normal.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ testsuite/libstdc++-dg/normal.exp 5 Aug 2003 01:32:23 -0000
@@ -0,0 +1,34 @@
+# Copyright (C) 2001, 2002, 2003 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.
+
+# libstdc++-v3 testsuite that uses the 'dg.exp' driver.
+
+# If a testcase doesn't have special options, use these.
+global DEFAULT_CXXFLAGS
+if ![info exists DEFAULT_CXXFLAGS] then {
+ set DEFAULT_CXXFLAGS "-D_GLIBCXX_ASSERT"
+}
+
+# Initialization.
+dg-init
+v3-init
+
+# Main loop.
+dg-runtest [v3-list-tests testsuite_files] "" $DEFAULT_CXXFLAGS
+#dg-runtest [v3-list-tests testsuite_files_interactive] "" $DEFAULT_CXXFLAGS
+
+# All done.
+dg-finish
Index: testsuite/libstdc++-v3.dg/dg.exp
===================================================================
RCS file: testsuite/libstdc++-v3.dg/dg.exp
diff -N testsuite/libstdc++-v3.dg/dg.exp
--- testsuite/libstdc++-v3.dg/dg.exp 1 Aug 2003 00:49:14 -0000 1.7
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,34 +0,0 @@
-# Copyright (C) 2001, 2002, 2003 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.
-
-# libstdc++-v3 testsuite that uses the 'dg.exp' driver.
-
-# If a testcase doesn't have special options, use these.
-global DEFAULT_CXXFLAGS
-if ![info exists DEFAULT_CXXFLAGS] then {
- set DEFAULT_CXXFLAGS "-D_GLIBCXX_ASSERT"
-}
-
-# Initialization.
-dg-init
-libstdc++-v3-init
-
-# Main loop.
-dg-runtest [v3-list-tests testsuite_files] "" $DEFAULT_CXXFLAGS
-#dg-runtest [v3-list-tests testsuite_files_interactive] "" $DEFAULT_CXXFLAGS
-
-# All done.
-dg-finish