# Copyright (C) 2002-2022 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 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/>.

# 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
load_lib scanasm.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
}

proc check_effective_target_def_nocache { } {
    return [check_no_compiler_messages_nocache def_nocache object {
	#ifdef DEFINED
	int dummy;
	#else
	#error DEFINED is not defined
	#endif
    } [current_compiler_flags]]
}

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-*.S $srcdir/$subdir/dg-*.c]] "" ""

# Skip generated tests unless CHECK_TEST_FRAMEWORK is 1.
if { $env(CHECK_TEST_FRAMEWORK) != 1 } {
    verbose "skipping generated test framework tests, CHECK_TEST_FRAMEWORK is not 1" 0
    return
}

# 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}
