From 20d2a8c24f3ca487ffd35fefcc9b1562bb10b609 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Torbj=C3=B6rn=20SVENSSON?= Date: Thu, 22 Sep 2022 22:14:24 +0200 Subject: [PATCH] testsuite: Verify that module-mapper is available MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit For some test cases, it's required that the optional module mapper "g++-mapper-server" is built. As the server is not required, the test cases will fail if it can't be found. gcc/testsuite/ChangeLog: * lib/target-supports.exp (check_is_prog_name_available): New. * lib/target-supports-dg.exp (dg-require-prog-name-available): New. * g++.dg/modules/modules.exp: Verify avilability of module mapper. Signed-off-by: Torbjörn SVENSSON --- gcc/testsuite/g++.dg/modules/modules.exp | 31 +++++++++++++++++++++++++++++++ gcc/testsuite/lib/target-supports-dg.exp | 15 +++++++++++++++ gcc/testsuite/lib/target-supports.exp | 15 +++++++++++++++ 3 files changed, 61 insertions(+) diff --git a/gcc/testsuite/g++.dg/modules/modules.exp b/gcc/testsuite/g++.dg/modules/modules.exp index afb323d..4784803 100644 --- a/gcc/testsuite/g++.dg/modules/modules.exp +++ b/gcc/testsuite/g++.dg/modules/modules.exp @@ -279,6 +279,29 @@ proc module-init { src } { return $option_list } +# Return 1 if requirements are met +proc module-check-requirements { tests } { + foreach test $tests { + set tmp [dg-get-options $test] + foreach op $tmp { + switch [lindex $op 0] { + "dg-additional-options" { + # Example strings to match: + # -fmodules-ts -fmodule-mapper=|@g++-mapper-server\\ -t\\ [srcdir]/inc-xlate-1.map + # -fmodules-ts -fmodule-mapper=|@g++-mapper-server + if [regexp -- {(^| )-fmodule-mapper=\|@([^\\ ]*)} [lindex $op 2] dummy dummy2 prog] { + verbose "Checking that mapper exist: $prog" + if { ![ check_is_prog_name_available $prog ] } { + return 0 + } + } + } + } + } + } + return 1 +} + # cleanup any detritus from previous run cleanup_module_files [find $DEFAULT_REPO *.gcm] @@ -307,6 +330,14 @@ foreach src [lsort [find $srcdir/$subdir {*_a.[CHX}]] { set tests [lsort [find [file dirname $src] \ [regsub {_a.[CHX]$} [file tail $src] {_[a-z].[CHX]}]]] + if { ![module-check-requirements $tests] } { + set testcase [regsub {_a.[CH]} $src {}] + set testcase \ + [string range $testcase [string length "$srcdir/"] end] + unsupported $testcase + continue + } + set std_list [module-init $src] foreach std $std_list { set mod_files {} diff --git a/gcc/testsuite/lib/target-supports-dg.exp b/gcc/testsuite/lib/target-supports-dg.exp index aa2164b..6ce3b2b 100644 --- a/gcc/testsuite/lib/target-supports-dg.exp +++ b/gcc/testsuite/lib/target-supports-dg.exp @@ -683,3 +683,18 @@ proc dg-require-symver { args } { set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"] } } + +# If this target does not provide prog named "$args", skip this test. + +proc dg-require-prog-name-available { args } { + # The args are within another list; pull them out. + set args [lindex $args 0] + + set prog [lindex $args 1] + + if { ![ check_is_prog_name_available $prog ] } { + upvar dg-do-what dg-do-what + set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"] + } +} + diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index c7f583d..01cf17e 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -12157,3 +12157,18 @@ main: .byte 0 } ""] } + +# Return 1 if this target has prog named "$prog", 0 otherwise. + +proc check_is_prog_name_available { prog } { + global tool + + set options [list "additional_flags=-print-prog-name=$prog"] + set output [lindex [${tool}_target_compile "" "" "none" $options] 0] + + if { $output == $prog } { + return 0 + } + + return 1 +} -- 2.7.4