#   Copyright (C) 1997, 2000, 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Don't run this directory with any default CFLAGS, but run tests with
# and without -DWIDE.

if [info exists TORTURE_OPTIONS] {
    set old_TORTURE_OPTIONS $TORTURE_OPTIONS
} elseif [info exists old_TORTURE_OPTIONS] {
    unset old_TORTURE_OPTIONS
}
if [info exists torture_with_loops] {
    set old_torture_with_loops $torture_with_loops
} elseif [info exists old_torture_with_loops] {
    unset old_torture_with_loops
}
if [info exists torture_without_loops] {
    set old_torture_without_loops $torture_without_loops
} elseif [info exists old_torture_without_loops] {
    unset old_torture_without_loops
}
set TORTURE_OPTIONS [list { } { -DWIDE } ]
set torture_with_loops [list { } { -DWIDE } ]
set torture_without_loops [list { } { -DWIDE } ]

# Need to copy the format.h header.
if [is_remote host] {
    remote_download host $srcdir/$subdir/format.h
}

load_lib gcc-dg.exp

dg-init
gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] ""
if [info exists old_TORTURE_OPTIONS] {
    set TORTURE_OPTIONS $old_TORTURE_OPTIONS
} else {
    unset TORTURE_OPTIONS
}
if [info exists old_torture_with_loops] {
    set torture_with_loops $old_torture_with_loops
} else {
    unset torture_with_loops
}
if [info exists old_torture_without_loops] {
    set torture_without_loops $old_torture_without_loops
} else {
    unset torture_without_loops
}
dg-finish
