#!/bin/bash
# -----------------------------------------------------------------------------
# jruby-ng-server - Start Script for the JRuby NailGun server
#
# Environment Variable Prequisites
#
#   JRUBY_HOME    (Optional) May point at your JRuby "build" directory.
#                 If not present, the current working directory is assumed.
#
#   JRUBY_OPTS    (Optional) Default JRuby command line args
#   JAVA_HOME     Must point at your Java Development Kit installation.
#
# -----------------------------------------------------------------------------

cygwin=false

# ----- Identify OS we are running under --------------------------------------
case "`uname`" in
CYGWIN*) cygwin=true
esac

# ----- Verify and Set Required Environment Variables -------------------------

## resolve links - $0 may be a link to  home
PRG=$0
progname=`basename "$0"`

while [ -h "$PRG" ] ; do
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '.*/.*' > /dev/null; then
  PRG="$link"
  else
  PRG="`dirname $PRG`/$link"
  fi
done

JRUBY_HOME_1=`dirname "$PRG"`           # the ./bin dir
JRUBY_HOME_1=`dirname "$JRUBY_HOME_1"`  # the . dir
if [ -d "${JRUBY_HOME_1}/lib" ] ; then
  JRUBY_HOME="${JRUBY_HOME_1}"
fi

if [ -z "$JRUBY_OPTS" ] ; then
  JRUBY_OPTS=""
fi

if [ -z "$JAVA_HOME" ] ; then
  JAVA_CMD='java'
else
  if $cygwin; then
    JAVA_HOME=`cygpath -u "$JAVA_HOME"`
  fi
  JAVA_CMD="$JAVA_HOME/bin/java"
fi

JRUBY_SHELL=/bin/sh

# ----- Set Up The System Classpath -------------------------------------------

if [ "$JRUBY_PARENT_CLASSPATH" != "" ]; then
    # Use same classpath propagated from parent jruby
    CP=$JRUBY_PARENT_CLASSPATH
else
    if [ "$CLASSPATH" != "" ]; then
        CP="$CLASSPATH"
        if $cygwin; then
            CP=`cygpath -p -u "$CP"`
        fi
    else
        CP=""
    fi

    CP_DELIMETER=":"

    # add necessary jars for command-line execution
    if [ "$CP" ]; then
        CP="$CP$CP_DELIMETER$JRUBY_HOME/tool/nailgun/jruby-nailgun.jar"
        else
        CP="$JRUBY_HOME/tool/nailgun/jruby-nailgun.jar"
    fi

    if $cygwin; then
        CP=`cygpath -p -w "$CP"`
    fi
fi

# ----- Execute The Requested Command -----------------------------------------


JAVA_MEM=-Xmx378m
JAVA_STACK=-Xss1024k

# Split out any -J argument for passing to the JVM.
# Scanning for args is aborted by '--'.
java_args=()
ng_args=()
    while [ $# -gt 0 ]
do
    case "$1" in
    # Stuff after '-J' in this argument goes to JVM
    -J*)
        val=${1:2}
        if [ "${val:0:4}" = "-Xmx" ]; then
            JAVA_MEM=$val
        elif [ "${val:0:4}" = "-Xss" ]; then
            JAVA_STACK=$val
        else
            java_args=("${java_args[@]}" "${1:2}")
        fi
        ;;
     # Other opts go to ruby
     -*) ng_args=("${ng_args[@]}" "$1") ;;
     # Abort processing on first non-opt arg
     *) break ;;
    esac
    shift
done

# Append the rest of the arguments
ng_args=("${ng_args[@]}" "$@")

# Put the ruby_args back into the position arguments $1, $2 etc
set -- "${ng_args[@]}"

JAVA_OPTS="$JAVA_OPTS ${java_args[@]} $JAVA_MEM $JAVA_STACK"

if $cygwin; then
  JAVA_HOME=`cygpath --mixed "$JAVA_HOME"`
  JRUBY_HOME=`cygpath --mixed "$JRUBY_HOME"`
  JRUBY_SHELL=`cygpath --mixed "$JRUBY_SHELL"`
fi

exec "$JAVA_CMD" $JAVA_OPTS -classpath "$CP" \
  "-Djruby.home=$JRUBY_HOME" \
  "-Djruby.lib=$JRUBY_HOME/lib" -Djruby.script=jruby \
  "-Djruby.shell=$JRUBY_SHELL" \
  com.martiansoftware.nailgun.NGServer $ng_args
