Merging r261384:
[oota-llvm.git] / utils / bugpoint / RemoteRunSafely.sh
1 #!/bin/sh
2 #
3 # Program:  RemoteRunSafely.sh
4 #
5 # Synopsis: This script simply runs another program remotely using ssh.
6 #           It always returns the another program exit code or exit with
7 #           code 255 which indicates that the program could not be executed.
8 #
9 # Syntax: 
10 #
11 #   RemoteRunSafely.sh <hostname> [-l <login_name>] [-p <port>]
12 #                <program> <args...>
13 #
14 #   where:
15 #     <hostname>    is the remote host to execute the program,
16 #     <login_name>  is the username on the remote host,
17 #     <port>        is the port used by the remote client,
18 #     <program>     is the path to the program to run,
19 #     <args...>     are the arguments to pass to the program.
20 #
21
22 printUsageAndExit()
23 {
24   echo "Usage:"
25   echo "./RemoteRunSafely.sh <hostname> [-l <login_name>] [-p <port>] " \
26        "<program> <args...>"
27   exit 255
28 }
29
30 moreArgsExpected()
31 {
32   # $1 - remaining number of arguments
33   # $2 - number of arguments to shift
34   if [ $1 -lt $2 ]
35   then
36     echo "Error: Wrong number of argumants."
37     printUsageAndExit
38   fi
39 }
40
41 # Save a copy of the original arguments in a string before we
42 # clobber them with the shift command.
43 ORIG_ARGS="$*"
44 #DEBUG: echo 'GOT: '$ORIG_ARGS
45
46 moreArgsExpected $# 1
47 RHOST=$1
48 shift 1
49
50 RUSER=`id -un`
51 RCLIENT=ssh
52 RPORT=
53 WORKING_DIR=
54
55 moreArgsExpected $# 1
56 if [ $1 = "-l" ]; then
57   moreArgsExpected $# 2
58   RUSER=$2
59   shift 2
60 fi
61 moreArgsExpected $# 1
62 if [ $1 = "-p" ]; then
63   moreArgsExpected $# 2
64   RPORT="-p $2"
65   shift 2
66 fi
67
68 moreArgsExpected $# 1
69 PROGRAM=$(basename $1)
70 WORKING_DIR=$(dirname $1)
71 shift 1
72
73 #DEBUG: echo 'DIR='${0%%`basename $0`}
74 #DEBUG: echo 'RHOST='$RHOST
75 #DEBUG: echo 'RUSER='$RUSER
76 #DEBUG: echo 'PROGRAM='$PROGRAM
77 #DEBUG: echo 'WORKING_DIR='$WORKING_DIR
78 #DEBUG: echo 'ARGS='$*
79
80 # Sanity check
81 if [ "$RHOST" = "" -o "$PROGRAM" = "" ]; then
82   printUsageAndExit
83 fi
84
85 # Local program file must exist and be execuatble
86 local_program=$WORKING_DIR"/"$PROGRAM
87 if [ ! -x "$local_program" ]; then
88   echo "File "$local_program" does not exist or is not an executable.."
89   exit 255
90 fi
91
92 connection=$RUSER'@'$RHOST
93 remote="./"$PROGRAM
94 (
95   cat $local_program |        \
96   $RCLIENT $connection $RPORT \
97    'rm -f '$remote' ; '       \
98    'cat > '$remote' ; chmod +x '$remote' ; '$remote' '$*' ; ' \
99    'err=$? ; rm -f '$remote' ; exit $err'
100 )
101 err=$?
102
103 #DEBUG: echo script exit $err
104 exit $err
105