[gdb/testsuite] Limit default_target_compile override
[binutils-gdb.git] / gdb / testsuite / lib / future.exp
index 62cc7e68a55873f75ad442544117a2772f7dafd1..ba00a31c1971346acfce8548b4be51ad3b49800f 100644 (file)
@@ -172,7 +172,9 @@ proc gdb_find_eu-unstrip {} {
     return $eu_unstrip
 }
 
-proc gdb_default_target_compile {source destfile type options} {
+# Local version of default_target_compile, to be used for languages that
+# dejagnu's default_target_compile doesn't support.
+proc gdb_default_target_compile_1 {source destfile type options} {
     global target_triplet
     global tool_root_dir
     global CFLAGS_FOR_TARGET
@@ -627,40 +629,80 @@ proc gdb_default_target_compile {source destfile type options} {
     return ${comp_output}
 }
 
-# See if the version of dejaGNU being used to run the testsuite is
-# recent enough to contain support for building Ada programs or not.
-# If not, then use the functions above in place of the ones provided
-# by dejaGNU. This is only temporary (brobecker/2004-03-31).
+# If dejagnu's default_target_compile supports the language specified in
+# OPTIONS, use it.  Otherwise, use gdb_default_target_compile_1.
+proc gdb_default_target_compile {source destfile type options} {
+    global use_gdb_compile
+
+    set need_local 0
+    foreach i $options {
+
+       if { $i == "ada" || $i == "d" || $i == "go" || $i == "rust" } {
+           set need_local [info exists use_gdb_compile($i)]
+           break
+       }
+
+       if { $i == "c++" } {
+           break
+       }
+
+       if { $i == "f77" || $i == "f90" } {
+           set need_local [info exists use_gdb_compile(fortran)]
+           break
+       }
+    }
+
+    if { $need_local } {
+       return [gdb_default_target_compile_1 $source $destfile $type $options]
+    }
+
+    return [dejagnu_default_target_compile $source $destfile $type $options]
+}
+
+# Array of languages for which dejagnu's default_target_compile is missing
+# support.
+array set use_gdb_compile [list]
+
+# Note missing support in dejagnu's default_target_compile.  This
+# needs to be fixed by porting the missing support to Dejagnu.
+set note_prefix "Dejagnu's default_target_compile is missing support for "
+set note_suffix ", using local override"
 
-set use_gdb_compile 0
 if {[info procs find_gnatmake] == ""} {
     rename gdb_find_gnatmake find_gnatmake
-    set use_gdb_compile 1
+    set use_gdb_compile(ada) 1
+    gdb_note [join [list $note_prefix "Ada" $note_suffix] ""]
 }
 
 if {[info procs find_gfortran] == ""} {
     rename gdb_find_gfortran find_gfortran
-    set use_gdb_compile 1
+    set use_gdb_compile(fortran) 1
+    gdb_note [join [list $note_prefix "Fortran" $note_suffix] ""]
 }
 
 if {[info procs find_go_linker] == ""} {
     rename gdb_find_go find_go
     rename gdb_find_go_linker find_go_linker
-    set use_gdb_compile 1
+    set use_gdb_compile(go) 1
+    gdb_note [join [list $note_prefix "Go" $note_suffix] ""]
 }
 
 if {[info procs find_gdc] == ""} {
     rename gdb_find_gdc find_gdc
-    set use_gdb_compile 1
+    set use_gdb_compile(d) 1
+    gdb_note [join [list $note_prefix "D" $note_suffix] ""]
 }
 
 if {[info procs find_rustc] == ""} {
     rename gdb_find_rustc find_rustc
-    set use_gdb_compile 1
+    set use_gdb_compile(rust) 1
+    gdb_note [join [list $note_prefix "Rust" $note_suffix] ""]
 }
 
-if {$use_gdb_compile} {
-    catch {rename default_target_compile {}}
+# If dejagnu's default_target_compile is missing support for any language,
+# override it.
+if { [array size use_gdb_compile] != 0 } {
+    catch {rename default_target_compile dejagnu_default_target_compile}
     rename gdb_default_target_compile default_target_compile
 }