# Copyright (C) 1988, 90, 91, 92, 1994, 1997 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., 675 Mass Ave, Cambridge, MA 02139, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-g++@prep.ai.mit.edu

# This file was written by Rob Savoye. (rob@cygnus.com)

#
# these tests come from the original DejaGnu test suite 
# developed at Cygnus Support. If this isn't deja gnu, I
# don't know what is...
#

# load support procs
load_lib old-dejagnu.exp
load_lib g++.exp


# When a testcase doesn't have any special options, use these.
if ![info exists DEFAULT_CXXFLAGS] {
    set DEFAULT_CXXFLAGS "-ansi -pedantic-errors"

}

old-dejagnu-init
global GXX_UNDER_TEST

#
# main test loop
#

set dirlen [expr [string length "$srcdir/$subdir"] + 1];
foreach file [lsort [find $srcdir/$subdir *.C]] {
    # If we're only testing specific files and this isn't one of them, skip it.
    set tfile [string range $file $dirlen end];
    if ![runtest_file_p $runtests $tfile] then {
	continue
    }
    verbose "Testing $file"

    # We don't want old-dejagnu.exp to have to know about all the global
    # variables we use.  For now we tell it about CXXFLAGS and LIBS and
    # leave LDFLAGS alone.
    old-dejagnu $GXX_UNDER_TEST "$file" "$tfile" "" "$DEFAULT_CXXFLAGS" "-lstdc++"
}

# The framework doesn't like to see any error remnants,
# so remove them.
if [info exists errorInfo] then {
      unset errorInfo
}
