# 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 shared] } {
    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_shared/etc/c/curl.d { ! libcurl_available } }
    { libphobos.phobos_shared/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 "-fversion=Shared -shared-libphobos" \
	"-fmain -fbuilding-libphobos-tests -fno-moduleinfo"
    set libphobos_test_name ""
}

# All done.
dg-finish
