Skip to content

Instantly share code, notes, and snippets.

@kirillkh
Created July 30, 2015 22:35
Show Gist options
  • Save kirillkh/a9ba2e00ef2e901f13bf to your computer and use it in GitHub Desktop.
Save kirillkh/a9ba2e00ef2e901f13bf to your computer and use it in GitHub Desktop.
#!/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
@xiconet
Copy link

xiconet commented Oct 19, 2015

Well, I found that the problem seems to be due to msys2 not liking spaces in path. I added another change to the scala script to use short names (line 83):
before:

# 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

after:

# Remove spaces from SCALA_HOME on windows
# Also use short name for msys2
if [[ -n "$cygwin$msys" ]]; then
  SCALA_HOME="$(shome="$(cygpath --windows --short-name "$SCALA_HOME")" ; cygpath --unix "$shome")"
# elif uname |grep -q ^MINGW; then
#   SEP=";"
fi

Seems to work, at least for now

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment