-
Notifications
You must be signed in to change notification settings - Fork 26
/
Sxr.scala
32 lines (29 loc) · 1.18 KB
/
Sxr.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import sbt._
import Keys._
import Scope.ThisScope
object Sxr
{
val sxrConf = config("sxr") hide
val sxr = TaskKey[File]("sxr")
val sourceDirectories = TaskKey[Seq[File]]("sxr-source-directories")
lazy val settings: Seq[Setting[_]] = inTask(sxr)(inSxrSettings) ++ baseSettings
def baseSettings = Seq(
libraryDependencies += "org.scala-tools.sxr" % "sxr_2.9.0" % "0.2.7" % sxrConf.name
)
def inSxrSettings = Seq(
managedClasspath <<= update map { _.matching( configurationFilter(sxrConf.name) ).classpath },
scalacOptions <+= sourceDirectories map { "-P:sxr:base-directory:" + _.absString },
scalacOptions <+= managedClasspath map { "-Xplugin:" + _.files.absString },
scaladocOptions <<= scalacOptions,
target <<= target in taskGlobal apply { _ / "browse" },
sxr in taskGlobal <<= sxrTask
)
def taskGlobal = ThisScope.copy(task = Global)
def sxrTask = (sources, target, scalacOptions, classpathOptions, scalaInstance, fullClasspath in sxr, streams) map { (srcs, out, opts, cpOpts, si, cp, s) =>
IO.delete(out)
IO.createDirectory(out)
val comp = new compiler.RawCompiler(si, cpOpts, s.log)
comp(srcs, cp.files, out, opts)
out.getParentFile / (out.getName + ".sxr")
}
}