#
# Expect driver script for GCC Regression Tests
#   Copyright (C) 1993, 1997, 2007, 2008 Free Software Foundation
#
# This file 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 3 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 GCC; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.
#
# Written by Jeffrey Wheat (cassidy@cygnus.com)
#

#
# These tests come from Torbjorn Granlund's (tege@cygnus.com)
# C torture test suite, and other contributors.
#

if $tracelevel then {
    strace $tracelevel
}

# load support procs
load_lib c-torture.exp
load_lib torture-options.exp

torture-init
set-torture-options $C_TORTURE_OPTIONS

#
# This loop will run c-torture on any *.c file found in this directory.
# If a *.c has a corresponding *.exp file, then the test is skipped as
# as the *.exp will drive the test itself.  It is done this way so that
# generic tests do not need a separate .exp for it.  Only the tests that 
# require unique options need their own .exp file.
#

foreach testcase [lsort [glob -nocomplain $srcdir/$subdir/*.c]] {
    if [file exists [file rootname $testcase].exp] then {
	verbose "INFO:\"[file rootname $testcase].exp\" exists, skipping test" 3
	continue
    }

    # If we're only testing specific files and this isn't one of them, skip it.
    if ![runtest_file_p $runtests $testcase] then {
	continue
    }

    c-torture $testcase
}

torture-finish
