123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- ########################################################################
- # #
- # 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`
|