1*11efff7fSkettenis# This test code is part of GDB, the GNU debugger. 2*11efff7fSkettenis 3*11efff7fSkettenis# Copyright 1998, 1999, 2000, 2003, 2004 4*11efff7fSkettenis# Free Software Foundation, Inc. 5*11efff7fSkettenis 6*11efff7fSkettenis# This program is free software; you can redistribute it and/or modify 7*11efff7fSkettenis# it under the terms of the GNU General Public License as published by 8*11efff7fSkettenis# the Free Software Foundation; either version 2 of the License, or 9*11efff7fSkettenis# (at your option) any later version. 10*11efff7fSkettenis# 11*11efff7fSkettenis# This program is distributed in the hope that it will be useful, 12*11efff7fSkettenis# but WITHOUT ANY WARRANTY; without even the implied warranty of 13*11efff7fSkettenis# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*11efff7fSkettenis# GNU General Public License for more details. 15*11efff7fSkettenis# 16*11efff7fSkettenis# You should have received a copy of the GNU General Public License 17*11efff7fSkettenis# along with this program; if not, write to the Free Software 18*11efff7fSkettenis# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19b725ae77Skettenis 20b725ae77Skettenisload_lib "libgloss.exp" 21b725ae77Skettenis 22b725ae77Skettenis# GCJ_UNDER_TEST is the compiler under test. 23b725ae77Skettenis 24b725ae77Skettenisglobal tmpdir 25b725ae77Skettenis 26b725ae77Skettenisif ![info exists tmpdir] { 27b725ae77Skettenis set tmpdir "/tmp" 28b725ae77Skettenis} 29b725ae77Skettenis 30b725ae77Skettenisset java_initialized 0 31b725ae77Skettenis 32b725ae77Skettenis# 33b725ae77Skettenis# Build the status wrapper library as needed. 34b725ae77Skettenis# 35b725ae77Skettenisproc java_init { args } { 36b725ae77Skettenis global wrapper_file; 37b725ae77Skettenis global wrap_compile_flags; 38b725ae77Skettenis global java_initialized 39b725ae77Skettenis global GCJ_UNDER_TEST 40b725ae77Skettenis global TOOL_EXECUTABLE 41b725ae77Skettenis global env 42b725ae77Skettenis 43b725ae77Skettenis if { $java_initialized == 1 } { return; } 44b725ae77Skettenis 45b725ae77Skettenis if ![info exists GCJ_UNDER_TEST] { 46b725ae77Skettenis if [info exists TOOL_EXECUTABLE] { 47b725ae77Skettenis set GCJ_UNDER_TEST $TOOL_EXECUTABLE; 48b725ae77Skettenis } else { 49b725ae77Skettenis if [info exists env(GCJ)] { 50b725ae77Skettenis set GCJ_UNDER_TEST $env(GCJ) 51b725ae77Skettenis } else { 52b725ae77Skettenis global tool_root_dir 53b725ae77Skettenis global target_alias 54b725ae77Skettenis 55b725ae77Skettenis if ![is_remote host] { 56b725ae77Skettenis set file [lookfor_file $tool_root_dir gcj]; 57b725ae77Skettenis if { $file == "" } { 58b725ae77Skettenis set file [lookfor_file $tool_root_dir gcc/gcj]; 59b725ae77Skettenis } 60b725ae77Skettenis if { $file != "" } { 61b725ae77Skettenis set CC "$file -B[file dirname $file]/ --specs=$tool_root_dir/$target_alias/libjava/libgcj-test.spec"; 62b725ae77Skettenis } else { 63b725ae77Skettenis set CC [transform gcj]; 64b725ae77Skettenis } 65b725ae77Skettenis } else { 66b725ae77Skettenis set CC [transform gcj] 67b725ae77Skettenis } 68b725ae77Skettenis set GCJ_UNDER_TEST $CC 69b725ae77Skettenis } 70b725ae77Skettenis } 71b725ae77Skettenis } 72b725ae77Skettenis 73b725ae77Skettenis set wrapper_file ""; 74b725ae77Skettenis set wrap_compile_flags ""; 75b725ae77Skettenis if [target_info exists needs_status_wrapper] { 76b725ae77Skettenis set result [build_wrapper "testglue.o"]; 77b725ae77Skettenis if { $result != "" } { 78b725ae77Skettenis set wrapper_file [lindex $result 0]; 79b725ae77Skettenis set wrap_compile_flags [lindex $result 1]; 80b725ae77Skettenis } else { 81b725ae77Skettenis warning "Status wrapper failed to build." 82b725ae77Skettenis } 83b725ae77Skettenis } 84b725ae77Skettenis 85b725ae77Skettenis set java_initialized 1 86b725ae77Skettenis} 87b725ae77Skettenis 88b725ae77Skettenis# 89b725ae77Skettenis# Run the test specified by srcfile and resultfile. compile_args and 90b725ae77Skettenis# exec_args are options telling this proc how to work. 91b725ae77Skettenis# 92b725ae77Skettenisproc compile_java_from_source { srcfile binfile compile_args } { 93b725ae77Skettenis global GCJ_UNDER_TEST 94b725ae77Skettenis global runtests 95b725ae77Skettenis global java_initialized 96b725ae77Skettenis 97b725ae77Skettenis if { $java_initialized != 1 } { java_init } 98b725ae77Skettenis 99b725ae77Skettenis set errname [file rootname [file tail $srcfile]] 100b725ae77Skettenis if {! [runtest_file_p $runtests $errname]} { 101b725ae77Skettenis return 102b725ae77Skettenis } 103b725ae77Skettenis 104b725ae77Skettenis set args "compiler=$GCJ_UNDER_TEST" 105b725ae77Skettenis lappend args "additional_flags=--main=[file rootname [file tail $srcfile]]" 106b725ae77Skettenis if { $compile_args != "" } { 107b725ae77Skettenis lappend args "additional_flags=$compile_args" 108b725ae77Skettenis } 109b725ae77Skettenis 110b725ae77Skettenis if { $compile_args != "" } { 111b725ae77Skettenis set errname "$errname $compile_args" 112b725ae77Skettenis } 113b725ae77Skettenis 114b725ae77Skettenis set x [target_compile $srcfile ${binfile} ${binfile} $args] 115b725ae77Skettenis if { $x != "" } { 116b725ae77Skettenis verbose "target_compile failed: $x" 2 117b725ae77Skettenis return "$errname compilation from source"; 118b725ae77Skettenis } 119b725ae77Skettenis} 120b725ae77Skettenis 121b725ae77Skettenis# Local Variables: 122b725ae77Skettenis# tcl-indent-level:4 123b725ae77Skettenis# End: 124