| @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% |