99 lines
2.9 KiB
Bash
Executable File
99 lines
2.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Based on scalac from the Scala distribution
|
|
# Copyright 2002-2011, LAMP/EPFL
|
|
# Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
# Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
|
|
cygwin=false;
|
|
case "`uname`" in
|
|
CYGWIN*) cygwin=true ;;
|
|
esac
|
|
|
|
# Based on findScalaHome() from scalac script
|
|
findKotlinHome() {
|
|
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)
|
|
}
|
|
|
|
findJavaVersion() {
|
|
# Note that this only loads the first component of the version, so "1.8.0_265" -> "1".
|
|
# But it's fine because major version is 9 for JDK 9, and so on.
|
|
regex='^.*version "([[:digit:]]+).*$'
|
|
while read -r line; do
|
|
if [[ "$line" =~ $regex ]]; then
|
|
echo ${BASH_REMATCH[1]}
|
|
fi
|
|
done <<< $("${JAVACMD:=java}" -version 2>&1)
|
|
}
|
|
|
|
KOTLIN_HOME="$(findKotlinHome)"
|
|
|
|
if $cygwin; then
|
|
# Remove spaces from KOTLIN_HOME on windows
|
|
KOTLIN_HOME=`cygpath --windows --short-name "$KOTLIN_HOME"`
|
|
fi
|
|
|
|
[ -n "$JAVA_OPTS" ] || JAVA_OPTS="-Xmx256M -Xms32M"
|
|
|
|
declare -a java_args
|
|
declare -a kotlin_args
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-D*)
|
|
java_args=("${java_args[@]}" "$1")
|
|
shift
|
|
;;
|
|
-J*)
|
|
java_args=("${java_args[@]}" "${1:2}")
|
|
if [ "x${1:2}" = "x" ]; then
|
|
echo "error: empty -J argument"
|
|
exit 1
|
|
fi
|
|
shift
|
|
;;
|
|
*)
|
|
kotlin_args=("${kotlin_args[@]}" "$1")
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -z "$JAVACMD" -a -n "$JAVA_HOME" -a -x "$JAVA_HOME/bin/java" ]; then
|
|
JAVACMD="$JAVA_HOME/bin/java"
|
|
fi
|
|
|
|
declare -a kotlin_app
|
|
|
|
java_version="$(findJavaVersion)"
|
|
if [[ $java_version -ge 9 ]]; then
|
|
# Workaround the illegal reflective access warning from ReflectionUtil to ResourceBundle.setParent, see IDEA-248785.
|
|
java_args=("${java_args[@]}" "--add-opens" "java.base/java.util=ALL-UNNAMED")
|
|
fi
|
|
|
|
if [ -n "$KOTLIN_RUNNER" ]; then
|
|
java_args=("${java_args[@]}" "-Dkotlin.home=${KOTLIN_HOME}")
|
|
kotlin_app=("${KOTLIN_HOME}/lib/kotlin-runner.jar" "org.jetbrains.kotlin.runner.Main")
|
|
else
|
|
[ -n "$KOTLIN_COMPILER" ] || KOTLIN_COMPILER=org.jetbrains.kotlin.cli.jvm.K2JVMCompiler
|
|
|
|
if [[ $java_version < 13 ]]; then
|
|
java_args=("${java_args[@]}" "-noverify")
|
|
fi
|
|
|
|
declare additional_classpath=""
|
|
if [ -n "$KOTLIN_TOOL" ]; then
|
|
additional_classpath=":${KOTLIN_HOME}/lib/${KOTLIN_TOOL}"
|
|
fi
|
|
|
|
kotlin_app=("${KOTLIN_HOME}/lib/kotlin-preloader.jar" "org.jetbrains.kotlin.preloading.Preloader" "-cp" "${KOTLIN_HOME}/lib/kotlin-compiler.jar${additional_classpath}" $KOTLIN_COMPILER)
|
|
fi
|
|
|
|
"${JAVACMD:=java}" $JAVA_OPTS "${java_args[@]}" -cp "${kotlin_app[@]}" "${kotlin_args[@]}"
|