git-subtree-dir: cde/programs/dtksh/ksh93 git-subtree-split: b16c91f0120895eaae2618e821cac5b4eda27ac2
141 lines
4.2 KiB
Bash
141 lines
4.2 KiB
Bash
########################################################################
|
|
# #
|
|
# This software is part of the ast package #
|
|
# Copyright (c) 1994-2011 AT&T Intellectual Property #
|
|
# Copyright (c) 2020-2022 Contributors to ksh 93u+m #
|
|
# and is licensed under the #
|
|
# Eclipse Public License, Version 2.0 #
|
|
# #
|
|
# A copy of the License is available at #
|
|
# https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html #
|
|
# (with md5 checksum 84283fa8859daf213bdda5a9f8d1be1d) #
|
|
# #
|
|
# Glenn Fowler <gsf@research.att.com> #
|
|
# Martijn Dekker <martijn@inlv.org> #
|
|
# #
|
|
########################################################################
|
|
: cross compiler a.out execution
|
|
|
|
(command set -o posix) 2>/dev/null && set -o posix
|
|
|
|
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 $
|
|
]
|
|
[-author?Glenn Fowler <gsf@research.att.com>]
|
|
[-copyright?Copyright (c) 1994-2012 AT&T Intellectual Property]
|
|
[-license?https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html]
|
|
[+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`
|