summaryrefslogtreecommitdiff
path: root/project/Build.scala
diff options
context:
space:
mode:
Diffstat (limited to 'project/Build.scala')
-rw-r--r--project/Build.scala334
1 files changed, 0 insertions, 334 deletions
diff --git a/project/Build.scala b/project/Build.scala
deleted file mode 100644
index efa8a7a038..0000000000
--- a/project/Build.scala
+++ /dev/null
@@ -1,334 +0,0 @@
-import sbt._
-import Keys._
-import partest._
-import ScalaBuildKeys._
-import Release._
-
-
-object ScalaBuild extends Build with Layers with Packaging with Testing {
-
- // Build wide settings:
- override lazy val settings = super.settings ++ Versions.settings ++ Seq(
- autoScalaLibrary := false,
- resolvers += Resolver.url(
- "Typesafe nightlies",
- url("https://typesafe.artifactoryonline.com/typesafe/ivy-snapshots/")
- )(Resolver.ivyStylePatterns),
- resolvers ++= Seq(
- "junit interface repo" at "https://repository.jboss.org/nexus/content/repositories/scala-tools-releases",
- ScalaToolsSnapshots
- ),
- organization := "org.scala-lang",
- version <<= Versions.mavenVersion,
- pomExtra := epflPomExtra
- )
-
- // Collections of projects to run 'compile' on.
- lazy val compiledProjects = Seq(quickLib, quickComp, continuationsLibrary, actors, swing, forkjoin)
- // Collection of projects to 'package' and 'publish' together.
- lazy val packagedBinaryProjects = Seq(scalaLibrary, scalaCompiler, swing, actors, continuationsPlugin, jline, scalap)
- lazy val partestRunProjects = Seq(testsuite, continuationsTestsuite)
-
- private def epflPomExtra = (
- <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>
- )
-
- // Settings used to make sure publishing goes smoothly.
- def publishSettings: Seq[Setting[_]] = Seq(
- ivyScala ~= ((is: Option[IvyScala]) => is.map(_.copy(checkExplicit = false))),
- pomIncludeRepository := (_ => false),
- publishMavenStyle := true,
- makePomConfiguration <<= makePomConfiguration apply (_.copy(configurations = Some(Seq(Compile, Default)))),
- pomExtra := epflPomExtra
- )
-
- // Settings for root project. These are aggregate tasks against the rest of the build.
- def projectSettings: Seq[Setting[_]] = publishSettings ++ Seq(
- doc in Compile <<= (doc in documentation in Compile).identity,
- // These next two aggregate commands on several projects and return results that are to be ignored by remaining tasks.
- compile in Compile <<= compiledProjects.map(p => compile in p in Compile).join.map(_.head),
- // TODO - just clean target? i.e. target map IO.deleteRecursively
- clean <<= (compiledProjects ++ partestRunProjects).map(p => clean in p).dependOn,
- packageBin in Compile <<= packagedBinaryProjects.map(p => packageBin in p in Compile).join.map(_.head),
- // TODO - Make sure scalaLibrary has packageDoc + packageSrc from documentation attached...
- publish <<= packagedBinaryProjects.map(p => publish in p).join.map(_.head),
- publishLocal <<= packagedBinaryProjects.map(p => publishLocal in p).join.map(_.head),
- packageDoc in Compile <<= (packageDoc in documentation in Compile).identity,
- packageSrc in Compile <<= (packageSrc in documentation in Compile).identity,
- test in Test <<= (runPartest in testsuite, runPartest in continuationsTestsuite, checkSame in testsuite) map { (a,b,c) => () },
- lockerLock <<= (lockFile in lockerLib, lockFile in lockerComp, compile in Compile in lockerLib, compile in Compile in lockerComp) map { (lib, comp, _, _) =>
- Seq(lib,comp).foreach(f => IO.touch(f))
- },
- lockerUnlock <<= (lockFile in lockerLib, lockFile in lockerComp) map { (lib, comp) =>
- Seq(lib,comp).foreach(IO.delete)
- },
- genBinQuick <<= (genBinQuick in scaladist).identity,
- makeDist <<= (makeDist in scaladist).identity,
- makeExplodedDist <<= (makeExplodedDist in scaladist).identity,
- // Note: We override unmanagedSources so that ~ compile will look at all these sources, then run our aggregated compile...
- unmanagedSourceDirectories in Compile <<= baseDirectory apply (_ / "src") apply { dir =>
- Seq("library/scala","actors","compiler","swing","continuations/library","forkjoin") map (dir / _)
- },
- // TODO - Make exported products == makeDist so we can use this when creating a *real* distribution.
- commands += Release.pushStarr
- )
- // Note: Root project is determined by lowest-alphabetical project that has baseDirectory as file("."). we use aaa_ to 'win'.
- lazy val aaa_root = Project("scala", file(".")) settings(projectSettings: _*) settings(ShaResolve.settings: _*)
-
- // External dependencies used for various projects
- lazy val externalDeps: Setting[_] = libraryDependencies <<= (sbtVersion)(v =>
- Seq(
- "org.apache.ant" % "ant" % "1.8.2",
- "org.scala-sbt" % "compiler-interface" % v % "provided"
- )
- )
-
- def fixArtifactSrc(dir: File, name: String) = name match {
- case x if x startsWith "scala-" => dir / "src" / (name drop 6)
- case x => dir / "src" / name
- }
-
- // 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 fixArtifactSrc,
- javaSource in Compile <<= (baseDirectory, name) apply fixArtifactSrc,
- 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
- // (or hopefully so).
- // --------------------------------------------------------------
-
- // Jline nested project. Compile this sucker once and be done.
- lazy val jline = Project("jline", file("src/jline"))
- // Our wrapped version of asm.
- lazy val asm = Project("asm", file(".")) settings(settingOverrides : _*)
- // Forkjoin backport
- lazy val forkjoin = Project("forkjoin", file(".")) settings(settingOverrides : _*)
-
- // --------------------------------------------------------------
- // The magic kingdom.
- // Layered compilation of Scala.
- // Stable Reference -> Locker ('Lockable' dev version) -> Quick -> Strap (Binary compatibility testing)
- // --------------------------------------------------------------
-
- // Need a report on this...
- // TODO - Resolve STARR from a repo..
- lazy val STARR = scalaInstance <<= (appConfiguration, ShaResolve.pullBinaryLibs in ThisBuild) map { (app, _) =>
- val launcher = app.provider.scalaProvider.launcher
- val library = file("lib/scala-library.jar")
- val compiler = file("lib/scala-compiler.jar")
- val libJars = (file("lib") * "*.jar").get filterNot Set(library, compiler)
- ScalaInstance("starr", library, compiler, launcher, libJars: _*)
- }
-
- // Locker is a lockable Scala compiler that can be built of 'current' source to perform rapid development.
- lazy val (lockerLib, lockerReflect, lockerComp) = makeLayer("locker", STARR, autoLock = true)
- lazy val locker = Project("locker", file(".")) aggregate(lockerLib, lockerReflect, lockerComp)
-
- // Quick is the general purpose project layer for the Scala compiler.
- lazy val (quickLib, quickReflect, quickComp) = makeLayer("quick", makeScalaReference("locker", lockerLib, lockerReflect, lockerComp))
- lazy val quick = Project("quick", file(".")) aggregate(quickLib, quickReflect, quickComp)
-
- // Reference to quick scala instance.
- lazy val quickScalaInstance = makeScalaReference("quick", quickLib, quickReflect, quickComp)
- def quickScalaLibraryDependency = unmanagedClasspath in Compile <++= (exportedProducts in quickLib in Compile).identity
- def quickScalaReflectDependency = unmanagedClasspath in Compile <++= (exportedProducts in quickReflect in Compile).identity
- def quickScalaCompilerDependency = unmanagedClasspath in Compile <++= (exportedProducts in quickComp in Compile).identity
-
- // Strapp is used to test binary 'sameness' between things built with locker and things built with quick.
- lazy val (strappLib, strappReflect, strappComp) = makeLayer("strapp", quickScalaInstance)
-
- // --------------------------------------------------------------
- // Projects dependent on layered compilation (quick)
- // --------------------------------------------------------------
- def addCheaterDependency(projectName: String): Setting[_] =
- pomPostProcess <<= (version, organization, pomPostProcess) apply { (v,o,k) =>
- val dependency: scala.xml.Node =
- <dependency>
- <groupId>{o}</groupId>
- <artifactid>{projectName}</artifactid>
- <version>{v}</version>
- </dependency>
- def fixDependencies(node: scala.xml.Node): scala.xml.Node = node match {
- case <dependencies>{nested@_*}</dependencies> => <dependencies>{dependency}{nested}</dependencies>
- case x => x
- }
- // This is a hack to get around issues where \ and \\ don't work if any of the children are `scala.xml.Group`.
- def hasDependencies(root: scala.xml.Node): Boolean =
- (root.child collectFirst {
- case n: scala.xml.Elem if n.label == "dependencies" => n
- } isEmpty)
- // TODO - Keep namespace on project...
- k andThen {
- case n @ <project>{ nested@_*}</project> if hasDependencies(n) =>
- <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">{nested}<dependencies>{dependency}</dependencies></project>
- case <project>{ nested@_*}</project> =>
- <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">{ nested map fixDependencies }</project>
- }
- }
-
- // TODO - in sabbus, these all use locker to build... I think tihs way is better, but let's farm this idea around.
- lazy val dependentProjectSettings = settingOverrides ++ Seq(quickScalaInstance, quickScalaLibraryDependency, addCheaterDependency("scala-library"))
- lazy val actors = Project("scala-actors", file(".")) settings(dependentProjectSettings:_*) dependsOn(forkjoin % "provided")
- lazy val swing = Project("scala-swing", file(".")) settings(dependentProjectSettings:_*) dependsOn(actors % "provided")
- // This project will generate man pages (in man1 and html) for scala.
- lazy val manmakerSettings: Seq[Setting[_]] = dependentProjectSettings :+ externalDeps
- lazy val manmaker = Project("manual", file(".")) settings(manmakerSettings:_*)
-
- // Things that compile against the compiler.
- lazy val compilerDependentProjectSettings = dependentProjectSettings ++ Seq(quickScalaReflectDependency, quickScalaCompilerDependency, addCheaterDependency("scala-compiler"))
-
- lazy val scalacheck = Project("scalacheck", file(".")) settings(compilerDependentProjectSettings:_*) dependsOn(actors % "provided")
- lazy val partestSettings = compilerDependentProjectSettings :+ externalDeps
- lazy val partest = Project("partest", file(".")) settings(partestSettings:_*) dependsOn(actors,forkjoin,scalap,asm)
- lazy val scalapSettings = compilerDependentProjectSettings ++ Seq(
- name := "scalap",
- exportJars := true
- )
- lazy val scalap = Project("scalap", file(".")) settings(scalapSettings:_*)
-
- // --------------------------------------------------------------
- // Continuations plugin + library
- // --------------------------------------------------------------
- lazy val continuationsPluginSettings = compilerDependentProjectSettings ++ Seq(
- scalaSource in Compile <<= baseDirectory(_ / "src/continuations/plugin/"),
- resourceDirectory in Compile <<= baseDirectory(_ / "src/continuations/plugin/"),
- exportJars := true,
- name := "continuations" // Note: This artifact is directly exported.
-
- )
- lazy val continuationsPlugin = Project("continuations-plugin", file(".")) settings(continuationsPluginSettings:_*)
- lazy val continuationsLibrarySettings = dependentProjectSettings ++ Seq(
- scalaSource in Compile <<= baseDirectory(_ / "src/continuations/library/"),
- scalacOptions in Compile <++= (exportedProducts in Compile in continuationsPlugin) map {
- case Seq(cpDir) => Seq("-Xplugin-require:continuations", "-P:continuations:enable", "-Xplugin:"+cpDir.data.getAbsolutePath)
- }
- )
- lazy val continuationsLibrary = Project("continuations-library", file(".")) settings(continuationsLibrarySettings:_*)
-
- // TODO - OSGi Manifest
-
- // --------------------------------------------------------------
- // Real Library Artifact
- // --------------------------------------------------------------
- val allSubpathsCopy = (dir: File) => (dir.*** --- dir) x (relativeTo(dir)|flat)
- def productTaskToMapping(products : Seq[File]) = products flatMap { p => allSubpathsCopy(p) }
- lazy val packageScalaLibBinTask = Seq(quickLib, continuationsLibrary, forkjoin).map(p => products in p in Compile).join.map(_.flatten).map(productTaskToMapping)
- lazy val scalaLibArtifactSettings: Seq[Setting[_]] = inConfig(Compile)(Defaults.packageTasks(packageBin, packageScalaLibBinTask)) ++ Seq(
- name := "scala-library",
- crossPaths := false,
- exportJars := true,
- autoScalaLibrary := false,
- unmanagedJars in Compile := Seq(),
- packageDoc in Compile <<= (packageDoc in documentation in Compile).identity,
- packageSrc in Compile <<= (packageSrc in documentation in Compile).identity,
- fullClasspath in Runtime <<= (exportedProducts in Compile).identity,
- quickScalaInstance,
- target <<= (baseDirectory, name) apply (_ / "target" / _)
- )
- lazy val scalaLibrary = Project("scala-library", file(".")) settings(publishSettings:_*) settings(scalaLibArtifactSettings:_*)
-
- // --------------------------------------------------------------
- // Real Reflect Artifact
- // --------------------------------------------------------------
-
- lazy val packageScalaReflect = Seq(quickReflect).map(p => products in p in Compile).join.map(_.flatten).map(productTaskToMapping)
- lazy val scalaReflectArtifactSettings : Seq[Setting[_]] = inConfig(Compile)(Defaults.packageTasks(packageBin, packageScalaReflect)) ++ Seq(
- name := "scala-reflect",
- crossPaths := false,
- exportJars := true,
- autoScalaLibrary := false,
- unmanagedJars in Compile := Seq(),
- fullClasspath in Runtime <<= (exportedProducts in Compile).identity,
- quickScalaInstance,
- target <<= (baseDirectory, name) apply (_ / "target" / _)
- )
- lazy val scalaReflect = Project("scala-reflect", file(".")) settings(publishSettings:_*) settings(scalaReflectArtifactSettings:_*) dependsOn(scalaLibrary)
-
-
- // --------------------------------------------------------------
- // Real Compiler Artifact
- // --------------------------------------------------------------
- lazy val packageScalaBinTask = Seq(quickComp, asm).map(p => products in p in Compile).join.map(_.flatten).map(productTaskToMapping)
- lazy val scalaBinArtifactSettings : Seq[Setting[_]] = inConfig(Compile)(Defaults.packageTasks(packageBin, packageScalaBinTask)) ++ Seq(
- name := "scala-compiler",
- crossPaths := false,
- exportJars := true,
- autoScalaLibrary := false,
- unmanagedJars in Compile := Seq(),
- fullClasspath in Runtime <<= (exportedProducts in Compile).identity,
- quickScalaInstance,
- target <<= (baseDirectory, name) apply (_ / "target" / _)
- )
- lazy val scalaCompiler = Project("scala-compiler", file(".")) settings(publishSettings:_*) settings(scalaBinArtifactSettings:_*) dependsOn(scalaReflect)
- lazy val fullQuickScalaReference = makeScalaReference("pack", scalaLibrary, scalaReflect, scalaCompiler)
-
-
- // --------------------------------------------------------------
- // Generating Documentation.
- // --------------------------------------------------------------
-
- // TODO - Migrate this into the dist project.
- // Scaladocs
- lazy val documentationSettings: Seq[Setting[_]] = dependentProjectSettings ++ Seq(
- // TODO - Make these work for realz.
- defaultExcludes in unmanagedSources in Compile := ((".*" - ".") || HiddenFileFilter ||
- "reflect/Print.scala" ||
- "reflect/Symbol.scala" ||
- "reflect/Tree.scala" ||
- "reflect/Type.scala" ||
- "runtime/*$.scala" ||
- "runtime/ScalaRuntime.scala" ||
- "runtime/StringAdd.scala" ||
- "scala/swing/test/*"),
- sourceFilter in Compile := ("*.scala"),
- unmanagedSourceDirectories in Compile <<= baseDirectory apply { dir =>
- Seq(dir / "src" / "library" / "scala", dir / "src" / "actors", dir / "src" / "swing", dir / "src" / "continuations" / "library")
- },
- compile := inc.Analysis.Empty,
- // scaladocOptions in Compile <++= (baseDirectory) map (bd =>
- // Seq("-sourcepath", (bd / "src" / "library").getAbsolutePath,
- // "-doc-no-compile", (bd / "src" / "library-aux").getAbsolutePath,
- // "-doc-source-url", """https://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/€{FILE_PATH}.scala#L1""",
- // "-doc-root-content", (bd / "compiler/scala/tools/nsc/doc/html/resource/lib/rootdoc.txt").getAbsolutePath
- // )),
- classpathOptions in Compile := ClasspathOptions.manual
- )
- lazy val documentation = (
- Project("documentation", file("."))
- settings (documentationSettings: _*)
- dependsOn(quickLib, quickComp, actors, forkjoin, swing, continuationsLibrary)
- )
-}