summaryrefslogtreecommitdiff
path: root/build.sbt
diff options
context:
space:
mode:
authorGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2015-03-10 15:20:20 -0700
committerAdriaan Moors <adriaan.moors@typesafe.com>2015-04-17 11:49:12 -0700
commit9ce6a9d07c84c7436a50549603e7a8908841e22d (patch)
tree5b5352bc65975f5730d9947ec2e03f1d0fdad519 /build.sbt
parente29646b0e7d3c25a73748d7d64223ebd5188db4a (diff)
downloadscala-9ce6a9d07c84c7436a50549603e7a8908841e22d.tar.gz
scala-9ce6a9d07c84c7436a50549603e7a8908841e22d.tar.bz2
scala-9ce6a9d07c84c7436a50549603e7a8908841e22d.zip
Generate shell scripts.
Shell scripts are generated with `mkBin` sbt task that calls ScalaTool. ScalaTool is defined in project/ and is a port of Ant task that lives in scala.tools.ant.ScalaTool. While porting, we've simplified the code significantly. The `mkBin` task is defined in a new subproject: dist. This subproject will become responsible for building the distribution in the future.
Diffstat (limited to 'build.sbt')
-rw-r--r--build.sbt40
1 files changed, 40 insertions, 0 deletions
diff --git a/build.sbt b/build.sbt
index d883aac057..e74d8c2f1d 100644
--- a/build.sbt
+++ b/build.sbt
@@ -214,6 +214,10 @@ lazy val root = (project in file(".")).
|the Ant build definition for now. Check README.md for more information.""".stripMargin
)
+lazy val dist = (project in file("dist")).settings(
+ mkBin := mkBinImpl.value
+)
+
/**
* Configures passed project as a subproject (e.g. compiler or repl)
* with common settings attached to it.
@@ -255,6 +259,7 @@ def configureAsForkOfJavaProject(project: Project): Project = {
lazy val buildDirectory = settingKey[File]("The directory where all build products go. By default ./build")
lazy val copyrightString = settingKey[String]("Copyright string.")
lazy val generateVersionPropertiesFile = taskKey[File]("Generating version properties file.")
+lazy val mkBin = taskKey[Seq[File]]("Generate shell script (bash or Windows batch).")
lazy val generateVersionPropertiesFileImpl: Def.Initialize[Task[File]] = Def.task {
val propFile = (resourceManaged in Compile).value / s"${thisProject.value.id}.properties"
@@ -303,4 +308,39 @@ lazy val generateVersionPropertiesFileImpl: Def.Initialize[Task[File]] = Def.tas
propFile
}
+lazy val mkBinImpl: Def.Initialize[Task[Seq[File]]] = Def.task {
+ def mkScalaTool(mainCls: String, classpath: Seq[Attributed[File]]): ScalaTool =
+ ScalaTool(mainClass = mainCls,
+ classpath = classpath.toList.map(_.data.getAbsolutePath),
+ properties = Map.empty,
+ javaOpts = "-Xmx256M -Xms32M",
+ toolFlags = "")
+ val rootDir = (classDirectory in Compile in compiler).value
+ def writeScripts(scalaTool: ScalaTool, file: String, outDir: File): Seq[File] =
+ Seq(
+ scalaTool.writeScript(file, "unix", rootDir, outDir),
+ scalaTool.writeScript(file, "windows", rootDir, outDir)
+ )
+ def mkQuickBin(file: String, mainCls: String, classpath: Seq[Attributed[File]]): Seq[File] = {
+ val scalaTool = mkScalaTool(mainCls, classpath)
+ val outDir = buildDirectory.value / "quick/bin"
+ writeScripts(scalaTool, file, outDir)
+ }
+
+ def mkPackBin(file: String, mainCls: String): Seq[File] = {
+ val scalaTool = mkScalaTool(mainCls, classpath = Nil)
+ val outDir = buildDirectory.value / "pack/bin"
+ writeScripts(scalaTool, file, outDir)
+ }
+
+ def mkBin(file: String, mainCls: String, classpath: Seq[Attributed[File]]): Seq[File] =
+ mkQuickBin(file, mainCls, classpath) ++ mkPackBin(file, mainCls)
+
+ mkBin("scala" , "scala.tools.nsc.MainGenericRunner", (fullClasspath in Compile in repl).value) ++
+ mkBin("scalac" , "scala.tools.nsc.Main", (fullClasspath in Compile in compiler).value) ++
+ mkBin("fsc" , "scala.tools.nsc.CompileClient", (fullClasspath in Compile in compiler).value) ++
+ mkBin("scaladoc" , "scala.tools.nsc.ScalaDoc", (fullClasspath in Compile in scaladoc).value) ++
+ mkBin("scalap" , "scala.tools.scalap.Main", (fullClasspath in Compile in scalap).value)
+}
+
buildDirectory in ThisBuild := (baseDirectory in ThisBuild).value / "build-sbt"