Skip to content

Commit 158b332

Browse files
Merge pull request #13006 from michelou/scala3-batch-files
Fix for issue #12551
2 parents 40c587f + feac0c9 commit 158b332

File tree

6 files changed

+539
-0
lines changed

6 files changed

+539
-0
lines changed

.github/workflows/ci.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,10 @@ jobs:
158158
run: '"C:\Program Files\Git\bin\bash" ./project/scripts/winCmdTests'
159159
shell: cmd
160160

161+
- name: win tests
162+
run: './project/scripts/winCmdTests.bat'
163+
shell: cmd
164+
161165
- name: Scala.js Test
162166
run: sbt ";sjsJUnitTests/test ;sjsCompilerTests/test"
163167
shell: cmd

dist/bin/common.bat

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
@rem #########################################################################
2+
@rem ## Code common to scalac.bat, scaladoc.bat and scala.bat
3+
4+
if defined JAVACMD (
5+
set "_JAVACMD=%JAVACMD%"
6+
) else if defined JAVA_HOME (
7+
set "_JAVACMD=%JAVA_HOME%\bin\java.exe"
8+
) else if defined JDK_HOME (
9+
set "_JAVACMD=%JDK_HOME%\bin\java.exe"
10+
) else (
11+
where /q java.exe
12+
if !ERRORLEVEL!==0 (
13+
set __JAVA_BIN_DIR=
14+
for /f "delims=" %%i in ('where /f java.exe') do (
15+
set "__PATH=%%~dpi"
16+
@rem we take first occurence and ignore Oracle path for java executable
17+
if not defined __JAVA_BIN_DIR if "!__PATH!"=="!__PATH:javapath=!" set "__JAVA_BIN_DIR=!__PATH!"
18+
)
19+
if defined __JAVA_BIN_DIR set "_JAVACMD=!__JAVA_BIN_DIR!\java.exe"
20+
)
21+
if not defined _JAVACMD (
22+
set "__PATH=%ProgramFiles%\Java"
23+
for /f %%f in ('dir /ad /b "!__PATH!\jre*" 2^>NUL') do set "_JAVA_HOME=!__PATH!\%%f"
24+
if not defined _JAVA_HOME (
25+
set __PATH=C:\opt
26+
for /f %%f in ('dir /ad /b "!__PATH!\jdk*" 2^>NUL') do set "_JAVA_HOME=!__PATH!\%%f\jre"
27+
)
28+
if defined _JAVA_HOME set "_JAVACMD=!_JAVA_HOME!\bin\java.exe"
29+
)
30+
)
31+
if not exist "%_JAVACMD%" (
32+
echo Error: Java executable not found ^(!_JAVACMD!^) 1>&2
33+
set _EXITCODE=1
34+
goto :eof
35+
)
36+
37+
if not defined _PROG_HOME set "_PROG_HOME=%~dp0"
38+
for /f %%f in ("%_PROG_HOME%\.") do set "_LIB_DIR=%%~dpflib"
39+
40+
set _PSEP=;
41+
42+
for /f %%f in ('dir /a-d /b "%_LIB_DIR%\*scala3-compiler*"') do set "_SCALA3_COMP=%_LIB_DIR%\%%f"
43+
for /f %%f in ('dir /a-d /b "%_LIB_DIR%\*scala3-interfaces*"') do set "_SCALA3_INTF=%_LIB_DIR%\%%f"
44+
for /f %%f in ('dir /a-d /b "%_LIB_DIR%\*scala3-library*"') do set "_SCALA3_LIB=%_LIB_DIR%\%%f"
45+
for /f %%f in ('dir /a-d /b "%_LIB_DIR%\*scala3-staging*"') do set "_SCALA3_STAGING=%_LIB_DIR%\%%f"
46+
for /f %%f in ('dir /a-d /b "%_LIB_DIR%\*scala3-tasty-inspector*"') do set "_SCALA3_TASTY_INSPECTOR=%_LIB_DIR%\%%f"
47+
for /f %%f in ('dir /a-d /b "%_LIB_DIR%\*tasty-core*"') do set "_TASTY_CORE=%_LIB_DIR%\%%f"
48+
for /f %%f in ('dir /a-d /b "%_LIB_DIR%\*scala-asm*"') do set "_SCALA_ASM=%_LIB_DIR%\%%f"
49+
for /f %%f in ('dir /a-d /b "%_LIB_DIR%\*scala-library*"') do set "_SCALA_LIB=%_LIB_DIR%\%%f"
50+
for /f %%f in ('dir /a-d /b "%_LIB_DIR%\*compiler-interface*"') do set "_SBT_INTF=%_LIB_DIR%\%%f"
51+
for /f %%f in ('dir /a-d /b "%_LIB_DIR%\*jline-reader-3*"') do set "_JLINE_READER=%_LIB_DIR%\%%f"
52+
for /f %%f in ('dir /a-d /b "%_LIB_DIR%\*jline-terminal-3*"') do set "_JLINE_TERMINAL=%_LIB_DIR%\%%f"
53+
for /f %%f in ('dir /a-d /b "%_LIB_DIR%\*jline-terminal-jna-3*"') do set "_JLINE_TERMINAL_JNA=%_LIB_DIR%\%%f"
54+
for /f %%f in ('dir /a-d /b "%_LIB_DIR%\*jna-5*"') do set "_JNA=%_LIB_DIR%\%%f"

