Permalink
Browse files

Added lock by default and did a minor amount of cleanup. More to come…

… hopefully.
  • Loading branch information...
jsuereth committed May 24, 2012
1 parent de98920 commit 4b2dad431755a1428b1bb1506faaab3c98b6fc63
Showing with 40 additions and 58 deletions.
  1. +25 −54 project/Build.scala
  2. +15 −4 project/Layers.scala
View
@@ -2,25 +2,11 @@ import sbt._
import Keys._
import partest._
import SameTest._
import ScalaBuildKeys._
object ScalaBuild extends Build with Layers {
// New tasks/settings specific to the scala build.
lazy val lockerLock: TaskKey[Unit] = TaskKey("locker-lock",
"Locks the locker layer of the compiler build such that it won't rebuild on changed source files.")
lazy val lockerUnlock: TaskKey[Unit] = TaskKey("locker-unlock",
"Unlocks the locker layer of the compiler so that it will be recompiled on changed source files.")
lazy val lockFile: SettingKey[File] = SettingKey("lock-file",
"Location of the lock file compiling this project.")
// New tasks/settings specific to the scala build.
lazy val lock: TaskKey[Unit] = TaskKey("lock", "Locks this project so it won't be recompiled.")
lazy val unlock: TaskKey[Unit] = TaskKey("unlock", "Unlocks this project so it will be recompiled.")
lazy val makeDist: TaskKey[File] = TaskKey("make-dist",
"Creates a mini-distribution (scala home directory) for this build in a zip file.")
lazy val makeExplodedDist: TaskKey[File] = TaskKey("make-exploded-dist",
"Creates a mini-distribution (scala home directory) for this build in a directory.")
lazy val makeDistMappings: TaskKey[Map[File, String]] = TaskKey("make-dist-mappings",
"Creates distribution mappings for creating zips,jars,directorys,etc.")
lazy val buildFixed = AttributeKey[Boolean]("build-uri-fixed")
// Build wide settings:
override lazy val settings = super.settings ++ Versions.settings ++ Seq(
@@ -35,22 +21,7 @@ object ScalaBuild extends Build with Layers {
),
organization := "org.scala-lang",
version <<= Versions.mavenVersion,
pomExtra := <xml:group>
<inceptionYear>2002</inceptionYear>
<licenses>
<license>
<name>BSD-like</name>
<url>http://www.scala-lang.org/downloads/license.html</url>
</license>
</licenses>
<scm>
<connection>scm:git:git://github.com/scala/scala.git</connection>
</scm>
<issueManagement>
<system>jira</system>
<url>http://issues.scala-lang.org</url>
</issueManagement>
</xml:group>,
pomExtra := epflPomExtra,
commands += Command.command("fix-uri-projects") { (state: State) =>
if(state.get(buildFixed) getOrElse false) state
else {
@@ -154,26 +125,26 @@ object ScalaBuild extends Build with Layers {
// These are setting overrides for most artifacts in the Scala build file.
def settingOverrides: Seq[Setting[_]] = publishSettings ++ Seq(
crossPaths := false,
autoScalaLibrary := false,
// Work around a bug where scala-library (and forkjoin) is put on classpath for analysis.
classpathOptions := ClasspathOptions.manual,
publishArtifact in packageDoc := false,
publishArtifact in packageSrc := false,
target <<= (baseDirectory, name) apply (_ / "target" / _),
(classDirectory in Compile) <<= target(_ / "classes"),
javacOptions ++= Seq("-target", "1.5", "-source", "1.5"),
scalaSource in Compile <<= (baseDirectory, name) apply (_ / "src" / _),
javaSource in Compile <<= (baseDirectory, name) apply (_ / "src" / _),
autoScalaLibrary := false,
unmanagedJars in Compile := Seq(),
// Most libs in the compiler use this order to build.
compileOrder in Compile := CompileOrder.JavaThenScala,
lockFile <<= target(_ / "compile.lock"),
skip in Compile <<= lockFile map (_.exists),
lock <<= lockFile map (f => IO.touch(f)),
unlock <<= lockFile map IO.delete
)
crossPaths := false,
autoScalaLibrary := false,
// Work around a bug where scala-library (and forkjoin) is put on classpath for analysis.
classpathOptions := ClasspathOptions.manual,
publishArtifact in packageDoc := false,
publishArtifact in packageSrc := false,
target <<= (baseDirectory, name) apply (_ / "target" / _),
(classDirectory in Compile) <<= target(_ / "classes"),
javacOptions ++= Seq("-target", "1.5", "-source", "1.5"),
scalaSource in Compile <<= (baseDirectory, name) apply (_ / "src" / _),
javaSource in Compile <<= (baseDirectory, name) apply (_ / "src" / _),
autoScalaLibrary := false,
unmanagedJars in Compile := Seq(),
// Most libs in the compiler use this order to build.
compileOrder in Compile := CompileOrder.JavaThenScala,
lockFile <<= target(_ / "compile.lock"),
skip in Compile <<= lockFile map (_.exists),
lock <<= lockFile map (f => IO.touch(f)),
unlock <<= lockFile map IO.delete
)
// --------------------------------------------------------------
// Libraries used by Scalac that change infrequently
@@ -206,7 +177,7 @@ object ScalaBuild extends Build with Layers {
}
// Locker is a lockable Scala compiler that can be built of 'current' source to perform rapid development.
lazy val (lockerLib, lockerComp) = makeLayer("locker", STARR)
lazy val (lockerLib, lockerComp) = makeLayer("locker", STARR, autoLock = true)
lazy val locker = Project("locker", file(".")) aggregate(lockerLib, lockerComp)
// Quick is the general purpose project layer for the Scala compiler.
View
@@ -1,6 +1,7 @@
import sbt._
import Keys._
import com.jsuereth.git.GitKeys.gitRunner
import ScalaBuildKeys.lock
/** This trait stores all the helper methods to generate layers in Scala's layered build. */
trait Layers extends Build {
@@ -24,7 +25,7 @@ trait Layers extends Build {
/** Creates a reference Scala version that can be used to build other projects. This takes in the raw
* library, compiler and fjbg libraries as well as a string representing the layer name (used for compiling the compile-interface).
*/
def makeScalaReference(layer : String, library: Project, compiler: Project) =
def makeScalaReference(layer: String, library: Project, compiler: Project) =
scalaInstance <<= (appConfiguration in library,
version in library,
(exportedProducts in library in Compile),
@@ -50,8 +51,18 @@ trait Layers extends Build {
* Returns the library project and compiler project from the next layer.
* Note: The library and compiler are not *complete* in the sense that they are missing things like "actors" and "fjbg".
*/
def makeLayer(layer: String, referenceScala: Setting[Task[ScalaInstance]]) : (Project, Project) = {
val library = Project(layer + "-library", file(".")) settings(settingOverrides: _*) settings(
def makeLayer(layer: String, referenceScala: Setting[Task[ScalaInstance]], autoLock: Boolean = false) : (Project, Project) = {
val autoLockSettings: Seq[Setting[_]] =
if(autoLock) Seq(compile in Compile <<= (compile in Compile, lock) apply { (c, l) =>
c flatMapR { cResult =>
val result = Result.tryValue(cResult)
l mapR { tx => result }
}
})
else Seq.empty
val library = Project(layer + "-library", file(".")) settings(settingOverrides: _*) settings(autoLockSettings:_*) settings(
version := layer,
// TODO - use depends on.
unmanagedClasspath in Compile <<= (exportedProducts in forkjoin in Compile).identity,
@@ -66,7 +77,7 @@ trait Layers extends Build {
)
// Define the compiler
val compiler = Project(layer + "-compiler", file(".")) settings(settingOverrides:_*) settings(
val compiler = Project(layer + "-compiler", file(".")) settings(settingOverrides:_*) settings(autoLockSettings:_*) settings(
version := layer,
scalaSource in Compile <<= (baseDirectory) apply (_ / "src" / "compiler"),
resourceDirectory in Compile <<= baseDirectory apply (_ / "src" / "compiler"),

0 comments on commit 4b2dad4

Please sign in to comment.