# Copyright 2012-2013 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
    }
}
