Created
July 30, 2015 22:35
-
-
Save kirillkh/a9ba2e00ef2e901f13bf to your computer and use it in GitHub Desktop.
Revisions
-
kirillkh created this gist
Jul 30, 2015 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,222 @@ #!/usr/bin/env bash # ############################################################################## # Copyright 2002-2013 LAMP/EPFL # # This is free software; see the distribution for copying conditions. # There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. ############################################################################## findScalaHome () { # see SI-2092 and SI-5792 local source="${BASH_SOURCE[0]}" while [ -h "$source" ] ; do local linked="$(readlink "$source")" local dir="$( cd -P $(dirname "$source") && cd -P $(dirname "$linked") && pwd )" source="$dir/$(basename "$linked")" done ( cd -P "$(dirname "$source")/.." && pwd ) } execCommand () { [[ -n $SCALA_RUNNER_DEBUG ]] && echo "" && for arg in "$@"; do echo "$arg"; done && echo ""; "$@" } # Not sure what the right default is here: trying nonzero. scala_exit_status=127 saved_stty="" # restore stty settings (echo in particular) function restoreSttySettings() { if [[ -n $SCALA_RUNNER_DEBUG ]]; then echo "restoring stty:" echo "$saved_stty" fi stty $saved_stty saved_stty="" } function onExit() { [[ "$saved_stty" != "" ]] && restoreSttySettings exit $scala_exit_status } # to reenable echo if we are interrupted before completing. trap onExit INT # save terminal settings saved_stty=$(stty -g 2>/dev/null) # clear on error so we don't later try to restore them if [[ ! $? ]]; then saved_stty="" fi if [[ -n $SCALA_RUNNER_DEBUG ]]; then echo "saved stty:" echo "$saved_stty" fi unset cygwin if uname | grep -q ^CYGWIN; then cygwin="$(uname)" fi unset mingw if uname | grep -q ^MINGW; then mingw="$(uname)" fi unset msys if uname | grep -q ^MSYS; then msys="$(uname)" fi # Finding the root folder for this Scala distribution SCALA_HOME="$(findScalaHome)" SEP=":" # Possible additional command line options WINDOWS_OPT="" EMACS_OPT="-Denv.emacs=$EMACS" # Remove spaces from SCALA_HOME on windows if [[ -n "$cygwin" ]]; then SCALA_HOME="$(shome="$(cygpath --windows --short-name "$SCALA_HOME")" ; cygpath --unix "$shome")" # elif uname |grep -q ^MINGW; then # SEP=";" fi # Constructing the extension classpath TOOL_CLASSPATH="" if [[ -z "$TOOL_CLASSPATH" ]]; then for ext in "$SCALA_HOME"/lib/* ; do file_extension="${ext##*.}" # SI-8967 Only consider directories and files named '*.jar' if [[ -d "$ext" || $file_extension == "jar" ]]; then if [[ -z "$TOOL_CLASSPATH" ]]; then TOOL_CLASSPATH="$ext" else TOOL_CLASSPATH="${TOOL_CLASSPATH}${SEP}${ext}" fi fi done fi if [[ -n "$cygwin" ]]; then if [[ "$OS" = "Windows_NT" ]] && cygpath -m .>/dev/null 2>/dev/null ; then format=mixed else format=windows fi SCALA_HOME="$(cygpath --$format "$SCALA_HOME")" if [[ -n "$JAVA_HOME" ]]; then JAVA_HOME="$(cygpath --$format "$JAVA_HOME")" fi TOOL_CLASSPATH="$(cygpath --path --$format "$TOOL_CLASSPATH")" fi if [[ -n "$cygwin$mingw$msys" ]]; then case "$TERM" in rxvt* | xterm*) stty -icanon min 1 -echo WINDOWS_OPT="-Djline.terminal=unix" ;; esac fi [[ -n "$JAVA_OPTS" ]] || JAVA_OPTS="-Xmx256M -Xms32M" # break out -D and -J options and add them to JAVA_OPTS as well # so they reach the underlying JVM in time to do some good. The # -D options will be available as system properties. declare -a java_args declare -a scala_args # SI-8358, SI-8368 -- the default should really be false, # but I don't want to flip the default during 2.11's RC cycle OVERRIDE_USEJAVACP="-Dscala.usejavacp=true" while [[ $# -gt 0 ]]; do case "$1" in -D*) # pass to scala as well: otherwise we lose it sometimes when we # need it, e.g. communicating with a server compiler. java_args+=("$1") scala_args+=("$1") # respect user-supplied -Dscala.usejavacp case "$1" in -Dscala.usejavacp*) OVERRIDE_USEJAVACP="";; esac shift ;; -J*) # as with -D, pass to scala even though it will almost # never be used. java_args+=("${1:2}") scala_args+=("$1") shift ;; -toolcp) TOOL_CLASSPATH="${TOOL_CLASSPATH}${SEP}${2}" shift 2 ;; -nobootcp) unset usebootcp shift ;; -usebootcp) usebootcp="true" shift ;; -debug) SCALA_RUNNER_DEBUG=1 shift ;; *) scala_args+=("$1") shift ;; esac done # reset "$@" to the remaining args set -- "${scala_args[@]}" if [[ -z "$JAVACMD" && -n "$JAVA_HOME" && -x "$JAVA_HOME/bin/java" ]]; then JAVACMD="$JAVA_HOME/bin/java" fi declare -a classpath_args # default to the boot classpath for speed, except on cygwin/mingw/msys because # JLine on Windows requires a custom DLL to be loaded. unset usebootcp if [[ -z "$cygwin$mingw$msys" ]]; then usebootcp="true" fi # If using the boot classpath, also pass an empty classpath # to java to suppress "." from materializing. if [[ -n $usebootcp ]]; then classpath_args=("-Xbootclasspath/a:$TOOL_CLASSPATH" -classpath "\"\"") else classpath_args=(-classpath "$TOOL_CLASSPATH") fi # note that variables which may intentionally be empty must not # be quoted: otherwise an empty string will appear as a command line # argument, and java will think that is the program to run. execCommand \ "${JAVACMD:=java}" \ $JAVA_OPTS \ "${java_args[@]}" \ "${classpath_args[@]}" \ -Dscala.home="$SCALA_HOME" \ $OVERRIDE_USEJAVACP \ "$EMACS_OPT" \ $WINDOWS_OPT \ scala.tools.nsc.MainGenericRunner "$@" # record the exit status lest it be overwritten: # then reenable echo and propagate the code. scala_exit_status=$? onExit