summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@epfl.ch>2009-03-24 16:33:32 +0000
committerLukas Rytz <lukas.rytz@epfl.ch>2009-03-24 16:33:32 +0000
commitba2bb4c1a126305e6d1b0e34a341fa16e9abd4e0 (patch)
tree0236c811237a393e97465e0f04fa4e20f21ca2fe /src/compiler
parenta2bfe6eef5294f9bd6347ab98c171db4bc6fe78d (diff)
downloadscala-ba2bb4c1a126305e6d1b0e34a341fa16e9abd4e0.tar.gz
scala-ba2bb4c1a126305e6d1b0e34a341fa16e9abd4e0.tar.bz2
scala-ba2bb4c1a126305e6d1b0e34a341fa16e9abd4e0.zip
scalac ant task now supports @argfile (needed t...
scalac ant task now supports @argfile (needed to build .net on windows)
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/scala/tools/ant/Scalac.scala24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/ant/Scalac.scala b/src/compiler/scala/tools/ant/Scalac.scala
index f4cbcf1bf8..a7ff39ec0e 100644
--- a/src/compiler/scala/tools/ant/Scalac.scala
+++ b/src/compiler/scala/tools/ant/Scalac.scala
@@ -18,7 +18,7 @@ import org.apache.tools.ant.types.{Path, Reference}
import org.apache.tools.ant.util.{FileUtils, GlobPatternMapper,
SourceFileScanner}
-import scala.tools.nsc.{Global, Settings}
+import scala.tools.nsc.{Global, Settings, CompilerCommand}
import scala.tools.nsc.reporters.{Reporter, ConsoleReporter}
/** <p>
@@ -157,6 +157,9 @@ class Scalac extends MatchingTask {
* (not only the number of files). */
protected var scalacDebugging: Boolean = false
+ /** An optional file containing compiler arguments */
+ protected var argfile: Option[File] = None
+
/*============================================================================*\
** Properties setters **
\*============================================================================*/
@@ -349,6 +352,10 @@ class Scalac extends MatchingTask {
def setAssemrefs(input: String) { assemrefs = Some(input) }
+
+ /** Sets the <code>argfile</code> attribute. */
+ def setArgfile(input: File) { argfile = Some(input) }
+
/*============================================================================*\
** Properties getters **
\*============================================================================*/
@@ -457,6 +464,7 @@ class Scalac extends MatchingTask {
protected def newSettings(error: String=>Unit): Settings =
new Settings(error)
+
protected def newGlobal(settings: Settings, reporter: Reporter) =
new Global(settings, reporter)
@@ -466,7 +474,7 @@ class Scalac extends MatchingTask {
\*============================================================================*/
/** Initializes settings and source files */
- protected def initialize: (Settings, List[File], Boolean) = {
+ protected def initialize: (Settings, List[String], Boolean) = {
// Tests if all mandatory attributes are set and valid.
if (origin.isEmpty) error("Attribute 'srcdir' is not set.")
if (getOrigin.isEmpty) error("Attribute 'srcdir' is not set.")
@@ -483,7 +491,7 @@ class Scalac extends MatchingTask {
// Scans source directories to build up a compile lists.
// If force is false, only files were the .class file in destination is
// older than the .scala file will be used.
- val sourceFiles: List[File] =
+ var sourceFiles: List[String] =
for {
val originDir <- getOrigin
val originFiles <- {
@@ -521,12 +529,18 @@ class Scalac extends MatchingTask {
}
yield {
log(originFiles, Project.MSG_DEBUG)
- nameToFile(originDir)(originFiles)
+ nameToFile(originDir)(originFiles).toString
}
// Builds-up the compilation settings for Scalac with the existing Ant
// parameters.
val settings = newSettings(error)
+ if (!argfile.isEmpty) {
+ log("Using argument file: @" +argfile.get)
+ javaOnly = false // not quite correct, depends on content of argfile
+ val command = new CompilerCommand(List("@"+ argfile.get), settings, error, true)
+ sourceFiles = sourceFiles ::: command.files
+ }
settings.outdir.value = asString(destination.get)
if (!classpath.isEmpty)
settings.classpath.value = asString(getClasspath)
@@ -572,7 +586,7 @@ class Scalac extends MatchingTask {
// Compiles the actual code
val compiler = newGlobal(settings, reporter)
try {
- (new compiler.Run).compile(sourceFiles.map (_.toString))
+ (new compiler.Run).compile(sourceFiles)
}
catch {
case exception: Throwable if (exception.getMessage ne null) =>