Skip to content

Commit eabd4f9

Browse files
committed
Add Powershell script for 'scalac'
1 parent cdc77be commit eabd4f9

File tree

2 files changed

+103
-80
lines changed

2 files changed

+103
-80
lines changed

dist/bin/common.ps1

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,23 @@ function Scala-FetchScalaVersion {
3131
}
3232
}
3333

34+
function Scala-LoadClasspathFromFile {
35+
param ( [string] $file )
36+
$_CLASS_PATH_RESULT = ""
37+
if (Test-Path $file) {
38+
foreach ($line in Get-Content $file) {
39+
$lib = "$_PROG_HOME/maven2/$line"
40+
if (!$_CLASS_PATH_RESULT) {
41+
$_CLASS_PATH_RESULT = $lib
42+
} else {
43+
$_CLASS_PATH_RESULT += "$_PSEP$lib"
44+
}
45+
}
46+
}
47+
48+
return $_CLASS_PATH_RESULT
49+
}
50+
3451

3552
###################################################################################################
3653
############################################ LOAD JAVA ############################################

dist/bin/scalac.ps1

Lines changed: 86 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,108 @@
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+
###################################################################################################
97

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 ?
1412

15-
$global:_JAVACMD = $env:_JAVACMD -replace '%', '%%'
13+
###################################################################################################
14+
############################################ FUNCTIONS ############################################
15+
###################################################################################################
1616

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 )
2319

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
2524

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]
3730
} 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]
4134
} 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]
4538
} 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]
4942
} 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]
5346
} 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]
5649
} else {
57-
$global:_SCALA_ARGS += " `"$arg`""
58-
$args = $args[1..$args.Length]
50+
$_SCALA_ARGS += " $arg"
51+
$params = $params[1..$params.Length]
5952
}
6053
}
54+
55+
return @{
56+
JAVA_ARGS = $_JAVA_ARGS
57+
SCALA_ARGS = $_SCALA_ARGS
58+
SCALA_CLASSPATH = $_SCALA_CLASSPATH
59+
}
60+
6161
}
6262

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 )
6765

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"
7069

71-
if ($global:_CLASS_PATH_RESULT) {
72-
$global:__TOOLCHAIN += "$env:_PSEP$global:_CLASS_PATH_RESULT"
70+
if ($SCALA_CLASSPATH) {
71+
$__TOOLCHAIN += "$_PSEP$SCALA_CLASSPATH"
7372
}
7473

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
8075
}
8176

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-
}
9977

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

Comments
 (0)