From ba2bb4c1a126305e6d1b0e34a341fa16e9abd4e0 Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Tue, 24 Mar 2009 16:33:32 +0000 Subject: scalac ant task now supports @argfile (needed t... scalac ant task now supports @argfile (needed to build .net on windows) --- src/compiler/scala/tools/ant/Scalac.scala | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'src/compiler') 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} /**

@@ -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 argfile 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) => -- cgit v1.2.3