add "-win" option to run Windows softIoc on *NIX

This commit is contained in:
Xiaoqiang Wang
2019-12-05 16:32:33 +01:00
parent 39d5e48f24
commit e5abd1d01d
+39 -6
View File
@@ -8,6 +8,7 @@ help () {
echo "Options:"
echo " -?, -h, --help Show this page and exit."
echo " -v, --version Show version and exit."
echo " -win Run Windows softIOC via WINE."
echo " -32 Force 32 bit version (on 64 bit systems)."
echo " -x[.z[.y]] Select EPICS base version x.z.y (e.g. 3.14.8, 3.15, 7)."
echo " -d, --debug Run IOC with gdb."
@@ -51,6 +52,15 @@ rp() {
( realpath $1 || readlink -f $1 || readlink $1 || (cd -P $1 && echo $PWD) || (x=$(\ls -ld $1) && echo ${x##* }) || echo $1 ) 2>/dev/null
}
# convert unix path to windows path
unix2win() {
# add z: prefix to absolute path
p=${1/#\//z:\//}
# replace '/' with '\'
p=${p//\//\\\\}
echo $1
}
# if EPICS_HOST_ARCH is not set guess it
if [ -z "$EPICS_HOST_ARCH" ]
then
@@ -72,6 +82,9 @@ fi 2> /dev/null
while true
do
case $1 in
( -win )
EPICS_HOST_ARCH=windows-x64
;;
( -32 )
EPICS_HOST_ARCH=${EPICS_HOST_ARCH%_64}
;;
@@ -153,8 +166,16 @@ then
fi
case $(uname) in
( Darwin ) LIBPREFIX=lib; LIBPOSTFIX=.dylib;;
( * ) LIBPREFIX=lib; LIBPOSTFIX=.so;;
( Darwin )
LIBPREFIX=lib; LIBPOSTFIX=.dylib
;;
( * )
LIBPREFIX=lib; LIBPOSTFIX=.so; EXEPOSTFIX=
# assume we need to run Windows softIoc on UNIX via WINE
if [[ "$EPICS_HOST_ARCH" == win* ]]; then
LIBPREFIX=; LIBPOSTFIX=.dll; EXEPOSTFIX=.exe
fi
;;
esac
# Get actual EPICS revision
@@ -369,14 +390,14 @@ fi
if [ "$BASECODE" -ge 31412 ]
then
if [ -x $EPICS_BASE/bin/$EPICS_HOST_ARCH/softIocPVA ]
if [ -x $EPICS_BASE/bin/$EPICS_HOST_ARCH/softIocPVA$EXEPOSTFIX ]
then
EXE=$EPICS_BASE/bin/$EPICS_HOST_ARCH/softIocPVA
EXE=$EPICS_BASE/bin/$EPICS_HOST_ARCH/softIocPVA$EXEPOSTFIX
ARGS="-D $EPICS_BASE/dbd/softIocPVA.dbd"
echo "dlload $EPICS_BASE/lib/$EPICS_HOST_ARCH/${LIBPREFIX}nt$LIBPOSTFIX"
echo "dlload $EPICS_BASE/lib/$EPICS_HOST_ARCH/${LIBPREFIX}pvDatabase$LIBPOSTFIX"
else
EXE=$EPICS_BASE/bin/$EPICS_HOST_ARCH/softIoc
EXE=$EPICS_BASE/bin/$EPICS_HOST_ARCH/softIoc$EXEPOSTFIX
ARGS="-D $EPICS_BASE/dbd/softIoc.dbd"
fi
LDCMD="dlload"
@@ -392,7 +413,19 @@ else
echo "${APP}_registerRecordDeviceDriver(pdbbase)"
fi
if [ ! -x $EXE ]
# use WINE to run softIo, and convert EPICS_DRIVER_PATH to windows format
if [[ $EXEPOSTFIX == ".exe" ]]
then
LOADER="wine"
EPICS_DRIVER_PATH_WIN=
IFS=:
for p in $EPICS_DRIVER_PATH; do
EPICS_DRIVER_PATH_WIN="$EPICS_DRIVER_PATH_WIN;$(unix2win $p)"
done
EPICS_DRIVER_PATH=${EPICS_DRIVER_PATH_WIN#;}
fi
if [ ! -x $EXE ];
then
echo "$EXE not found or not executable." >&2
exit 1