#   Copyright (C) 1997, 2001, 2002 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  

# Gcov test driver.

# Load support procs.
load_lib g++-dg.exp
load_lib gcov.exp

global GXX_UNDER_TEST

# Find gcov in the same directory as $GXX_UNDER_TEST.
if { ![is_remote host] && [string match "*/*" [lindex $GXX_UNDER_TEST 0]] } {
    set GCOV [file dirname [lindex $GXX_UNDER_TEST 0]]/gcov
} else {
    set GCOV gcov
}

# Initialize harness.
dg-init

# Delete old .gcda files.
set files [glob -nocomplain gcov-*.gcda]
if { $files != "" } {
    eval "remote_file build delete $files"
}

# Main loop.
dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] "" ""

dg-finish
