Blame config/unix.exp

Packit 62fe53
# Copyright (C) 1992-2016 Free Software Foundation, Inc.
Packit 62fe53
#
Packit 62fe53
# This file is part of DejaGnu.
Packit 62fe53
#
Packit 62fe53
# DejaGnu is free software; you can redistribute it and/or modify it
Packit 62fe53
# under the terms of the GNU General Public License as published by
Packit 62fe53
# the Free Software Foundation; either version 3 of the License, or
Packit 62fe53
# (at your option) any later version.
Packit 62fe53
#
Packit 62fe53
# DejaGnu is distributed in the hope that it will be useful, but
Packit 62fe53
# WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 62fe53
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 62fe53
# General Public License for more details.
Packit 62fe53
#
Packit 62fe53
# You should have received a copy of the GNU General Public License
Packit 62fe53
# along with DejaGnu; if not, write to the Free Software Foundation,
Packit 62fe53
# Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
Packit 62fe53
Packit 62fe53
# This file was written by Rob Savoye <rob@welcomehome.org>.
Packit 62fe53
Packit 62fe53
if {![info exists board]} {
Packit 62fe53
    error "must set $board before loading unix.exp"
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
# For rcp_download, rsh_exec.
Packit 62fe53
load_lib remote.exp
Packit 62fe53
Packit 62fe53
#
Packit 62fe53
# unix_load -- load the program and execute it
Packit 62fe53
#
Packit 62fe53
# See default.exp for explanation of arguments and results.
Packit 62fe53
#
Packit 62fe53
Packit 62fe53
Packit 62fe53
proc unix_load { dest prog args } {
Packit 62fe53
    global ld_library_path
Packit 62fe53
    global test_timeout
Packit 62fe53
    set output ""
Packit 62fe53
    set orig_ld_library_path ""
Packit 62fe53
Packit 62fe53
    if {![info exists test_timeout]} {
Packit 62fe53
	set test_timeout 300
Packit 62fe53
    }
Packit 62fe53
Packit 62fe53
    if { [llength $args] > 0 } {
Packit 62fe53
	set parg [lindex $args 0]
Packit 62fe53
    } else {
Packit 62fe53
	set parg ""
Packit 62fe53
    }
Packit 62fe53
Packit 62fe53
    if { [llength $args] > 1 } {
Packit 62fe53
	set inp [lindex $args 1]
Packit 62fe53
    } else {
Packit 62fe53
	set inp ""
Packit 62fe53
    }
Packit 62fe53
Packit 62fe53
    if {![file exists $prog]} then {
Packit 62fe53
	# We call both here because this should never happen.
Packit 62fe53
	perror "$prog does not exist in unix_load."
Packit 62fe53
	verbose -log "$prog does not exist." 3
Packit 62fe53
	return "untested"
Packit 62fe53
    }
Packit 62fe53
    verbose "loading to $dest" 2
Packit 62fe53
    if {![is_remote $dest]} {
Packit 62fe53
	if { "$inp" != "" } {
Packit 62fe53
	    set command "$prog $parg < $inp"
Packit 62fe53
	} else {
Packit 62fe53
	    set command "$prog $parg"
Packit 62fe53
	}
Packit 62fe53
Packit 62fe53
        if {![info exists ld_library_path]} {
Packit 62fe53
	    set ld_library_path ""
Packit 62fe53
        }
Packit 62fe53
Packit 62fe53
	set orig_ld_library_path "[getenv LD_LIBRARY_PATH]"
Packit 62fe53
	setenv LD_LIBRARY_PATH "$ld_library_path:$orig_ld_library_path"
Packit 62fe53
	setenv SHLIB_PATH "$ld_library_path:$orig_ld_library_path"
Packit 62fe53
	verbose -log "Setting LD_LIBRARY_PATH to $ld_library_path:$orig_ld_library_path" 2
Packit 62fe53
	verbose -log "Execution timeout is: $test_timeout" 2
Packit 62fe53
Packit 62fe53
	set id [remote_spawn $dest "$command" "readonly"]
Packit 62fe53
	if { $id < 0 } {
Packit 62fe53
	    set output "remote_spawn failed"
Packit 62fe53
	    set status -1
Packit 62fe53
	} else {
Packit 62fe53
	    set status [remote_wait $dest $test_timeout]
Packit 62fe53
	    set output [lindex $status 1]
Packit 62fe53
	    set status [lindex $status 0]
Packit 62fe53
	}
Packit 62fe53
	# Unset them so we don't potentially get hosed when we try to run a
Packit 62fe53
	# non-testcase executable. (Setting LD_LIBRARY_PATH is the wrong
Packit 62fe53
	# fix in the first place; this just tries to minimize the resulting
Packit 62fe53
	# crap.)
Packit 62fe53
	if {[info exists ld_library_path]} {
Packit 62fe53
	    setenv LD_LIBRARY_PATH $orig_ld_library_path
Packit 62fe53
	    setenv SHLIB_PATH $orig_ld_library_path
Packit 62fe53
	}
Packit 62fe53
    } else {
Packit 62fe53
	set remotefile [file tail $prog]
Packit 62fe53
	set remotefile [remote_download $dest $prog $remotefile]
Packit 62fe53
	if { $remotefile == "" } {
Packit 62fe53
	    verbose -log "Download of $prog to [board_info $dest name] failed." 3
Packit 62fe53
	    return [list "unresolved" ""]
Packit 62fe53
	}
Packit 62fe53
	if {[board_info $dest exists remote_link]} {
Packit 62fe53
	    if {[[board_info $dest remote_link] $remotefile]} {
Packit 62fe53
		verbose -log "Couldn't do remote link"
Packit 62fe53
		remote_exec $dest "\\rm -f $remotefile"
Packit 62fe53
		return [list "unresolved" ""]
Packit 62fe53
	    }
Packit 62fe53
Packit 62fe53
	    verbose "$prog linked ok" 3
Packit 62fe53
	} else {
Packit 62fe53
	    # rcp's to lynx seem not to get marked executable
Packit 62fe53
	    set status [remote_exec $dest "chmod +x $remotefile"]
Packit 62fe53
	    if { [lindex $status 0] != 0 } {
Packit 62fe53
		remote_file $dest delete ${remotefile}.o $remotefile
Packit 62fe53
		verbose -log "chmod +x of $prog on $dest failed." 3
Packit 62fe53
		return [list "unresolved" ""]
Packit 62fe53
	    }
Packit 62fe53
	}
Packit 62fe53
	set status [remote_exec $dest "$remotefile" $parg $inp]
Packit 62fe53
	remote_file $dest delete $remotefile.o $remotefile
Packit 62fe53
	if { [lindex $status 0] < 0 } {
Packit 62fe53
	    verbose -log "Couldn't execute $prog, [lindex $status 1]" 3
Packit 62fe53
	    return [list "unresolved" ""]
Packit 62fe53
	}
Packit 62fe53
	set output [lindex $status 1]
Packit 62fe53
	set status [lindex $status 0]
Packit 62fe53
    }
Packit 62fe53
Packit 62fe53
    setenv LD_LIBRARY_PATH $orig_ld_library_path
Packit 62fe53
    setenv SHLIB_PATH $orig_ld_library_path
Packit 62fe53
Packit 62fe53
    verbose "Executed $prog, status $status" 2
Packit 62fe53
    if {![string match "" $output]} {
Packit 62fe53
	verbose -- "$output" 2
Packit 62fe53
    }
Packit 62fe53
    if { $status == 0 } {
Packit 62fe53
	set result "pass"
Packit 62fe53
    } else {
Packit 62fe53
	set result "fail"
Packit 62fe53
    }
Packit 62fe53
    return [list $result $output]
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
set_board_info remotedir "/tmp/runtest.[pid]"
Packit 62fe53
set_board_info protocol  "unix"