summaryrefslogtreecommitdiff
path: root/src/cmd/INIT/crossexec.sh
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2012-06-24 22:28:35 +0000
committerIgor Pashev <pashev.igor@gmail.com>2012-06-24 22:28:35 +0000
commit3950ffe2a485479f6561c27364d3d7df5a21d124 (patch)
tree468c6e14449d1b1e279222ec32f676b0311917d2 /src/cmd/INIT/crossexec.sh
downloadksh-upstream.tar.gz
Imported Upstream version 93u+upstream
Diffstat (limited to 'src/cmd/INIT/crossexec.sh')
-rw-r--r--src/cmd/INIT/crossexec.sh139
1 files changed, 139 insertions, 0 deletions
diff --git a/src/cmd/INIT/crossexec.sh b/src/cmd/INIT/crossexec.sh
new file mode 100644
index 0000000..9d73ee2
--- /dev/null
+++ b/src/cmd/INIT/crossexec.sh
@@ -0,0 +1,139 @@
+########################################################################
+# #
+# This software is part of the ast package #
+# Copyright (c) 1994-2011 AT&T Intellectual Property #
+# and is licensed under the #
+# Eclipse Public License, Version 1.0 #
+# by AT&T Intellectual Property #
+# #
+# A copy of the License is available at #
+# http://www.eclipse.org/org/documents/epl-v10.html #
+# (with md5 checksum b35adb5213ca9657e911e9befb180842) #
+# #
+# Information and Software Systems Research #
+# AT&T Research #
+# Florham Park NJ #
+# #
+# Glenn Fowler <gsf@research.att.com> #
+# #
+########################################################################
+: cross compiler a.out execution
+
+command=crossexec
+
+tmp=/tmp/cross$$
+
+case `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
+0123) ARGV0="-a $command"
+ USAGE=$'
+[-?
+@(#)$Id: crossexec (AT&T Labs Research) 2004-01-04 $
+]
+'$USAGE_LICENSE$'
+[+NAME?crossexec - cross compiler a.out execution]
+[+DESCRIPTION?\bcrossexec\b runs a cross-compiled \acommand\a in an environment
+ that supports a cross-compilation architecture different from the
+ current host. The cross environment is determined by \acrosstype\a,
+ usually a host type name produced by \bpackage\b(1). \acrosstype\a
+ is used to find an entry in \b$HOME/.crossexec\b that specifies
+ the cross compiler host and access details.]
+[+?The exit status of \bcrossexec\b is the exit status of \acommand\a.]
+[+CROSS ENVIRONMENT FILE?\b$HOME/.crossexec\b contains one line for each
+ supported \acrosstype\a. Each line contains 5 tab separated fields.
+ Field default values are specified as \b-\b. The fields are:]{
+ [+crosstype?The host type produced by \bpackage\b(1).]
+ [+host?The host name.]
+ [+user?The user name on \ahost\a. The default is the current user.]
+ [+dir?The directory to copy \acommand\a and execute it. The default
+ is the \auser\a \b$HOME\b on \ahost\a.]
+ [+shell?The command used to get shell access to \ahost\a. Currently
+ only \brsh\b and \bssh\b are supported.]
+ [+copy?The command used to copy \acommand\a to \ahost\a. Currently
+ only \brcp\b and \bscp\b are supported.]
+}
+[n:show?Show the underlying commands but do not execute.]
+
+crosstype command [ option ... ] [ file ... ]
+
+[+SEE ALSO?\brcp\b(1), \brsh\b(1), \bscp\b(1), \bssh\b(1)]
+'
+ ;;
+*) ARGV0=""
+ USAGE="crosstype command [ option ... ] [ file ... ]"
+ ;;
+esac
+
+usage()
+{
+ OPTIND=0
+ getopts $ARGV0 "$USAGE" OPT '-?'
+ exit 2
+}
+
+exec=
+
+# get the options and operands
+
+while getopts $ARGV0 "$USAGE" OPT
+do case $OPT in
+ n) exec=echo ;;
+ *) usage ;;
+ esac
+done
+shift $OPTIND-1
+case $# in
+[01]) usage ;;
+esac
+
+type=$1
+shift
+cmd=$1
+shift
+
+# get the host info
+
+info=$HOME/.$command
+if test ! -r $info
+then echo "$command: $info: not found" >&2
+ exit 1
+fi
+ifs=${IFS-'
+ '}
+while :
+do IFS=' '
+ read hosttype hostname usr dir sh cp
+ code=$?
+ IFS=$ifs
+ case $code in
+ 0) ;;
+ *) echo "$command: $type: unknown cross compiler host type" >&2
+ exit 1
+ ;;
+ esac
+ case $hosttype in
+ $type) break ;;
+ esac
+done < $info
+
+# fill in the defaults
+
+case $usr in
+-) cpu= shu= ;;
+*) cpu=${usr}@ shu="-l $usr" ;;
+esac
+case $dir in
+-) dir= ;;
+esac
+case $sh in
+''|-) sh=ssh ;;
+esac
+case $cp in
+''|-) cp=scp ;;
+scp) cp="$cp -q" ;;
+esac
+
+trap "rm -f $tmp" 0 1 2 3 15
+$exec $cp $cmd $cpu$hostname:$dir </dev/null || exit 1
+cmd=./${cmd##*/}
+$exec $sh $shu $hostname "cd $dir; LD_LIBRARY_PATH=: $cmd $@ </dev/null 2>/dev/null; code=\$?; rm -f $cmd; echo $command: exit \$code >&2" </dev/null 2>$tmp
+exit `sed -e '/^'$command': exit [0-9][0-9]*$/!d' -e 's/.* //' $tmp`