dist/bin/scala.bat

+121
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
@echo off
2+
setlocal enabledelayedexpansion
3+
4+
@rem #########################################################################
5+
@rem ## Environment setup
6+
7+
set _EXITCODE=0
8+
9+
set "_PROG_HOME=%~dp0"
10+
11+
call "%_PROG_HOME%\common.bat"
12+
if not %_EXITCODE%==0 goto end
13+
14+
call :args %*
15+
16+
@rem #########################################################################
17+
@rem ## Main
18+
19+
set _CASE_REPL=0
20+
if %_EXECUTE_REPL%==1 set _CASE_REPL=1
21+
if %_EXECUTE_RUN%==0 if %_OPTIONS_INDICATOR%==0 set _CASE_REPL=1
22+
23+
set _CASE_EXEC=0
24+
if %_EXECUTE_REPL%==1 set _CASE_EXEC=1
25+
if defined _RESIDUAL_ARGS set _CASE_EXEC=1
26+
27+
if %_EXECUTE_SCRIPT%==1 (
28+
set _SCALAC_ARGS=
29+
if defined _CLASS_PATH set _SCALAC_ARGS=-classpath "%_CLASS_PATH%"
30+
set _RESIDUAL_ARGS=!_RESIDUAL_ARGS! "-Dscript.path=%_TARGET_SCRIPT%"
31+
set _SCALAC_ARGS=!_SCALAC_ARGS! %_JAVA_OPTS% !_RESIDUAL_ARGS! -script "%_TARGET_SCRIPT%" %_SCRIPT_ARGS%
32+
call "%_PROG_HOME%\scalac.bat" !_SCALAC_ARGS!
33+
if not !ERRORLEVEL!==0 ( set _EXITCODE=1& goto end )
34+
@rem if [ $execute_repl == true ] || ([ $execute_run == false ] && [ $options_indicator == 0 ]); then
35+
) else if %_CASE_REPL%==1 (
36+
set _SCALAC_ARGS=
37+
if defined _CLASS_PATH set _SCALAC_ARGS=-classpath "%_CLASS_PATH%"
38+
set _SCALAC_ARGS=!_SCALAC_ARGS! %_JAVA_OPTS% -repl %_RESIDUAL_ARGS%
39+
call "%_PROG_HOME%\scalac.bat" !_SCALAC_ARGS!
40+
if not !ERRORLEVEL!==0 ( set _EXITCODE=1& goto end )
41+
@rem elif [ $execute_repl == true ] || [ ${#residual_args[@]} -ne 0 ]; then
42+
) else if %_CASE_EXEC%==1 (
43+
set "_CP_ARG=%_SCALA3_LIB%%_PSEP%%_SCALA_LIB%"
44+
if defined _CLASS_PATH ( set "_CP_ARG=!_CP_ARG!%_PSEP%%_CLASS_PATH%"
45+
) else ( set "_CP_ARG=!_CP_ARG!%_PSEP%."
46+
)
47+
if %_CLASS_PATH_COUNT% gtr 1 (
48+
echo Warning: Multiple classpaths are found, scala only use the last one. 1>&2
49+
)
50+
if %_WITH_COMPILER%==1 (
51+
set "_CP_ARG=!_CP_ARG!%_PSEP%%_SCALA3_COMP%%_PSEP%%_TASTY_CORE%%_PSEP%%_SCALA3_INTF%%_PSEP%%_SCALA_ASM%%_PSEP%%_SCALA3_STAGING%%_PSEP%%_SCALA3_TASTY_INSPECTOR%"
52+
)
53+
set _JAVA_ARGS=-classpath "!_CP_ARG!" %_JVM_OPTS% %_RESIDUAL_ARGS%
54+
call "%_JAVACMD%" !_JAVA_ARGS!
55+
if not !ERRORLEVEL!==0 ( set _EXITCODE=1& goto end )
56+
) else (
57+
echo Warning: Command option is not correct. 1>&2
58+
)
59+
60+
goto end
61+
62+
@rem #########################################################################
63+
@rem ## Subroutines
64+
65+
:args
66+
set _RESIDUAL_ARGS=
67+
set _SCRIPT_ARGS=
68+
set _EXECUTE_REPL=0
69+
set _EXECUTE_RUN=0
70+
set _EXECUTE_SCRIPT=0
71+
set _TARGET_SCRIPT=
72+
set _WITH_COMPILER=0
73+
set _CLASS_PATH_COUNT=0
74+
set _CLASS_PATH=
75+
set _JVM_OPTS=
76+
set _JAVA_OPTS=
77+
set _OPTIONS_INDICATOR=0
78+
79+
:args_loop
80+
if "%~1"=="" goto args_done
81+
set "__ARG=%~1"
82+
if "%__ARG%"=="-repl" (
83+
set _EXECUTE_REPL=1
84+
) else if "%__ARG%"=="-run" (
85+
set _EXECUTE_RUN=1
86+
) else if "%__ARG%"=="-classpath" (
87+
set "_CLASS_PATH=%~2"
88+
set /a _CLASS_PATH_COUNT+=1
89+
shift
90+
) else if "%__ARG%"=="-cp" (
91+
set "_CLASS_PATH=%~2"
92+
set /a _CLASS_PATH_COUNT+=1
93+
shift
94+
) else if "%__ARG%"=="-with-compiler" (
95+
set _WITH_COMPILER=1
96+
) else if "%__ARG:~0,2%"=="-J" (
97+
set _JVM_OPTS=!_JVM_OPTS! %__ARG:~2%
98+
set _JAVA_OPTS=!_JAVA_OPTS! %__ARG%
99+
) else (
100+
@rem _OPTIONS_INDICATOR != 0 if at least one parameter is not an option
101+
if not "%__ARG:~0,1%"=="-" set /a _OPTIONS_INDICATOR+=1
102+
if %_EXECUTE_SCRIPT%==1 (
103+
set _SCRIPT_ARGS=%_SCRIPT_ARGS% %__ARG%
104+
) else if "%__ARG:~-6%"==".scala" (
105+
set _EXECUTE_SCRIPT=1
106+
set "_TARGET_SCRIPT=%__ARG%"
107+
) else (
108+
set _RESIDUAL_ARGS=%_RESIDUAL_ARGS% %__ARG%
109+
)
110+
)
111+
shift
112+
goto args_loop
113+
:args_done
114+
goto :eof
115+
116+
@rem #########################################################################
117+
@rem ## Cleanups
118+
119+
:end
120+
exit /b %_EXITCODE%
121+
endlocal

dist/bin/scalac.bat

+173
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
@echo off
2+
setlocal enabledelayedexpansion
3+
4+
@rem #########################################################################
5+
@rem ## Environment setup
6+
7+
set _EXITCODE=0
8+
9+
set "_PROG_HOME=%~dp0"
10+
11+
call "%_PROG_HOME%\common.bat"
12+
if not %_EXITCODE%==0 goto end
13+
14+
set _DEFAULT_JAVA_OPTS=-Xmx768m -Xms768m
15+
@rem set _WITH_COMPILER=true
16+
17+
set _COMPILER_MAIN=dotty.tools.dotc.Main
18+
set _DECOMPILER_MAIN=dotty.tools.dotc.decompiler.Main
19+
set _REPL_MAIN=dotty.tools.repl.Main
20+
set _SCRIPTING_MAIN=dotty.tools.scripting.Main
21+
22+
call :args %*
23+
24+
@rem #########################################################################
25+
@rem ## Main
26+
27+
call :classpathArgs
28+
29+
set _SCRIPTING_STRING=
30+
if "%_PROG_NAME%"=="%_SCRIPTING_MAIN%" (
31+
if not defined _TARGET_SCRIPT (
32+
echo Error: Missing Scala script file 1>&2
33+
set _EXITCODE=1
34+
goto end
35+
)
36+
set _SCRIPTING_STRING=-script %_TARGET_SCRIPT% %_SCRIPTING_ARGS%
37+
)
38+
39+
if defined JAVA_OPTS ( set _JAVA_OPTS=%JAVA_OPTS%
40+
) else ( set _JAVA_OPTS=%_DEFAULT_JAVA_OPTS%
41+
)
42+
call "%_JAVACMD%" %_JAVA_OPTS% %_JAVA_DEBUG% %_JAVA_ARGS% %_JVM_CP_ARGS% ^
43+
-Dscala.usejavacp=true ^
44+
%_PROG_NAME% %_SCALA_ARGS% %_RESIDUAL_ARGS% %_SCRIPTING_STRING%
45+
if not %ERRORLEVEL%==0 (
46+
set _EXITCODE=1
47+
goto end
48+
)
49+
goto end
50+
51+
@rem #########################################################################
52+
@rem ## Subroutines
53+
54+
:args
55+
set _JAVA_DEBUG=
56+
set _HELP=
57+
set _VERBOSE=
58+
set _QUIET=
59+
set _COLORS=
60+
set _PROG_NAME=%_COMPILER_MAIN%
61+
set _SCALA_ARGS=
62+
set _JAVA_ARGS=
63+
set _RESIDUAL_ARGS=
64+
set _SCRIPTING_ARGS=
65+
set _TARGET_SCRIPT=
66+
67+
:args_loop
68+
if "%~1"=="" goto args_done
69+
set "__ARG=%~1"
70+
if defined _TARGET_SCRIPT (
71+
call :addScripting "%__ARG%"
72+
) else if "%__ARG%"=="--" (
73+
@rem for arg; do addResidual "$arg"; done; set -- ;;
74+
) else if "%__ARG%"=="-h" (
75+
set _HELP=true
76+
call :addScala "-help"
77+
) else if "%__ARG%"=="-help" (
78+
set _HELP=true
79+
call :addScala "-help"
80+
) else if "%__ARG%"=="-v" (
81+
set _VERBOSE=true
82+
call :addScala "-verbose"
83+
) else if "%__ARG%"=="-verbose" (
84+
set _VERBOSE=true
85+
call :addScala "-verbose"
86+
) else if "%__ARG%"=="-debug" ( set "_JAVA_DEBUG=%_DEBUG_STR%"
87+
) else if "%__ARG%"=="-q" ( set _QUIET=true
88+
) else if "%__ARG%"=="-quiet" ( set _QUIET=true
89+
@rem Optimize for short-running applications, see https://github.com/lampepfl/dotty/issues/222
90+
) else if "%__ARG%"=="-Oshort" (
91+
call :addJava "-XX:+TieredCompilation -XX:TieredStopAtLevel=1"
92+
) else if "%__ARG%"=="-repl" ( set _PROG_NAME=%_REPL_MAIN%
93+
) else if "%__ARG%"=="-script" (
94+
set _PROG_NAME=%_SCRIPTING_MAIN%
95+
if "%~2"=="" goto args_done
96+
set "_TARGET_SCRIPT=%~2"
97+
shift
98+
) else if "%__ARG%"=="-compile" ( set _PROG_NAME=%_COMPILER_MAIN%
99+
) else if "%__ARG%"=="-decompile" ( set _PROG_NAME=%_DECOMPILER_MAIN%
100+
) else if "%__ARG%"=="-print-tasty" (
101+
set _PROG_NAME=%_DECOMPILER_MAIN%
102+
call :addScala "-print-tasty"
103+
) else if "%__ARG%"=="-run" ( set _PROG_NAME=%_REPL_MAIN%
104+
) else if "%__ARG%"=="-colors" ( set _COLORS=true
105+
) else if "%__ARG%"=="-no-colors" ( set _COLORS=
106+
) else if "%__ARG%"=="-with-compiler" ( set _JVM_CP_ARGS=%_PSEP%%_SCALA3_COMP%%_PSEP%%_TASTY_CORE%
107+
@rem break out -D and -J options and add them to JAVA_OPTS as well
108+
@rem so they reach the JVM in time to do some good. The -D options
109+
@rem will be available as system properties.
110+
) else if "%__ARG:~0,2%"=="-D" ( call :addJava "%__ARG%"
111+
) else if "%__ARG:~0,2%"=="-J" ( call :addJava "%__ARG:~2%"
112+
) else ( call :addResidual "%__ARG%"
113+
)
114+
shift
115+
goto args_loop
116+
:args_done
117+
goto :eof
118+
119+
@rem output parameter: _SCALA_ARGS
120+
:addScala
121+
set _SCALA_ARGS=%_SCALA_ARGS% %~1
122+
goto :eof
123+
124+
@rem output parameter: _JAVA_ARGS
125+
:addJava
126+
set _JAVA_ARGS=%_JAVA_ARGS% %~1
127+
goto :eof
128+
129+
@rem output parameter: _RESIDUAL_ARGS
130+
:addResidual
131+
set _RESIDUAL_ARGS=%_RESIDUAL_ARGS% %~1
132+
goto :eof
133+
134+
@rem output parameter: _SCRIPTING_ARGS
135+
:addScripting
136+
set _SCRIPTING_ARGS=%_SCRIPTING_ARGS% %~1
137+
goto :eof
138+
139+
@rem output parameter: _JVM_CP_ARGS
140+
:classpathArgs
141+
@rem echo scala3-compiler: %_SCALA3_COMP%
142+
@rem echo scala3-interface: %_SCALA3_INTF%
143+
@rem echo scala3-library: %_SCALA3_LIB%
144+
@rem echo tasty-core: %_TASTY_CORE%
145+
@rem echo scala-asm: %_SCALA_ASM%
146+
@rem echo scala-lib: %_SCALA_LIB%
147+
@rem echo sbt-intface: %_SBT_INTF%
148+
149+
set __TOOLCHAIN=%_SCALA_LIB%%_PSEP%
150+
set __TOOLCHAIN=%__TOOLCHAIN%%_SCALA3_LIB%%_PSEP%
151+
set __TOOLCHAIN=%__TOOLCHAIN%%_SCALA_ASM%%_PSEP%
152+
set __TOOLCHAIN=%__TOOLCHAIN%%_SBT_INTF%%_PSEP%
153+
set __TOOLCHAIN=%__TOOLCHAIN%%_SCALA3_INTF%%_PSEP%
154+
set __TOOLCHAIN=%__TOOLCHAIN%%_SCALA3_COMP%%_PSEP%
155+
set __TOOLCHAIN=%__TOOLCHAIN%%_TASTY_CORE%%_PSEP%
156+
set __TOOLCHAIN=%__TOOLCHAIN%%_SCALA3_STAGING%%_PSEP%
157+
set __TOOLCHAIN=%__TOOLCHAIN%%_SCALA3_TASTY_INSPECTOR%%_PSEP%
158+
159+
@rem # jline
160+
set __TOOLCHAIN=%__TOOLCHAIN%%_JLINE_READER%%_PSEP%
161+
set __TOOLCHAIN=%__TOOLCHAIN%%_JLINE_TERMINAL%%_PSEP%
162+
set __TOOLCHAIN=%__TOOLCHAIN%%_JLINE_TERMINAL_JNA%%_PSEP%
163+
set __TOOLCHAIN=%__TOOLCHAIN%%_JNA%
164+
165+
set _JVM_CP_ARGS=-classpath "%__TOOLCHAIN%"
166+
goto :eof
167+
168+
@rem #########################################################################
169+
@rem ## Cleanups
170+
171+
:end
172+
exit /b %_EXITCODE%
173+
endlocal

0 commit comments

Comments
 (0)