This repository has been archived by the owner on Mar 28, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbuild.sbt
176 lines (153 loc) · 5.99 KB
/
build.sbt
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
name := "little-spec"
organization := "org.qirx"
scalaVersion := "2.11.1"
crossScalaVersions in ThisBuild := Seq("2.10.4", "2.11.1")
PublishSettings.rootProjectSettings
ReleaseSettings.rootProjectSettings
lazy val `little-spec` = project
.in( file(".") )
.settings(
clean <<= clean.dependsOn(
clean in `little-spec-macros`,
clean in `little-spec-sbt`,
clean in `little-spec-scalajs`,
clean in `little-spec-extra-documentation`
)
)
.aggregate(`little-spec-sbt`, `little-spec-scalajs`, `little-spec-extra-documentation`)
lazy val librarySettings =
onlyScalaSources ++
Seq(
name := "little-spec",
organization := "org.qirx",
core(Compile, "main"),
core(Test, "test"),
resolvers += Classpaths.typesafeReleases
) ++
scriptedSettings ++
Seq(
scriptedLaunchOpts ++= Seq(
"-Dlibrary.version=" + version.value,
"-Dscala.version=" + scalaVersion.value
)
) ++
macrosOutputAsResource ++
macrosAsDependency ++
PublishSettings.librarySettings
lazy val `little-spec-sbt` = project
.in( file("sbt") )
.settings(
librarySettings ++ buildInfoSettings ++ compileTestClassSettings:_*)
.settings(
libraryDependencies += "org.scala-sbt" % "test-interface" % "1.0",
testFrameworks += new TestFramework("org.qirx.littlespec.sbt.TestFramework"),
testOptions += Tests.Argument("reporter", "org.qirx.littlespec.reporter.MarkdownReporter"),
testOptions += Tests.Argument("documentationTarget",
((baseDirectory in ThisBuild).value / "documentation").getAbsolutePath))
.settings(
sourceGenerators in Test <+= buildInfo,
buildInfoKeys := Seq[BuildInfoKey](
BuildInfoKey.map(baseDirectory) {
case (_, value) => "testClasses" -> value / "testClasses"
}
),
buildInfoPackage := "org.qirx.littlespec"
)
.settings(internalDependencyClasspath in Test ++= (internalDependencyClasspath in LateInitialization).value)
lazy val `little-spec-scalajs` = project
.in( file("scalajs") )
.settings(
librarySettings ++ scalaJSSettings:_*)
.settings(
// make sure the scalajs files from resourceGenerators (macros) are included
includeFilter in resourceGenerators in Compile := {
import scala.scalajs.tools.jsdep.JSDependencyManifest.ManifestFileName
val includedFiles = (includeFilter in resourceGenerators in Compile).value
includedFiles || ManifestFileName || "*.sjsir" || "*.js"
})
.settings(
libraryDependencies += "org.scala-lang.modules.scalajs" %% "scalajs-test-bridge" % scalaJSVersion,
ScalaJSKeys.scalaJSTestFramework in Test := "org.qirx.littlespec.scalajs.TestFramework"
)
// separate project to help with IDE support
lazy val `little-spec-macros` = project
.in( file("macros") )
.settings(onlyScalaSources ++ macroSettings ++ scalaJSSettings:_*)
.settings(publishArtifact := false)
def extraLibrarySettings(libraryName:String) =
onlyScalaSources ++
Seq(
name := libraryName,
organization := "org.qirx",
resolvers += Classpaths.typesafeReleases
) ++
scriptedSettings ++
Seq(
scriptedLaunchOpts ++= Seq(
"-Dlibrary.version=" + version.value,
"-Dscala.version=" + scalaVersion.value
)
) ++
PublishSettings.librarySettings
lazy val `little-spec-extra-documentation` = project
.in( file("extra/documentation") )
.settings(extraLibrarySettings("little-spec-extra-documentation"):_*)
.dependsOn(`little-spec-sbt`)
lazy val LateInitialization = config("lateInitialization")
internalDependencyClasspath in LateInitialization in `little-spec-sbt` := Seq(
Attributed.blank(
(classDirectory in Compile in `little-spec-extra-documentation`)
.map(identity) // convert the setting into a task
.dependsOn(compile in Compile in `little-spec-extra-documentation`)
.value
)
)
lazy val macroSettings =
Seq(
libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value,
libraryDependencies ++= {
if (scalaVersion.value startsWith "2.11.") Seq.empty
else Seq(
compilerPlugin("org.scalamacros" % "paradise" % "2.0.0" cross CrossVersion.full),
"org.scalamacros" %% "quasiquotes" % "2.0.0" cross CrossVersion.binary
)
}
)
def core(configuration:Configuration, config:String) =
unmanagedSourceDirectories in configuration +=
(baseDirectory in ThisBuild).value / "core" / "src" / config / "scala"
lazy val onlyScalaSources = Seq(
unmanagedSourceDirectories in Compile := Seq((scalaSource in Compile).value),
unmanagedSourceDirectories in Test := Seq((scalaSource in Test).value)
)
lazy val CompileTestClasses = config("compileTestClasses").extend(Compile)
lazy val compileTestClassSettings =
inConfig(CompileTestClasses)(Defaults.configSettings) ++
Seq(
unmanagedSourceDirectories in CompileTestClasses := Seq(baseDirectory.value / "testClasses"),
classDirectory in CompileTestClasses := baseDirectory.value / "testClasses",
internalDependencyClasspath in CompileTestClasses ++= (fullClasspath in Compile).value,
// compile test classes before running tests
test in Test <<= (test in Test).dependsOn(compile in CompileTestClasses)
)
lazy val macrosAsDependency =
macroSettings ++
Seq(
internalDependencyClasspath in Compile += macrosCompiledClassDirectory.value,
internalDependencyClasspath in Test += macrosCompiledClassDirectory.value
)
lazy val macrosOutputAsResource = Seq(
includeFilter in resourceGenerators in Compile := "*.class",
resourceGenerators in Compile += Def.task {
val dir = macrosCompiledClassDirectory.value
val includedFiles = (includeFilter in resourceGenerators in Compile).value
val files = (dir ** includedFiles).get
files
}.taskValue,
managedResourceDirectories in Compile += macrosClassDirectory.value
)
lazy val macrosClassDirectory = classDirectory in Compile in `little-spec-macros`
lazy val macrosCompiledClassDirectory =
macrosClassDirectory
.map(identity) // convert the setting into a task
.dependsOn(compile in Compile in `little-spec-macros`)