#!/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