#!/usr/bin/env bash
# Copyright 2002 Combex, Inc. under the terms of the MIT X license
# found at http://www.opensource.org/licenses/mit-license.html ................
# E Driver Script (or E Driver Script Template)
#
# If you are looking at "rune-template.txt", then you are looking at a
# template to be used to construct "rune".
# In this case, for some variable definitions, you should instead see
# text of the form, for example,
#
# EHOME="$<>"
#
# but with curly brackets instead of angle brackets.
#
# In the comment preceding this, you should see an example of a
# possible value of this property, such as
# "c:/Program Files/erights.org/". Were this variable to have this
# value in the "rune" file, it would appear as
#
# EHOME="c:/Program Files/erights.org/"
#
# All these variables come from eprops.txt. See that file for more
# complete documentation.
#
# @author Mark S. Miller
# @author Tyler Close
# @author with contributions by Ben Laurie and Zooko
set -e
# Where is E installed? This should be the root directory of the
# installation.
#
# For example, "c:/Program Files/erights.org/"
EHOME="c:/Program Files/erights.org"
# What executable Java command should be used?
#
# For example, "d:/jdk1.3/bin/java.exe" or simply "java"
JCMD="c:/jdk1.3.1_01/bin/java.exe"
# OSDIR is the local subdirectory name used for files specific to
# this platform.
#
# For example, "win32"
OSDIR="win32"
# MACHDIR is the local subdirectory name used for files specific to
# this hardware architecture (instruction set).
#
# For example, "x86"
MACHDIR="x86"
###########################################################################
# Given that the above variables are set, the rest of this file should
# work as is.
###########################################################################
# Ensure that EHOME ends with a slash, even if not supplied.
EHOME="${EHOME%/}/"
# SEP is the platform dependent pathlist separator. On
# MSWindows/cygwin/win32, it's ";". Everywhere else it's ":".
#
# Used to build the -cp value to passed to java.
if [ "$OSDIR" = "win32" ]
then
SEP=";"
else
SEP=":"
fi
# The initial classpath (which is actually a pathlist -- a list of
# filepaths).
#
# If you change this definition to have more than one element, be sure
# to use the separator for your platform. See the definition of "SEP"
# above. This initial setting is added on to by -cpa and -cpb.
#
# Since SWT is still optional, perhaps this definition should only include
# swt.jar conditionally. However, including it unconditionally doesn't seem
# to hurt.
EPATH=${EHOME}e.jar${SEP}${EHOME}bin/${OSDIR}/swt.jar
# This function normalizes a file path so that bash will recognize it
# in command position. In the Cygwin environment (a Unix-like
# compatibility environment for MSWindows), this just uses
# "cygpath -u" to convert to Cygwin's idea of a Unix-like path.
#
# In all other environments, this is an identity function
function normalizeBashPath {
if (type -p cygpath.exe > /dev/null); then
cygpath -u -- "$1"
else
echo "$1"
fi
}
# This function normalizes a file path so E will recognize it. In the
# Cygwin environment, this needs to undo the funny path prefix
# manipulation done by cygwin, such as turning "d:" into "//d/", or
# "d:/cygwin/bin" into "/usr/bin". However, we still use only forward
# slashes, not backslashes, as path separators, in order for the
# normalized path to pass through bash without needing further escapes.
#
# In all other environments, this is an identity function
function normalizeEPath {
if (type -p cygpath.exe > /dev/null); then
path=`cygpath -w -- "$1"`
echo "${path//\\\\//}"
else
echo "$1"
fi
}
JCMD=`normalizeBashPath "$JCMD"`
# What to say if I'm confused
function usage {
echo "usage: rune * --? (*)?"
echo "For more usage help, say \"rune --help\""
exit -1
}
# JOPTS are options to Java
declare -a JOPTS
function jpush {
JOPTS[${#JOPTS[@]}]=$1
}
jpush "-Xfuture"
jpush "-De.home=${EHOME}"
# Note that the java.library.path must be provided on the command line
# rather than by eprops.txt, since eprops.txt is processed after the
# ClassLoader caches the value of this property.
#
# Since SWT is still optional, and since the java.library.path is currently
# only needed for SWT, perhaps this statement should only jpush
# java.library.path conditionally. However, including it unconditionally
# doesn't seem to hurt, and we may have more native code at a later time.
jpush "-Djava.library.path=${EHOME}bin/$OSDIR/$MACHDIR"
# EOPTS are options to Rune
declare -a EOPTS
function epush {
EOPTS[${#EOPTS[@]}]=$1
}
# Either zero or one long
declare -a FNAME
EXECFLAG=exec
while [ $(($# >= 1)) = 1 ]; do
case $1 in
-cpa) shift
if [ $(($# < 1)) = 1 ]; then usage; fi
EPATH=${EPATH}${SEP}$1
shift;;
-cpb) shift
if [ $(($# < 1)) = 1 ]; then usage; fi
EPATH=$1${SEP}${EPATH}
shift;;
-D*) jpush "$1"; shift;;
-J*) jpush "${1#-J}"; shift;;
-show) EXECFLAG=show; shift;;
--) shift;
if [ $(($# < 1)) = 1 ]; then break; fi
FNAME[0]=`normalizeEPath "$1"`; shift;
break;;
--*) epush "$1"; shift;;
*) FNAME[0]=`normalizeEPath "$1"`; shift;
break;;
esac
done
CMD=("${JCMD}" -cp "${EPATH}" "${JOPTS[@]}" \
org.erights.e.elang.interp.Rune "${EOPTS[@]}" \
"${FNAME[@]}" "$@")
if [ $EXECFLAG = exec ]; then
exec "${CMD[@]}"
else
for i in "${CMD[@]}"; do
echo $i
done
fi