Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

65 lines (57 sloc) 2.886 kb
/* sbt -- Simple Build Tool
* Copyright 2008, 2009, 2010, 2011 Mark Harrah, Indrajit Raychaudhuri
*/
package sbt
import java.io.File
import compiler.{AnalyzingCompiler, JavaCompiler}
import Predef.{conforms => _, _}
import Types.:+:
import Path._
import sbinary.DefaultProtocol.FileFormat
import Cache.{defaultEquiv, hConsCache, hNilCache, IntFormat, seqCache, seqFormat, streamFormat, StringFormat, UnitFormat, wrapIn}
import Tracked.{inputChanged, outputChanged}
import FilesInfo.{exists, hash, lastModified}
object RawCompileLike
{
type Gen = (Seq[File], Seq[File], File, Seq[String], Int, Logger) => Unit
def cached(cache: File, doCompile: Gen): Gen = (sources, classpath, outputDirectory, options, maxErrors, log) =>
{
type Inputs = FilesInfo[HashFileInfo] :+: FilesInfo[ModifiedFileInfo] :+: String :+: File :+: Seq[String] :+: Int :+: HNil
val inputs: Inputs = hash(sources.toSet) :+: lastModified(classpath.toSet) :+: classpath.absString :+: outputDirectory :+: options :+: maxErrors :+: HNil
implicit val stringEquiv: Equiv[String] = defaultEquiv
implicit val fileEquiv: Equiv[File] = defaultEquiv
implicit val intEquiv: Equiv[Int] = defaultEquiv
val cachedComp = inputChanged(cache / "inputs") { (inChanged, in: Inputs) =>
outputChanged(cache / "output") { (outChanged, outputs: FilesInfo[PlainFileInfo]) =>
if(inChanged || outChanged)
doCompile(sources, classpath, outputDirectory, options, maxErrors, log)
else
log.debug("Uptodate: " + outputDirectory.getAbsolutePath)
}
}
cachedComp(inputs)(() => exists(outputDirectory.***.get.toSet))
}
def prepare(description: String, doCompile: Gen): Gen = (sources, classpath, outputDirectory, options, maxErrors, log) =>
{
if(sources.isEmpty)
log.info("No sources available, skipping " + description + "...")
else
{
log.info(description.capitalize + " to " + outputDirectory.absolutePath + "...")
IO.delete(outputDirectory)
IO.createDirectory(outputDirectory)
doCompile(sources, classpath, outputDirectory, options, maxErrors, log)
log.info(description.capitalize + " successful.")
}
}
def filterSources(f: File => Boolean, doCompile: Gen): Gen = (sources, classpath, outputDirectory, options, maxErrors, log) =>
doCompile(sources filter f, classpath, outputDirectory, options, maxErrors, log)
def rawCompile(instance: ScalaInstance, cpOptions: ClasspathOptions): Gen = (sources, classpath, outputDirectory, options, maxErrors, log) =>
{
val compiler = new sbt.compiler.RawCompiler(instance, cpOptions, log)
compiler(sources, classpath, outputDirectory, options)
}
def compile(label: String, cache: File, instance: ScalaInstance, cpOptions: ClasspathOptions): Gen =
cached(cache, prepare(label + " sources", rawCompile(instance, cpOptions)))
val nop: Gen = (sources, classpath, outputDirectory, options, maxErrors, log) => ()
}
Jump to Line
Something went wrong with that request. Please try again.