# Copyright (C) 2019 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 static] } {
    return
}

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

set libphobos_skip_tests {
    # Skip curl tests if library is not available
    { libphobos.phobos/etc/c/curl.d { ! libcurl_available } }
    { libphobos.phobos/std/net/curl.d { ! libcurl_available } }
}

# Initialize dg.
dg-init

# Main loop.
foreach test $tests {
    set libphobos_test_name "$subdir/[dg-trim-dirname $srcdir/../src $test]"
    dg-runtest $test "" "-fmain -fbuilding-libphobos-tests"
    set libphobos_test_name ""
}

# All done.
dg-finish
