80 lines
3.9 KiB
Scala
80 lines
3.9 KiB
Scala
package akka
|
|
|
|
import sbt._
|
|
import sbt.Keys._
|
|
import sbt.Project.Initialize
|
|
|
|
object Unidoc {
|
|
|
|
lazy val JavaDoc = config("genjavadoc") extend Compile
|
|
|
|
lazy val GenJavaDocEnabled = Option(sys.props("akka.genjavadoc.enabled")) filter (_.toLowerCase == "true") map (_ => true) getOrElse false
|
|
|
|
lazy val javadocSettings =
|
|
inConfig(JavaDoc)(Defaults.configSettings) ++ Seq(
|
|
packageDoc in Compile <<= packageDoc in JavaDoc,
|
|
sources in JavaDoc <<= (target, compile in Compile, sources in Compile) map ((t, c, s) =>
|
|
if (GenJavaDocEnabled) (t / "java" ** "*.java").get ++ s.filter(_.getName.endsWith(".java"))
|
|
else throw new RuntimeException("cannot build java docs without -Dakka.genjavadoc.enabled=true")
|
|
),
|
|
javacOptions in JavaDoc := Seq(),
|
|
artifactName in packageDoc in JavaDoc := ((sv, mod, art) => "" + mod.name + "_" + sv.binary + "-" + mod.revision + "-javadoc.jar")
|
|
) ++ (if (GenJavaDocEnabled) Seq(
|
|
libraryDependencies += Dependencies.Compile.genjavadoc,
|
|
scalacOptions <+= target map (t => "-P:genjavadoc:out=" + (t / "java"))
|
|
) else Nil)
|
|
|
|
val unidocDirectory = SettingKey[File]("unidoc-directory")
|
|
val unidocExclude = SettingKey[Seq[String]]("unidoc-exclude")
|
|
val unidocAllSources = TaskKey[Seq[Seq[File]]]("unidoc-all-sources")
|
|
val unidocSources = TaskKey[Seq[File]]("unidoc-sources")
|
|
val unidocAllClasspaths = TaskKey[Seq[Classpath]]("unidoc-all-classpaths")
|
|
val unidocClasspath = TaskKey[Seq[File]]("unidoc-classpath")
|
|
val unidoc = TaskKey[(File, File)]("unidoc", "Create unified scaladoc and javadoc for all aggregates")
|
|
val sunidoc = TaskKey[File]("sunidoc", "Create unified scaladoc for all aggregates")
|
|
val junidoc = TaskKey[File]("junidoc", "Create unified javadoc for all aggregates")
|
|
val junidocAllSources = TaskKey[Seq[Seq[File]]]("junidoc-all-sources")
|
|
val junidocSources = TaskKey[Seq[File]]("junidoc-sources")
|
|
|
|
lazy val settings = Seq(
|
|
unidocDirectory <<= crossTarget / "unidoc",
|
|
unidocExclude := Seq.empty,
|
|
unidocAllSources <<= (thisProjectRef, buildStructure, unidocExclude) flatMap allSources(Compile),
|
|
unidocSources <<= unidocAllSources map { _.flatten },
|
|
unidocAllClasspaths <<= (thisProjectRef, buildStructure, unidocExclude) flatMap allClasspaths,
|
|
unidocClasspath <<= unidocAllClasspaths map { _.flatten.map(_.data).distinct },
|
|
junidocAllSources <<= (thisProjectRef, buildStructure, unidocExclude) flatMap allSources(JavaDoc),
|
|
junidocSources <<= junidocAllSources map { _.flatten },
|
|
sunidoc <<= sunidocTask,
|
|
junidoc <<= (doc in JavaDoc),
|
|
unidoc <<= (sunidoc, junidoc) map ((s, t) ⇒ (s, t))
|
|
)
|
|
|
|
def allSources(conf: Configuration)(projectRef: ProjectRef, structure: Load.BuildStructure, exclude: Seq[String]): Task[Seq[Seq[File]]] = {
|
|
val projects = aggregated(projectRef, structure, exclude)
|
|
projects flatMap { sources in conf in LocalProject(_) get structure.data } join
|
|
}
|
|
|
|
def allClasspaths(projectRef: ProjectRef, structure: Load.BuildStructure, exclude: Seq[String]): Task[Seq[Classpath]] = {
|
|
val projects = aggregated(projectRef, structure, exclude)
|
|
projects flatMap { dependencyClasspath in Compile in LocalProject(_) get structure.data } join
|
|
}
|
|
|
|
def aggregated(projectRef: ProjectRef, structure: Load.BuildStructure, exclude: Seq[String]): Seq[String] = {
|
|
val aggregate = Project.getProject(projectRef, structure).toSeq.flatMap(_.aggregate)
|
|
aggregate flatMap { ref =>
|
|
if (exclude contains ref.project) Seq.empty
|
|
else ref.project +: aggregated(ref, structure, exclude)
|
|
}
|
|
}
|
|
|
|
def sunidocTask: Initialize[Task[File]] = {
|
|
(compilers, cacheDirectory, unidocSources, unidocClasspath, unidocDirectory, scalacOptions in doc, streams) map {
|
|
(compilers, cache, sources, classpath, target, options, s) => {
|
|
val scaladoc = new Scaladoc(100, compilers.scalac)
|
|
scaladoc.cached(cache / "unidoc", "main", sources, classpath, target, options, s.log)
|
|
target
|
|
}
|
|
}
|
|
}
|
|
}
|