Skip to content

Commit 108ecf5

Browse files
committed
a demo Project type
multi-project incremental compilation and dependency management 'update' currently runs on every compile built-in 'compile' command shadows 'compile' action
1 parent ce9db82 commit 108ecf5

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

main/DefaultProject.scala

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/* sbt -- Simple Build Tool
2+
* Copyright 2010 Mark Harrah
3+
*/
4+
package sbt
5+
6+
import std._
7+
import inc.Analysis
8+
import TaskExtra._
9+
import Configurations.{Compile => CompileConfig, Test => TestConfig}
10+
import ClasspathProject._
11+
12+
import java.io.File
13+
14+
abstract class DefaultProject extends TestProject with MultiClasspathProject with ReflectiveClasspathProject
15+
{
16+
def javacOptions: Seq[String] = Nil
17+
def scalacOptions: Seq[String] = Nil
18+
19+
def outputDirectory = "target": Path
20+
def cacheDirectory = outputDirectory / "cache"
21+
22+
def classesDirectory(configuration: Configuration): File =
23+
configuration match {
24+
case CompileConfig => outputDirectory / "classes"
25+
case x => outputDirectory / (x.toString + "-classes")
26+
}
27+
28+
// TODO: resources, jars, test classes
29+
lazy val products: Classpath =
30+
TaskMap { (conf: Configuration) =>
31+
conf match {
32+
case CompileConfig => analyzed(compile, compileInputs) named(name + "/analyzed") map { _ :: Nil } named(name + "/products")
33+
case x => error("Unknown compilation configuration: " + x)
34+
}
35+
}
36+
37+
def sourceFilter: FileFilter = "*.java" | "*.scala"
38+
39+
def compileTask(inputs: Task[Compile.Inputs]): Task[Analysis] = inputs map Compile.apply
40+
41+
def compileInputsTask(configuration: Configuration, base: PathFinder): Task[Compile.Inputs] =
42+
{
43+
val dep = dependencyClasspath(configuration)
44+
val prod: Task[Seq[Attributed[File]]] = (configuration.extendsConfigs map products).join.map(_.flatten)
45+
(dep, prod) map { case (cp :+: prodcp :+: HNil) =>
46+
val log = ConsoleLogger()
47+
val compilers = Compile.compilers(info.configuration, log)
48+
val javaSrc = base / "java"
49+
val scalaSrc = base / "scala"
50+
val out = "target" / compilers.scalac.scalaInstance.actualVersion
51+
52+
val sources = ((javaSrc +++ scalaSrc) ** sourceFilter) +++ (if(configuration == Compile) (".": Path) * sourceFilter else Path.emptyPathFinder)
53+
println("Sources: " + sources)
54+
val classes = classesDirectory(configuration)
55+
val classpath = (classes +: data(prodcp)) ++ data(cp)
56+
val analysis = analysisMap(prodcp ++ cp)
57+
Compile.inputs(classpath, sources.getFiles.toSeq, classes, scalacOptions, javacOptions, javaSrc.getFiles.toSeq, analysis, cacheDirectory, 100)(compilers, log)
58+
}
59+
}
60+
61+
lazy val compileInputs: Task[Compile.Inputs] = compileInputsTask(Configurations.Compile, "src" / "main") named(name + "/compile-inputs")
62+
lazy val compile: Task[Analysis] = compileTask(compileInputs) named(name + "/compile")
63+
}

0 commit comments

Comments
 (0)