#!/bin/sh
|
#
|
# Launch squeakvm from the command line or a menu script, with a good
|
# plugin path, text encodings and pulseaudio kludge
|
#
|
# Last edited: 2013-11-13 19:51:35 by piumarta on emilia
|
|
PATH=/usr/bin:/bin
|
PLUGIN_REV=5.0-202403301849-cog
|
|
realpath () {
|
path="$1"
|
while test -L "${path}"; do
|
dir=`dirname "${path}"`
|
dir=`cd "${dir}" && pwd -P`
|
path=`basename "${path}"`
|
path=`ls -l "${dir}/${path}" | sed 's,.* -> ,,'`
|
if test `expr "${path}" : "/"` -eq 0; then
|
path="${dir}/${path}"
|
fi
|
done
|
if test -d "${path}"; then
|
(cd "${path}" && pwd -P)
|
else
|
dir=`dirname "${path}"`
|
base=`basename "${path}"`
|
(cd "${dir}" && echo "`pwd -P`/${base}")
|
fi
|
}
|
|
bindir=`realpath "${0}"`
|
bindir=`dirname "${bindir}"`
|
prefix=`dirname "${bindir}"`
|
libdir="${prefix}/lib/squeak"
|
plgdir="${libdir}/$PLUGIN_REV-32bit"
|
useoss="false"
|
ck="ckformat"
|
squeakvm="squeak"
|
squeakvm64="squeak"
|
plgd64="${prefix}/lib/amd64/squeak/$PLUGIN_REV-64bit"
|
cogvm=""
|
cogvm64=""
|
vm=""
|
plugins=""
|
wrapper=""
|
image=""
|
format=""
|
info=""
|
jit=""
|
|
# look for VM options affecting this script's behaviour
|
|
options () {
|
while test "$#" -gt "0"; do
|
case $1 in
|
-vm-sound*) useoss="false";;
|
-vm) shift; case "$1" in sound*) useoss="false"; esac;;
|
-image-info) info="true";;
|
--) break;;
|
*) if test ! "$image" -a \( -f "$1.image" -o -f "$1" \); then image="$1"; fi;;
|
esac
|
shift
|
done
|
}
|
|
case "$1" in
|
-jit) jit=$1; shift; squeakvm=""; squeakvm64="";;
|
-nojit) jit=$1; shift; cogvm=""; cogvm64="";;
|
esac
|
|
options "$@"
|
|
# try to find the image file format
|
|
if test -x "${plgd64}/${ck}"; then ck="${plgd64}/${ck}"
|
elif test -x "${plgdir}/${ck}"; then ck="${plgdir}/${ck}"
|
elif test -x "${libdir}/${ck}"; then ck="${libdir}/${ck}"
|
elif test -x "${bindir}/${ck}"; then ck="${bindir}/${ck}"
|
elif test -x "`which ${ck}`"; then ck="`which ${ck}`"
|
fi
|
|
if test -z "${image}"; then image="${SQUEAK_IMAGE}"; fi
|
if test -z "${image}"; then image="squeak"; fi
|
if test -f "${image}.image"; then image="${image}.image"; fi
|
|
if test "${info}"; then
|
if test ! -x "${ck}"; then
|
echo "cannot find executable file: ${ck}" >&2
|
exit 1
|
fi
|
if test ! -f "${image}"; then
|
echo "cannot find image file: ${image}" >&2
|
exit 1
|
fi
|
exec "${ck}" "${image}"
|
fi
|
|
if test -x "${ck}" -a -f "${image}"; then
|
format=`"${ck}" "${image}"`
|
case "${format}" in
|
6521|7033) vms="${squeakvm}";;
|
68021|68533) vms="${squeakvm64}"; plgdir="${plgd64}";;
|
*) vms="${squeakvm}";;
|
esac
|
else
|
vms="${squeakvm}" # no image found, run default VM with args
|
fi
|
|
# find the vm and set the plugin path
|
|
if test -z "${vms}"; then
|
echo "cannot find VM to run image '${image}' with option '${jit}'" >&2
|
exit 1
|
fi
|
|
for avm in ${vms}; do
|
#echo CHECKING ${avm}
|
if test -x "${plgdir}/${avm}"; then # bin/squeak -> lib/squeak/x.y-z/squeakvm
|
vm="${plgdir}/${avm}"
|
plugins="${plgdir}"
|
break;
|
elif test -x "${bindir}/${avm}"; then # bld/squeak -> bld/squeakvm
|
vm="${bindir}/${avm}"
|
plugins="${bindir}/%n"
|
break;
|
elif test -x "`which ${avm}`"; then
|
vm="`which ${avm}`"
|
plugins=""
|
break;
|
fi
|
done
|
|
if test -z "${vm}"; then
|
echo "cannot find executable file: ${vms}" >&2
|
exit 1
|
fi
|
|
# command-line overrides environment, so communicate anything we decide here via the environment
|
|
if test -z "${SQUEAK_PATHENC}"; then SQUEAK_PATHENC="UTF-8"; export SQUEAK_PATHENC; fi
|
if test -z "${SQUEAK_ENCODING}"; then SQUEAK_ENCODING="UTF-8"; export SQUEAK_ENCODING; fi
|
|
if test -z "${SQUEAK_PLUGINS}"; then
|
if test -n "${plugins}"; then
|
SQUEAK_PLUGINS="${plugins}"
|
export SQUEAK_PLUGINS
|
fi
|
fi
|
|
# deal with pulseaudio if it is running
|
|
if test -z "${SQUEAK_VM}"; then
|
if ${useoss}; then
|
if pulseaudio --check 2>/dev/null; then
|
if padsp true 2>/dev/null; then
|
wrapper="padsp"
|
SQUEAK_VM="sound-OSS"
|
export SQUEAK_VM
|
fi
|
fi
|
fi
|
fi
|
|
# fix broken locales
|
|
if test -z "$LC_ALL"; then
|
LC_ALL="$LANG"
|
export LC_ALL
|
fi
|
|
# debug output
|
|
if test "0$SQUEAK_DEBUG" -gt "0"; then
|
set | fgrep SQUEAK_
|
set -x
|
fi
|
|
# run the vm
|
|
exec ${wrapper} "${vm}" "$@"
|