1*db694bcbSAndroid Build Coastguard Worker@echo off 2*db694bcbSAndroid Build Coastguard Worker 3*db694bcbSAndroid Build Coastguard Workerrem Based on scalac.bat from the Scala distribution 4*db694bcbSAndroid Build Coastguard Workerrem Copyright 2002-2011, LAMP/EPFL 5*db694bcbSAndroid Build Coastguard Workerrem Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. 6*db694bcbSAndroid Build Coastguard Workerrem Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. 7*db694bcbSAndroid Build Coastguard Worker 8*db694bcbSAndroid Build Coastguard Workerrem We adopt the following conventions: 9*db694bcbSAndroid Build Coastguard Workerrem - System/user environment variables start with a letter 10*db694bcbSAndroid Build Coastguard Workerrem - Local batch variables start with an underscore ('_') 11*db694bcbSAndroid Build Coastguard Worker 12*db694bcbSAndroid Build Coastguard Workersetlocal 13*db694bcbSAndroid Build Coastguard Workercall :set_home 14*db694bcbSAndroid Build Coastguard Worker 15*db694bcbSAndroid Build Coastguard Workerif "%_KOTLIN_COMPILER%"=="" set _KOTLIN_COMPILER=org.jetbrains.kotlin.cli.jvm.K2JVMCompiler 16*db694bcbSAndroid Build Coastguard Worker 17*db694bcbSAndroid Build Coastguard Workerif not "%JAVA_HOME%"=="" ( 18*db694bcbSAndroid Build Coastguard Worker rem Prepend JAVA_HOME to local PATH to be able to simply execute "java" later in the script. 19*db694bcbSAndroid Build Coastguard Worker set "PATH=%JAVA_HOME%\bin;%PATH%" 20*db694bcbSAndroid Build Coastguard Worker) 21*db694bcbSAndroid Build Coastguard Worker 22*db694bcbSAndroid Build Coastguard Workerrem We use the value of the JAVA_OPTS environment variable if defined 23*db694bcbSAndroid Build Coastguard Workerif "%JAVA_OPTS%"=="" set JAVA_OPTS=-Xmx256M -Xms128M 24*db694bcbSAndroid Build Coastguard Worker 25*db694bcbSAndroid Build Coastguard Workerrem Iterate through arguments and split them into java and kotlin ones 26*db694bcbSAndroid Build Coastguard Worker:loop 27*db694bcbSAndroid Build Coastguard Workerset _arg=%~1 28*db694bcbSAndroid Build Coastguard Workerif "%_arg%" == "" goto loopend 29*db694bcbSAndroid Build Coastguard Worker 30*db694bcbSAndroid Build Coastguard Workerif "%_arg:~0,2%"=="-J" ( 31*db694bcbSAndroid Build Coastguard Worker if "%_arg:~2%"=="" ( 32*db694bcbSAndroid Build Coastguard Worker echo error: empty -J argument 33*db694bcbSAndroid Build Coastguard Worker goto error 34*db694bcbSAndroid Build Coastguard Worker ) 35*db694bcbSAndroid Build Coastguard Worker set JAVA_OPTS=%JAVA_OPTS% "%_arg:~2%" 36*db694bcbSAndroid Build Coastguard Worker) else ( 37*db694bcbSAndroid Build Coastguard Worker if "%_arg:~0,2%"=="-D" ( 38*db694bcbSAndroid Build Coastguard Worker set JAVA_OPTS=%JAVA_OPTS% "%_arg%" 39*db694bcbSAndroid Build Coastguard Worker ) else ( 40*db694bcbSAndroid Build Coastguard Worker set KOTLIN_OPTS=%KOTLIN_OPTS% "%_arg%" 41*db694bcbSAndroid Build Coastguard Worker ) 42*db694bcbSAndroid Build Coastguard Worker) 43*db694bcbSAndroid Build Coastguard Workershift 44*db694bcbSAndroid Build Coastguard Workergoto loop 45*db694bcbSAndroid Build Coastguard Worker:loopend 46*db694bcbSAndroid Build Coastguard Worker 47*db694bcbSAndroid Build Coastguard Workersetlocal EnableDelayedExpansion 48*db694bcbSAndroid Build Coastguard Worker 49*db694bcbSAndroid Build Coastguard Workercall :set_java_version 50*db694bcbSAndroid Build Coastguard Workerif !_java_major_version! geq 9 ( 51*db694bcbSAndroid Build Coastguard Worker rem Workaround the illegal reflective access warning from ReflectionUtil to ResourceBundle.setParent, see IDEA-248785. 52*db694bcbSAndroid Build Coastguard Worker set JAVA_OPTS=!JAVA_OPTS! "--add-opens" "java.base/java.util=ALL-UNNAMED" 53*db694bcbSAndroid Build Coastguard Worker) 54*db694bcbSAndroid Build Coastguard Worker 55*db694bcbSAndroid Build Coastguard Workerif "!_KOTLIN_RUNNER!"=="1" ( 56*db694bcbSAndroid Build Coastguard Worker java !JAVA_OPTS! "-Dkotlin.home=%_KOTLIN_HOME%" -cp "%_KOTLIN_HOME%\lib\kotlin-runner.jar" ^ 57*db694bcbSAndroid Build Coastguard Worker org.jetbrains.kotlin.runner.Main %KOTLIN_OPTS% 58*db694bcbSAndroid Build Coastguard Worker) else ( 59*db694bcbSAndroid Build Coastguard Worker set _ADDITIONAL_CLASSPATH= 60*db694bcbSAndroid Build Coastguard Worker 61*db694bcbSAndroid Build Coastguard Worker if !_java_major_version! lss 13 ( 62*db694bcbSAndroid Build Coastguard Worker set JAVA_OPTS=!JAVA_OPTS! "-noverify" 63*db694bcbSAndroid Build Coastguard Worker ) 64*db694bcbSAndroid Build Coastguard Worker 65*db694bcbSAndroid Build Coastguard Worker if not "%_KOTLIN_TOOL%"=="" ( 66*db694bcbSAndroid Build Coastguard Worker set _ADDITIONAL_CLASSPATH=;%_KOTLIN_HOME%\lib\%_KOTLIN_TOOL% 67*db694bcbSAndroid Build Coastguard Worker ) 68*db694bcbSAndroid Build Coastguard Worker 69*db694bcbSAndroid Build Coastguard Worker java !JAVA_OPTS! -cp "%_KOTLIN_HOME%\lib\kotlin-preloader.jar" ^ 70*db694bcbSAndroid Build Coastguard Worker org.jetbrains.kotlin.preloading.Preloader -cp "%_KOTLIN_HOME%\lib\kotlin-compiler.jar!_ADDITIONAL_CLASSPATH!" ^ 71*db694bcbSAndroid Build Coastguard Worker %_KOTLIN_COMPILER% %KOTLIN_OPTS% 72*db694bcbSAndroid Build Coastguard Worker) 73*db694bcbSAndroid Build Coastguard Worker 74*db694bcbSAndroid Build Coastguard Workergoto end 75*db694bcbSAndroid Build Coastguard Worker 76*db694bcbSAndroid Build Coastguard Workerrem ########################################################################## 77*db694bcbSAndroid Build Coastguard Workerrem # subroutines 78*db694bcbSAndroid Build Coastguard Worker 79*db694bcbSAndroid Build Coastguard Worker:set_home 80*db694bcbSAndroid Build Coastguard Worker set _BIN_DIR= 81*db694bcbSAndroid Build Coastguard Worker for %%i in (%~sf0) do set _BIN_DIR=%_BIN_DIR%%%~dpsi 82*db694bcbSAndroid Build Coastguard Worker set _KOTLIN_HOME=%_BIN_DIR%.. 83*db694bcbSAndroid Build Coastguard Workergoto :eof 84*db694bcbSAndroid Build Coastguard Worker 85*db694bcbSAndroid Build Coastguard Workerrem Parses "java -version" output and stores the major version to _java_major_version. 86*db694bcbSAndroid Build Coastguard Workerrem Note that this only loads the first component of the version, so "1.8.0_265" -> "1". 87*db694bcbSAndroid Build Coastguard Workerrem But it's fine because major version is 9 for JDK 9, and so on. 88*db694bcbSAndroid Build Coastguard Workerrem Needs to be executed in the EnableDelayedExpansion mode. 89*db694bcbSAndroid Build Coastguard Worker:set_java_version 90*db694bcbSAndroid Build Coastguard Worker set _version= 91*db694bcbSAndroid Build Coastguard Worker rem Parse output and take the third token from the string containing " version ". 92*db694bcbSAndroid Build Coastguard Worker rem It should be something like "1.8.0_275" or "15.0.1". 93*db694bcbSAndroid Build Coastguard Worker for /f "tokens=3" %%i in ('java -version 2^>^&1 ^| findstr /i " version "') do ( 94*db694bcbSAndroid Build Coastguard Worker rem Split the string by "-" or "." and take the first token. 95*db694bcbSAndroid Build Coastguard Worker for /f "delims=-. tokens=1" %%j in ("%%i") do ( 96*db694bcbSAndroid Build Coastguard Worker rem At this point, _version should be something like "1 or "15. Note the leading quote. 97*db694bcbSAndroid Build Coastguard Worker set _version=%%j 98*db694bcbSAndroid Build Coastguard Worker ) 99*db694bcbSAndroid Build Coastguard Worker ) 100*db694bcbSAndroid Build Coastguard Worker if "!_version!"=="" ( 101*db694bcbSAndroid Build Coastguard Worker rem If failed to parse the output, set the version to 1. 102*db694bcbSAndroid Build Coastguard Worker set _java_major_version=1 103*db694bcbSAndroid Build Coastguard Worker ) else ( 104*db694bcbSAndroid Build Coastguard Worker rem Strip the leading quote. 105*db694bcbSAndroid Build Coastguard Worker set _java_major_version=!_version:~1! 106*db694bcbSAndroid Build Coastguard Worker ) 107*db694bcbSAndroid Build Coastguard Workergoto :eof 108*db694bcbSAndroid Build Coastguard Worker 109*db694bcbSAndroid Build Coastguard Worker:error 110*db694bcbSAndroid Build Coastguard Workerset ERRORLEVEL=1 111*db694bcbSAndroid Build Coastguard Worker 112*db694bcbSAndroid Build Coastguard Worker:end 113*db694bcbSAndroid Build Coastguard Workerexit /b %ERRORLEVEL%