# Copyright (C) 2019-2021 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 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/>.

# Immediately exit if we can't run target executables.
if { ![isnative] || ![is-effective-target shared] } {
    return
}

# Gather a list of all tests.
set tests [lsort [filter_libphobos_unittests [find $srcdir/../libdruntime "*.d"]]]

set version_flags ""

if { [is-effective-target linux_pre_2639] } {
    lappend version_flags "-fversion=Linux_Pre_2639"
}

# Initialize dg.
dg-init

# Main loop.
foreach test $tests {
    set libphobos_test_name "$subdir/[dg-trim-dirname $srcdir/../libdruntime $test]"
    dg-runtest $test "-shared-libphobos" \
	"-fmain -fbuilding-libphobos-tests -fno-moduleinfo $version_flags"
    set libphobos_test_name ""
}

# All done.
dg-finish
