#!/bin/bash -u # set -x # error message function (nested exit): trap "exit 1" TERM export ARB_SCRIPT_PID=$$ abort_script_with() { echo "`basename $0`: $@" 1>&2 kill -s TERM $ARB_SCRIPT_PID } # find the installation path for this ARB (the ARBHOME) get_arbhome() { # save cwd pushd . >/dev/null # full path of this script, but may be symlinked me="${BASH_SOURCE[0]}" # while me is symlink while [ -h "$me" ]; do # change to directory where symlink "$me" resides cd "$(dirname "$me")" # set $me to whatever $me links to me="$(readlink "$(basename "$me")")" done # me isn't a symlink, so the directory it resides in # must be the actual $ARBHOME/SH cd "$(dirname "$me")" # in $ARBHOME now cd .. echo -n "$PWD" # restore old cwd popd >/dev/null } # Add to the path variable named by $1 the component $2. $3 must be # "append" or "prepend" to indicate where the component is added. addpath () { eval value=\"\$\{$1:-\}\" case "$value" in *:${2}:*|*:${2}|${2}:*|${2}) result="$value" ;; "") result="$2" ;; *) case "$3" in prepend) result="$2:${value}" ;; append) result="${value}:$2" ;; *) abort_script_with "addpath expects param 'append' or 'prepend'" ;; esac esac eval "$1=\"$result\"" unset result value } # convenience routine which appends a string to a path. append () { if [ -n "${3:-}" ]; then abort_script_with too many arguments to append: "\$3=$3" fi addpath "$1" "$2" append } # convenience routine which prepends a string to a path. prepend () { if [ -n "${3:-}" ]; then abort_script_with too many arguments to prepend: "\$3=$3" fi addpath "$1" "$2" prepend } if [ -z ${HOME:-} ]; then HOME=~ fi export HOME if [ -z ${DISPLAY:-} ]; then DISPLAY=:0 fi export DISPLAY # get absolute path to directory where this script resides # (avoid use of readlink as it is missing on OSX) ARBHOME_OF_SCRIPT="$(get_arbhome)" ARB_SH="$ARBHOME_OF_SCRIPT/SH" ARB_SCRIPT="$ARB_SH/arb" export ARB_SH ARB_SCRIPT ARBHOME_OF_SCRIPT if [ -n "${ARBHOME:-}" -a "${ARBHOME:-}" != "$ARBHOME_OF_SCRIPT" ]; then echo "Ignoring set ARBHOME '$ARBHOME' (overridden by explicit call of '$0')" fi # use ARBHOME defined by location of script (comment out for old behavior) ARBHOME="$ARBHOME_OF_SCRIPT" echo "Using ARBHOME='$ARBHOME'" prepend PATH "$ARBHOME/bin" prepend LD_LIBRARY_PATH "$ARBHOME/lib" append LD_LIBRARY_PATH /usr/dt/lib append LD_LIBRARY_PATH /usr/openwin/lib append LD_LIBRARY_PATH "$ARBHOME/lib/addlibs" prepend SHLIB_PATH "$ARBHOME/lib" append SHLIB_PATH "$ARBHOME/lib/addlibs" append PYTHONPATH "$ARBHOME/lib/python2.6" append PERl5LIB "$ARBHOME/lib/perl5" # environment variables that this shell script sets/changes: export LD_LIBRARY_PATH MANPATH PATH ARBHOME SHLIB_PATH export PYTHONPATH PERL5LIB # global envs: export PWD HOME USER if [ -x "$ARBHOME/bin/ghostview" ] ; then GS_LIB="$ARBHOME/DEPOT/ghostscript" export GS_LIB fi ARB_PID="$$"; export ARB_PID if [ -z ${ARB_PROP:-} ]; then ARB_PROP="${HOME}/.arb_prop" fi echo "Using properties from $ARB_PROP" if [ ! -d "${ARB_PROP}" ] ; then echo "Directory ${ARB_PROP} not found - creating ..." mkdir "${ARB_PROP}" fi export ARB_PROP ARB_LOCAL_PTS="${HOME}/.arb_pts" if [ ! -d "${ARB_LOCAL_PTS}" ] ; then echo "Directory ${ARB_LOCAL_PTS} not found - creating ..." mkdir "${ARB_LOCAL_PTS}" fi if [ -z ${ARBMACROHOME:-} ] ; then ARBMACROHOME="${ARB_PROP}/macros"; fi if [ ! -d "${ARBMACROHOME}" ] ; then echo "Directory $ARBMACROHOME not found - creating ..." mkdir "${ARBMACROHOME}" fi export ARBMACROHOME if [ -z "${ARBMACRO:-}" ] ; then ARBMACRO="$ARBHOME/lib/macros" fi if [ ! -d "${ARBMACRO}" ] ; then echo "Directory $ARBMACRO not found - creating ..." mkdir "${ARBMACRO}" fi export ARBMACRO # set default command-tool used by ARB ARB_XTERM=${ARB_XTERM:-xterm -sl 1000 -sb -geometry 150x60} export ARB_XTERM ARB_XCMD=${ARB_XCMD:-$ARB_XTERM -e} export ARB_XCMD # save LD_LIBRARY_PATH ARB_LIBRARY_PATH="${LD_LIBRARY_PATH}" export ARB_LIBRARY_PATH case "${1:-}" in help|-h|--help) arb_ntree --help echo "" echo "" echo "arb - script to start arb" echo "Usage:" echo " arb # startup arb intro window" echo " arb [ntargs] # start arb with arguments" echo " arb shell # startup arb environment, but do not run arb" echo " arb help # show help" echo " arb trace [ntargs] # trace arb (to detect errors)" echo "" echo "ntargs are any argument allowed to arb_ntree (see above)" echo "" echo "" ;; shell) echo "Opening an ARB shell" if [ -n "$SHELL" ]; then $SHELL else bash -i fi echo "ARB shell terminates" ;; trace) shift arb_launcher $ARBHOME/SH/arb_trace "$@" ;; *) echo "Please wait while the program ARB is starting ....." arb_launcher arb_ntree "$@" esac