summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.xml8
-rw-r--r--src/compiler/scala/tools/ant/sabbus/Make.scala2
-rw-r--r--src/compiler/scala/tools/ant/sabbus/ScalacFork.scala17
-rw-r--r--src/compiler/scala/tools/ant/sabbus/Settings.scala14
-rw-r--r--src/compiler/scala/tools/ant/sabbus/TaskArgs.scala19
-rw-r--r--tools/get-scala-revision.bat4
6 files changed, 44 insertions, 20 deletions
diff --git a/build.xml b/build.xml
index accaa92ec0..0badd57afc 100644
--- a/build.xml
+++ b/build.xml
@@ -639,6 +639,10 @@ QUICK BUILD (QUICK)
jvmargs="${scalacfork.jvmargs}">
<include name="**/*.scala"/>
<compilationpath refid="quick.compilation.path"/>
+ <!-- TODO: Enable this and remove from params above when "compilerarg" is in starr
+ <compilerarg value="-Xpluginsdir"/>
+ <compilerarg file="${build-quick.dir}/misc/scala-devel/plugins"/>
+ -->
</scalacfork>
<touch file="${build-quick.dir}/plugins.complete" verbose="no"/>
<stopwatch name="quick.plugins.timer" action="total"/>
@@ -1152,6 +1156,10 @@ BOOTSTRAPPING BUILD (STRAP)
jvmargs="${scalacfork.jvmargs}">
<include name="**/*.scala"/>
<compilationpath refid="strap.compilation.path"/>
+ <!-- TODO: Enable this and remove from params above when "compilerarg" is in starr
+ <compilerarg value="-Xpluginsdir"/>
+ <compilerarg file="${build-strap.dir}/misc/scala-devel/plugins"/>
+ -->
</scalacfork>
<touch file="${build-strap.dir}/plugins.complete" verbose="no"/>
<stopwatch name="strap.plugins.timer" action="total"/>
diff --git a/src/compiler/scala/tools/ant/sabbus/Make.scala b/src/compiler/scala/tools/ant/sabbus/Make.scala
index 75cd0105ac..57505420c5 100644
--- a/src/compiler/scala/tools/ant/sabbus/Make.scala
+++ b/src/compiler/scala/tools/ant/sabbus/Make.scala
@@ -21,7 +21,7 @@ class Make extends Task with TaskArgs {
if (!compTarget.isEmpty) settings.target = compTarget.get
if (!compilationPath.isEmpty) settings.classpath = compilationPath.get
if (!sourcePath.isEmpty) settings.sourcepath = sourcePath.get
- if (!params.isEmpty) settings.more = params.get
+ settings.extraParams = extraArgsFlat
Compilers.make(id.get, (compilerPath.get.list.map{ path => new File(path).toURI.toURL }), settings)
}
}
diff --git a/src/compiler/scala/tools/ant/sabbus/ScalacFork.scala b/src/compiler/scala/tools/ant/sabbus/ScalacFork.scala
index 5da531146b..a39de64c5a 100644
--- a/src/compiler/scala/tools/ant/sabbus/ScalacFork.scala
+++ b/src/compiler/scala/tools/ant/sabbus/ScalacFork.scala
@@ -23,14 +23,16 @@ import scala.tools.nsc.util.ScalaClassLoader
* - `failonerror`,
* - `timeout`,
* - `jvmargs`,
- * - `argfile`.
+ * - `argfile`,
+ * - `params`.
*
* It also takes the following parameters as nested elements:
* - `src` (for `srcdir`),
* - `classpath`,
* - `sourcepath`,
* - `bootclasspath`,
- * - `extdirs`.
+ * - `extdirs`,
+ * - `compilerarg`.
*
* @author Gilles Dubochet
*/
@@ -99,7 +101,7 @@ class ScalacFork extends ScalaMatchingTask with ScalacShared with TaskArgs {
compTarget foreach (settings.target = _)
compilationPath foreach (settings.classpath = _)
sourcePath foreach (settings.sourcepath = _)
- params foreach (settings.more = _)
+ settings.extraParams = extraArgsFlat
if (isMSIL)
settings.sourcedir = sourceDir
@@ -132,10 +134,17 @@ class ScalacFork extends ScalaMatchingTask with ScalacShared with TaskArgs {
java setClasspath compilerPath
java setClassname MainClass
+ // Encode scalac/javac args for use in a file to be read back via "@file.txt"
+ def encodeScalacArgsFile(t: Traversable[String]) = t map { s =>
+ if(s.find(c => c <= ' ' || "\"'\\".contains(c)).isDefined)
+ "\"" + s.flatMap(c => (if(c == '"' || c == '\\') "\\" else "") + c ) + "\""
+ else s
+ } mkString "\n"
+
// dump the arguments to a file and do "java @file"
val tempArgFile = io.File.makeTemp("scalacfork")
val tokens = settings.toArgs ++ (includedFiles map (_.getPath))
- tempArgFile writeAll (tokens mkString " ")
+ tempArgFile writeAll encodeScalacArgsFile(tokens)
val paths = List(Some(tempArgFile.toAbsolute.path), argfile).flatten map (_.toString)
val res = execWithArgFiles(java, paths)
diff --git a/src/compiler/scala/tools/ant/sabbus/Settings.scala b/src/compiler/scala/tools/ant/sabbus/Settings.scala
index 4d4e3cdb08..c62ea172ed 100644
--- a/src/compiler/scala/tools/ant/sabbus/Settings.scala
+++ b/src/compiler/scala/tools/ant/sabbus/Settings.scala
@@ -58,16 +58,14 @@ class Settings {
def optimise = optimiseBf
def optimise_=(b: Boolean) { optimiseBf = b }
- private var moreBf: Option[String] = None
- def more = moreBf.get
- def more_=(s: String): this.type = { moreBf = Some(s); this }
-
- private def q(o: AnyRef) = "\"" + o.toString.replace("""\""", """\\""") + "\""
+ private var extraParamsBf: Seq[String] = Seq()
+ def extraParams = extraParamsBf
+ def extraParams_=(s: Seq[String]): this.type = { extraParamsBf = s; this }
def toArgs: List[String] =
(if (!gBf.isEmpty) "-g:"+g :: Nil else Nil) :::
(if (uncheckedBf) "-unchecked" :: Nil else Nil) :::
- (if (!classpathBf.isEmpty) "-classpath" :: q(classpath) :: Nil else Nil) :::
+ (if (!classpathBf.isEmpty) "-classpath" :: classpath.toString :: Nil else Nil) :::
(if (!sourcepathBf.isEmpty) "-sourcepath" :: sourcepath.toString :: Nil else Nil) :::
(if (!sourcedirBf.isEmpty) "-Xsourcedir" :: sourcedir.toString :: Nil else Nil) :::
(if (!bootclasspathBf.isEmpty) "-bootclasspath" :: bootclasspath.toString :: Nil else Nil) :::
@@ -76,7 +74,7 @@ class Settings {
(if (!encodingBf.isEmpty) "-encoding" :: encoding :: Nil else Nil) :::
(if (!targetBf.isEmpty) "-target:"+target :: Nil else Nil) :::
(if (optimiseBf) "-optimise" :: Nil else Nil) :::
- (if (!moreBf.isEmpty) (more split ' ').toList else Nil)
+ extraParamsBf.toList
override def equals(that: Any): Boolean = that match {
case cs: Settings =>
@@ -91,7 +89,7 @@ class Settings {
this.encodingBf == cs.encodingBf &&
this.targetBf == cs.targetBf &&
this.optimiseBf == cs.optimiseBf &&
- this.moreBf == cs.moreBf
+ this.extraParamsBf == cs.extraParamsBf
case _ => false
}
diff --git a/src/compiler/scala/tools/ant/sabbus/TaskArgs.scala b/src/compiler/scala/tools/ant/sabbus/TaskArgs.scala
index b2487355e4..ca210f7187 100644
--- a/src/compiler/scala/tools/ant/sabbus/TaskArgs.scala
+++ b/src/compiler/scala/tools/ant/sabbus/TaskArgs.scala
@@ -12,6 +12,7 @@ package scala.tools.ant.sabbus
import java.io.File
import org.apache.tools.ant.Task
import org.apache.tools.ant.types.{Path, Reference}
+import org.apache.tools.ant.types.Commandline.Argument
trait CompilationPathProperty {
this: Task =>
@@ -41,10 +42,13 @@ trait TaskArgs extends CompilationPathProperty {
}
def setParams(input: String) {
- params = params match {
- case None => Some(input)
- case Some(ps) => Some(ps + " " + input)
- }
+ extraArgs ++= input.split(' ').map { s => val a = new Argument; a.setValue(s); a }
+ }
+
+ def createCompilerArg(): Argument = {
+ val a = new Argument
+ extraArgs :+= a
+ a
}
def setTarget(input: String) {
@@ -84,11 +88,16 @@ trait TaskArgs extends CompilationPathProperty {
}
protected var id: Option[String] = None
- protected var params: Option[String] = None
+ protected var extraArgs: Seq[Argument] = Seq()
protected var compTarget: Option[String] = None
protected var sourcePath: Option[Path] = None
protected var compilerPath: Option[Path] = None
protected var destinationDir: Option[File] = None
+ def extraArgsFlat: Seq[String] = extraArgs flatMap { a =>
+ val parts = a.getParts
+ if(parts eq null) Seq[String]() else parts.toSeq
+ }
+
def isMSIL = compTarget exists (_ == "msil")
}
diff --git a/tools/get-scala-revision.bat b/tools/get-scala-revision.bat
index c9de414cea..880bcc3f5c 100644
--- a/tools/get-scala-revision.bat
+++ b/tools/get-scala-revision.bat
@@ -14,9 +14,9 @@ if "%OS%" NEQ "Windows_NT" (
set _DIR=
if "%*"=="" (
- for /f %%i in ('cd') do set _DIR=%%i
+ for /f "delims=;" %%i in ('cd') do set "_DIR=%%i"
) else (
- set _DIR=%~1
+ set "_DIR=%~1"
)
cd %_DIR%