# Copyright (c) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
#
# 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 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.
#
# For a copy of the GNU General Public License, write the the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.

# Based on gcc/testsuite/gcc.dg/dg.exp.

# Don't run these tests unless an environment variable is defined.
if { ![info exists env(CHECK_TEST_FRAMEWORK)] } {
    verbose "skipping test framework tests, CHECK_TEST_FRAMEWORK is not defined" 0
    return
}

load_lib gcc-dg.exp

proc dg-require-true { args } {
    verbose "dg-require-true" 2
}

proc dg-require-false { args } {
    verbose "dg-require-false" 2
    upvar dg-do-what dg-do-what
    set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
}

proc check_effective_target_yes { args } {
    return 1
}

proc check_effective_target_no { args } {
    return 0
}

global dg-do-what-default
set save-dg-do-what-default ${dg-do-what-default}
set dg-do-what-default compile

dg-init

# Run tests from the source directory.
dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/dg-*.c]] "" ""

# Generate additional tests.
set tstobjdir "$tmpdir/gcc.test-framework"
set generator "$srcdir/$subdir/gen_directive_tests"
file delete -force $tstobjdir
file mkdir $tstobjdir
set status [remote_exec host "$generator $tstobjdir"]
set status [lindex $status 0]
if { $status == 0 } {
    # Run the generated tests.
    dg-runtest [lsort [find $tstobjdir *.c]] "" "-DY1 -DY2"
} else {
    warning "Could not generate test framework tests"
}

dg-finish
set dg-do-what-default ${save-dg-do-what-default}
