|
1 |
| -# Environment setup |
2 |
| -$global:_EXITCODE = 0 |
3 |
| - |
4 |
| -$scriptPath = $PSScriptRoot |
5 |
| -$global:_PROG_HOME = $scriptPath.TrimEnd('\') |
6 |
| - |
7 |
| -. "$_PROG_HOME\bin\common.ps1" |
8 |
| -if ($LASTEXITCODE -ne 0) { goto end } |
| 1 | +################################################################################################### |
| 2 | +### POWERSHELL SCALAC SCRIPT ### |
| 3 | +### ### |
| 4 | +### Author: Hamza REMMAL <hamza.remmal@epfl.ch> ### |
| 5 | +### Since : Scala 3.5.0 ### |
| 6 | +################################################################################################### |
9 | 7 |
|
10 |
| -args $args |
11 |
| - |
12 |
| -# Main |
13 |
| -compilerJavaClasspathArgs |
| 8 | +# Environment setup |
| 9 | +$_PROG_HOME = $PSScriptRoot.TrimEnd('\bin\') |
| 10 | +# Load and execute the common script |
| 11 | +. "$_PROG_HOME/bin/common.ps1" # TODO: Will this work on Windows or not ? |
14 | 12 |
|
15 |
| -$global:_JAVACMD = $env:_JAVACMD -replace '%', '%%' |
| 13 | +################################################################################################### |
| 14 | +############################################ FUNCTIONS ############################################ |
| 15 | +################################################################################################### |
16 | 16 |
|
17 |
| -& $_JAVACMD $env:_JAVA_ARGS -classpath "$env:_JVM_CP_ARGS" "-Dscala.usejavacp=true" "-Dscala.home=$_PROG_HOME" dotty.tools.MainGenericCompiler $env:_SCALA_ARGS |
18 |
| -if ($LASTEXITCODE -ne 0) { |
19 |
| - $global:_EXITCODE = 1 |
20 |
| - goto end |
21 |
| -} |
22 |
| -goto end |
| 17 | +function Scala-ArgumentParsing { |
| 18 | + param ( [string[]] $params ) |
23 | 19 |
|
24 |
| -# Subroutines |
| 20 | + $_JAVA_ARGS = "" # TODO: THIS SHOULD BE AN ARRAY |
| 21 | + $_SCALA_ARGS = "" # TODO: THIS SHOULD BE AN ARRAY |
| 22 | + $_SCALA_CLASSPATH = "" |
| 23 | + $_CONSUME_REMAINING = $false |
25 | 24 |
|
26 |
| -function args { |
27 |
| - $global:_JAVA_ARGS = "" |
28 |
| - $global:_SCALA_ARGS = "" |
29 |
| - $global:_SCALA_CPATH = "" |
30 |
| - $global:_CONSUME_REMAINING = $false |
31 |
| - |
32 |
| - while ($args.Count -gt 0) { |
33 |
| - $arg = $args[0] |
34 |
| - if ($global:_CONSUME_REMAINING) { |
35 |
| - $global:_SCALA_ARGS += " `"$arg`"" |
36 |
| - $args = $args[1..$args.Length] |
| 25 | + while ($params.Count -gt 0) { |
| 26 | + $arg = $params[0] |
| 27 | + if ($_CONSUME_REMAINING) { |
| 28 | + $_SCALA_ARGS += " $arg" |
| 29 | + $params = $params[1..$params.Length] |
37 | 30 | } elseif ($arg -eq "--" -or $arg -eq "-script") {
|
38 |
| - $global:_CONSUME_REMAINING = $true |
39 |
| - $global:_SCALA_ARGS += " `"$arg`"" |
40 |
| - $args = $args[1..$args.Length] |
| 31 | + $_CONSUME_REMAINING = $true |
| 32 | + $_SCALA_ARGS += " $arg" |
| 33 | + $params = $params[1..$params.Length] |
41 | 34 | } elseif ($arg -eq "-Oshort") {
|
42 |
| - $global:_JAVA_ARGS += " `"-XX:+TieredCompilation`" `"-XX:TieredStopAtLevel=1`"" |
43 |
| - $global:_SCALA_ARGS += " -Oshort" |
44 |
| - $args = $args[1..$args.Length] |
| 35 | + $_JAVA_ARGS += " -XX:+TieredCompilation -XX:TieredStopAtLevel=1" |
| 36 | + $_SCALA_ARGS += " -Oshort" |
| 37 | + $params = $params[1..$params.Length] |
45 | 38 | } elseif ($arg.StartsWith("-D")) {
|
46 |
| - $global:_JAVA_ARGS += " `"$arg`"" |
47 |
| - $global:_SCALA_ARGS += " `"$arg`"" |
48 |
| - $args = $args[1..$args.Length] |
| 39 | + $_JAVA_ARGS += " $arg" |
| 40 | + $_SCALA_ARGS += " $arg" |
| 41 | + $params = $params[1..$params.Length] |
49 | 42 | } elseif ($arg.StartsWith("-J")) {
|
50 |
| - $global:_JAVA_ARGS += " `"${arg:2}`"" |
51 |
| - $global:_SCALA_ARGS += " `"$arg`"" |
52 |
| - $args = $args[1..$args.Length] |
| 43 | + $_JAVA_ARGS += " ${arg:2}" |
| 44 | + $_SCALA_ARGS += " $arg" |
| 45 | + $params = $params[1..$params.Length] |
53 | 46 | } elseif ($arg -eq "-classpath" -or $arg -eq "-cp") {
|
54 |
| - $global:_SCALA_CPATH = $args[1] |
55 |
| - $args = $args[2..$args.Length] |
| 47 | + $_SCALA_CLASSPATH = $params[1] |
| 48 | + $params = $params[2..$params.Length] |
56 | 49 | } else {
|
57 |
| - $global:_SCALA_ARGS += " `"$arg`"" |
58 |
| - $args = $args[1..$args.Length] |
| 50 | + $_SCALA_ARGS += " $arg" |
| 51 | + $params = $params[1..$params.Length] |
59 | 52 | }
|
60 | 53 | }
|
| 54 | + |
| 55 | + return @{ |
| 56 | + JAVA_ARGS = $_JAVA_ARGS |
| 57 | + SCALA_ARGS = $_SCALA_ARGS |
| 58 | + SCALA_CLASSPATH = $_SCALA_CLASSPATH |
| 59 | + } |
| 60 | + |
61 | 61 | }
|
62 | 62 |
|
63 |
| -function compilerJavaClasspathArgs { |
64 |
| - $CP_FILE = "$env:_ETC_DIR\scala.classpath" |
65 |
| - loadClasspathFromFile $CP_FILE |
66 |
| - $global:__TOOLCHAIN = $global:_CLASS_PATH_RESULT |
| 63 | +function Scala-LoadCompilerClasspath { |
| 64 | + param ( [string] $SCALA_CLASSPATH ) |
67 | 65 |
|
68 |
| - $CP_FILE = "$env:_ETC_DIR\with_compiler.classpath" |
69 |
| - loadClasspathFromFile $CP_FILE |
| 66 | + $__TOOLCHAIN_1 = Scala-LoadClasspathFromFile "$_ETC_DIR/scala.classpath" |
| 67 | + $__TOOLCHAIN_2 = Scala-LoadClasspathFromFile "$_ETC_DIR/with_compiler.classpath" |
| 68 | + $__TOOLCHAIN = "$__TOOLCHAIN_1$_PSEP$__TOOLCHAIN_2" |
70 | 69 |
|
71 |
| - if ($global:_CLASS_PATH_RESULT) { |
72 |
| - $global:__TOOLCHAIN += "$env:_PSEP$global:_CLASS_PATH_RESULT" |
| 70 | + if ($SCALA_CLASSPATH) { |
| 71 | + $__TOOLCHAIN += "$_PSEP$SCALA_CLASSPATH" |
73 | 72 | }
|
74 | 73 |
|
75 |
| - if ($global:_SCALA_CPATH) { |
76 |
| - $global:_JVM_CP_ARGS = "$global:__TOOLCHAIN$global:_SCALA_CPATH" |
77 |
| - } else { |
78 |
| - $global:_JVM_CP_ARGS = $global:__TOOLCHAIN |
79 |
| - } |
| 74 | + return $__TOOLCHAIN |
80 | 75 | }
|
81 | 76 |
|
82 |
| -function loadClasspathFromFile { |
83 |
| - param ( |
84 |
| - [string]$argFile |
85 |
| - ) |
86 |
| - $global:_CLASS_PATH_RESULT = "" |
87 |
| - if (Test-Path $argFile) { |
88 |
| - $lines = Get-Content $argFile |
89 |
| - foreach ($line in $lines) { |
90 |
| - $lib = "$global:_PROG_HOME\maven2\$line".Replace('/', '\') |
91 |
| - if (!$global:_CLASS_PATH_RESULT) { |
92 |
| - $global:_CLASS_PATH_RESULT = $lib |
93 |
| - } else { |
94 |
| - $global:_CLASS_PATH_RESULT += "$env:_PSEP$lib" |
95 |
| - } |
96 |
| - } |
97 |
| - } |
98 |
| -} |
99 | 77 |
|
100 |
| -# Cleanups |
101 |
| -end |
102 |
| -exit $global:_EXITCODE |
| 78 | +################################################################################################### |
| 79 | +############################################## SCRIPT ############################################# |
| 80 | +################################################################################################### |
| 81 | + |
| 82 | +# Parse the arguments |
| 83 | +$_ARG_RESULT = Scala-ArgumentParsing $args |
| 84 | + |
| 85 | +# Compute the classpath |
| 86 | +$_CLASS_PATH = Scala-LoadCompilerClasspath $_ARG_RESULT.SCALA_CLASSPATH |
| 87 | + |
| 88 | +# Fetch the arguments |
| 89 | +$_JAVA_ARGS = $_ARG_RESULT.JAVA_ARGS |
| 90 | +$_SCALA_ARGS = $_ARG_RESULT.SCALA_ARGS |
| 91 | + |
| 92 | +# Build the java arguments |
| 93 | +$command = @() |
| 94 | +if (-not [string]::IsNullOrEmpty($_JAVA_ARGS)) { $command += $_JAVA_ARGS } |
| 95 | +$command += "-classpath" |
| 96 | +$command += $_CLASS_PATH |
| 97 | +$command += "-Dscala.usejavacp=true" |
| 98 | +$command += "-Dscala.home=$_PROG_HOME" |
| 99 | +$command += "dotty.tools.MainGenericCompiler" |
| 100 | + |
| 101 | +if (-not [string]::IsNullOrEmpty($_SCALA_ARGS)) { $command += $_SCALA_ARGS } |
| 102 | +$commandString = $command -join ' ' |
| 103 | + |
| 104 | +Start-Process -FilePath $_JAVACMD -ArgumentList $commandString -NoNewWindow -Wait |
| 105 | + |
| 106 | +if ($LASTEXITCODE -ne 0) { exit 1 } |
| 107 | + |
| 108 | +exit 0 |
0 commit comments