# Copyright (C) 2005-2021 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC 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, or (at your option)
# any later version.
#
# GCC 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/>.

# GCC testsuite that uses the `dg.exp' driver.

# Load support procs.
load_lib gfortran-dg.exp

if ![check_effective_target_fopenacc] {
  return
}

# Initialize `dg'.
dg-init

global gfortran_test_path
global gfortran_aux_module_flags
set gfortran_test_path $srcdir/$subdir
set gfortran_aux_module_flags "-fopenacc"
proc dg-compile-aux-modules { args } {
    global gfortran_test_path
    global gfortran_aux_module_flags
    if { [llength $args] != 2 } {
	error "dg-compile-aux-modules: needs one argument"
	return
    }

    set level [info level]
    if { [info procs dg-save-unknown] != [list] } {
	rename dg-save-unknown dg-save-unknown-level-$level
    }

    dg-test $gfortran_test_path/[lindex $args 1] "" $gfortran_aux_module_flags
    # cleanup-modules is intentionally not invoked here.

    if { [info procs dg-save-unknown-level-$level] != [list] } {
	rename dg-save-unknown-level-$level dg-save-unknown
    }
}

# Main loop.
gfortran-dg-runtest [lsort \
       [find $srcdir/$subdir *.\[fF\]{,90,95,03,08} ] ] "" "-fopenacc"

# All done.
dg-finish
