diff --git a/libphobos/ChangeLog b/libphobos/ChangeLog index fa5f7b1d718..ffe44fb37f2 100644 --- a/libphobos/ChangeLog +++ b/libphobos/ChangeLog @@ -1,3 +1,16 @@ +2019-04-24 Iain Buclaw + + PR d/88654 + * testsuite/lib/libphobos.exp (libphobos-dg-test): Check + libphobos_skipped_test_p before running test. + (libphobos-dg-prune): New proc. + (libphobos_init): Set libphobos_skip_tests. + (libphobos_skipped_test_p): New proc. + (check_effective_target_libcurl_available): New proc. + * testsuite/libphobos.phobos/phobos.exp: Skip curl tests if library + not found. + * testsuite/libphobos.phobos_shared/phobos_shared.exp: Likewise. + 2019-04-24 Iain Buclaw PR d/88431 diff --git a/libphobos/testsuite/lib/libphobos.exp b/libphobos/testsuite/lib/libphobos.exp index 6d113bc5172..d47da178b7e 100644 --- a/libphobos/testsuite/lib/libphobos.exp +++ b/libphobos/testsuite/lib/libphobos.exp @@ -47,8 +47,8 @@ proc libphobos-dg-test { prog do_what extra_tool_flags } { set output_file "" global libphobos_test_name + upvar name name if { $libphobos_test_name != "" } { - upvar name name set name $libphobos_test_name } @@ -80,11 +80,19 @@ proc libphobos-dg-test { prog do_what extra_tool_flags } { lappend options "additional_flags=$extra_tool_flags" } - set comp_output [$select_compile "$prog" "$output_file" "$compile_type" $options] + set unsupported_message [libphobos_skipped_test_p $name] + if { $unsupported_message != "" } { + return [list "::unsupported::$unsupported_message" $output_file] + } + set comp_output [$select_compile "$prog" "$output_file" "$compile_type" $options] return [list $comp_output $output_file] } +proc libphobos-dg-prune { system text } { + return $text +} + # # libphobos_init # @@ -120,6 +128,9 @@ proc libphobos_init { args } { global libphobos_test_name set libphobos_test_name "" + global libphobos_skip_tests + set libphobos_skip_tests { } + # Default settings. set blddir [lookfor_file [get_multilibs] libphobos] set flags_file "${blddir}/testsuite/testsuite_flags" @@ -143,7 +154,7 @@ proc libphobos_init { args } { } # Compute what needs to be added to the existing LD_LIBRARY_PATH. - set ld_library_path "" + set ld_library_path "." set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a] if {$gccdir != ""} { @@ -218,3 +229,35 @@ proc filter_libphobos_unittests { list } { } return $res } + +# Skip the unittest (report it as UNSUPPORTED) if the module exists in +# libphobos_skip_tests and its target list is matched by dg-process-target. +# +# The expected format of the libphobos_skip_tests file is: +# { test { targets } } +proc libphobos_skipped_test_p { test } { + global libphobos_skip_tests + + set row [lsearch -inline -index 0 $libphobos_skip_tests $test] + if { $row eq "" } { + return "" + } + + if { [llength $row] != 2 } { + error "syntax error in libphobos_skip_tests: $row" + } + + set selector [list target [lindex $row 1]] + if { [dg-process-target-1 $selector] != "S" } { + return "" + } + + return "skipped test" +} + +# Return true if the curl library is supported on the target. +proc check_effective_target_libcurl_available { } { + return [check_no_compiler_messages libcurl_available executable { + int main (void) { return 0; } + } "-lcurl"] +} diff --git a/libphobos/testsuite/libphobos.phobos/phobos.exp b/libphobos/testsuite/libphobos.phobos/phobos.exp index 8ace023a832..4b731d34cb6 100644 --- a/libphobos/testsuite/libphobos.phobos/phobos.exp +++ b/libphobos/testsuite/libphobos.phobos/phobos.exp @@ -22,6 +22,12 @@ if { ![isnative] || ![is-effective-target static] } { # 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 diff --git a/libphobos/testsuite/libphobos.phobos_shared/phobos_shared.exp b/libphobos/testsuite/libphobos.phobos_shared/phobos_shared.exp index b0510914499..f651abbed78 100644 --- a/libphobos/testsuite/libphobos.phobos_shared/phobos_shared.exp +++ b/libphobos/testsuite/libphobos.phobos_shared/phobos_shared.exp @@ -22,6 +22,12 @@ if { ![isnative] || ![is-effective-target shared] } { # 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