# Copyright 2012 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# This file is a dejagnu "board file" and is used to run the testsuite
# against local host, in remote host mode.
#
# To use this file:
# bash$ touch ${my_dejagnu_dir}/my-dejagnu.exp
# bash$ export DEJAGNU=${my_dejagnu_dir}/my-dejagnu.exp
# bash$ mkdir ${my_dejagnu_dir}/boards
# bash$ cp ${src_dir}/gdb/testsuite/boards/local-remote-host.exp \
#   ${my_dejagnu_dir}/boards

# Modify the location of GDB and the username to access your box
# below.

# bash$ cd ${build_dir}/gdb
# bash$ make check RUNTESTFLAGS="--host_board=local-remote-host"

global GDB
set GDB [file join [pwd] "../gdb"]

set_board_info hostname 127.0.0.1

set_board_info username $env(USER)

# The ssh key should be correctly set up that you ssh to 127.0.0.1
# without having to type password.
set_board_info rsh_prog /usr/bin/ssh
set_board_info rcp_prog /usr/bin/scp
set_board_info file_transfer "rsh"

proc ${board}_download { board src dest } {

    # If file name is a relative, convert it to absolute, otherwise file can't
    # be found on host, because the current directory usually is /home/$USER.
    # This also bypasses the real download to the host.
    if { [file pathtype $src] == "relative" } {
	return [file join [pwd] $src]
    } else {
	return $src
    }
}
