113 lines
3.5 KiB
Batchfile
113 lines
3.5 KiB
Batchfile
@echo off
|
|
|
|
rem Based on scalac.bat from the Scala distribution
|
|
rem Copyright 2002-2011, LAMP/EPFL
|
|
rem Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
rem Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
|
|
rem We adopt the following conventions:
|
|
rem - System/user environment variables start with a letter
|
|
rem - Local batch variables start with an underscore ('_')
|
|
|
|
setlocal
|
|
call :set_home
|
|
|
|
if "%_KOTLIN_COMPILER%"=="" set _KOTLIN_COMPILER=org.jetbrains.kotlin.cli.jvm.K2JVMCompiler
|
|
|
|
if not "%JAVA_HOME%"=="" (
|
|
rem Prepend JAVA_HOME to local PATH to be able to simply execute "java" later in the script.
|
|
set "PATH=%JAVA_HOME%\bin;%PATH%"
|
|
)
|
|
|
|
rem We use the value of the JAVA_OPTS environment variable if defined
|
|
if "%JAVA_OPTS%"=="" set JAVA_OPTS=-Xmx256M -Xms32M
|
|
|
|
rem Iterate through arguments and split them into java and kotlin ones
|
|
:loop
|
|
set _arg=%~1
|
|
if "%_arg%" == "" goto loopend
|
|
|
|
if "%_arg:~0,2%"=="-J" (
|
|
if "%_arg:~2%"=="" (
|
|
echo error: empty -J argument
|
|
goto error
|
|
)
|
|
set JAVA_OPTS=%JAVA_OPTS% "%_arg:~2%"
|
|
) else (
|
|
if "%_arg:~0,2%"=="-D" (
|
|
set JAVA_OPTS=%JAVA_OPTS% "%_arg%"
|
|
) else (
|
|
set KOTLIN_OPTS=%KOTLIN_OPTS% "%_arg%"
|
|
)
|
|
)
|
|
shift
|
|
goto loop
|
|
:loopend
|
|
|
|
setlocal EnableDelayedExpansion
|
|
|
|
call :set_java_version
|
|
if !_java_major_version! geq 9 (
|
|
rem Workaround the illegal reflective access warning from ReflectionUtil to ResourceBundle.setParent, see IDEA-248785.
|
|
set JAVA_OPTS=!JAVA_OPTS! "--add-opens" "java.base/java.util=ALL-UNNAMED"
|
|
)
|
|
|
|
if "!_KOTLIN_RUNNER!"=="1" (
|
|
java !JAVA_OPTS! "-Dkotlin.home=%_KOTLIN_HOME%" -cp "%_KOTLIN_HOME%\lib\kotlin-runner.jar" ^
|
|
org.jetbrains.kotlin.runner.Main %KOTLIN_OPTS%
|
|
) else (
|
|
set _ADDITIONAL_CLASSPATH=
|
|
|
|
if !_java_major_version! lss 13 (
|
|
set JAVA_OPTS=!JAVA_OPTS! "-noverify"
|
|
)
|
|
|
|
if not "%_KOTLIN_TOOL%"=="" (
|
|
set _ADDITIONAL_CLASSPATH=;%_KOTLIN_HOME%\lib\%_KOTLIN_TOOL%
|
|
)
|
|
|
|
java !JAVA_OPTS! -cp "%_KOTLIN_HOME%\lib\kotlin-preloader.jar" ^
|
|
org.jetbrains.kotlin.preloading.Preloader -cp "%_KOTLIN_HOME%\lib\kotlin-compiler.jar!_ADDITIONAL_CLASSPATH!" ^
|
|
%_KOTLIN_COMPILER% %KOTLIN_OPTS%
|
|
)
|
|
|
|
goto end
|
|
|
|
rem ##########################################################################
|
|
rem # subroutines
|
|
|
|
:set_home
|
|
set _BIN_DIR=
|
|
for %%i in (%~sf0) do set _BIN_DIR=%_BIN_DIR%%%~dpsi
|
|
set _KOTLIN_HOME=%_BIN_DIR%..
|
|
goto :eof
|
|
|
|
rem Parses "java -version" output and stores the major version to _java_major_version.
|
|
rem Note that this only loads the first component of the version, so "1.8.0_265" -> "1".
|
|
rem But it's fine because major version is 9 for JDK 9, and so on.
|
|
rem Needs to be executed in the EnableDelayedExpansion mode.
|
|
:set_java_version
|
|
set _version=
|
|
rem Parse output and take the third token from the string containing " version ".
|
|
rem It should be something like "1.8.0_275" or "15.0.1".
|
|
for /f "tokens=3" %%i in ('java -version 2^>^&1 ^| findstr /i " version "') do (
|
|
rem Split the string by "-" or "." and take the first token.
|
|
for /f "delims=-. tokens=1" %%j in ("%%i") do (
|
|
rem At this point, _version should be something like "1 or "15. Note the leading quote.
|
|
set _version=%%j
|
|
)
|
|
)
|
|
if "!_version!"=="" (
|
|
rem If failed to parse the output, set the version to 1.
|
|
set _java_major_version=1
|
|
) else (
|
|
rem Strip the leading quote.
|
|
set _java_major_version=!_version:~1!
|
|
)
|
|
goto :eof
|
|
|
|
:error
|
|
set ERRORLEVEL=1
|
|
|
|
:end
|
|
exit /b %ERRORLEVEL% |