-
-
Notifications
You must be signed in to change notification settings - Fork 608
/
Build.scala
166 lines (159 loc) · 8.59 KB
/
Build.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
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
import sbt._
import Keys._
import Tests._
import com.typesafe.sbt.site.SphinxSupport.Sphinx
import com.typesafe.sbt.SbtSite.site
import com.typesafe.tools.mima.plugin.MimaPlugin.mimaDefaultSettings
import com.typesafe.tools.mima.plugin.MimaKeys.{previousArtifact, binaryIssueFilters}
import com.typesafe.tools.mima.core.{ProblemFilters, MissingClassProblem}
object SlickBuild extends Build {
/* Custom Settings */
val repoKind = SettingKey[String]("repo-kind", "Maven repository kind (\"snapshots\" or \"releases\")")
lazy val sharedSettings = Seq(
organizationName := "Typesafe",
organization := "com.typesafe.slick",
resolvers += Resolver.sonatypeRepo("snapshots"),
scalacOptions ++= List("-deprecation", "-feature"),
libraryDependencies += "org.slf4j" % "slf4j-api" % "1.6.4",
libraryDependencies <+= scalaVersion("org.scala-lang" % "scala-compiler" % _ % "optional"),
logBuffered := false,
repoKind <<= (version)(v => if(v.trim.endsWith("SNAPSHOT")) "snapshots" else "releases"),
//publishTo <<= (repoKind)(r => Some(Resolver.file("test", file("c:/temp/repo/"+r)))),
publishTo <<= (repoKind){
case "snapshots" => Some("snapshots" at "https://oss.sonatype.org/content/repositories/snapshots")
case "releases" => Some("releases" at "https://oss.sonatype.org/service/local/staging/deploy/maven2")
},
publishMavenStyle := true,
publishArtifact in Test := false,
pomIncludeRepository := { _ => false },
makePomConfiguration ~= { _.copy(configurations = Some(Seq(Compile, Runtime, Optional))) },
homepage := Some(url("http://slick.typesafe.com")),
startYear := Some(2008),
licenses += ("Two-clause BSD-style license", url("http://github.com/slick/slick/blob/master/LICENSE.txt")),
pomExtra :=
<developers>
<developer>
<id>szeiger</id>
<name>Stefan Zeiger</name>
<timezone>+1</timezone>
<url>http://szeiger.de</url>
</developer>
<developer>
<id>cvogt</id>
<name>Jan Christopher Vogt</name>
<timezone>+1</timezone>
<url>https://github.com/cvogt/</url>
</developer>
</developers>
<scm>
<url>git@github.com:slick/slick.git</url>
<connection>scm:git:git@github.com:slick/slick.git</connection>
</scm>,
// Work around scaladoc problem
unmanagedClasspath in Compile += Attributed.blank(new java.io.File("doesnotexist"))
)
/* Project Definitions */
lazy val aRootProject = Project(id = "root", base = file("."),
settings = Project.defaultSettings ++ sharedSettings ++ Seq(
target := file("target/root"),
sourceDirectory := file("target/root-src"),
publishArtifact := false,
test := (),
testOnly <<= inputTask { argTask => (argTask) map { args => }}
)).aggregate(slickProject, slickTestkitProject)
lazy val slickProject = Project(id = "slick", base = file("."),
settings = Project.defaultSettings ++ sharedSettings ++ fmppSettings ++ site.settings ++ site.sphinxSupport() ++ mimaDefaultSettings ++ inConfig(config("macro"))(Defaults.configSettings) ++ Seq(
name := "Slick",
description := "Scala Language-Integrated Connection Kit",
scalacOptions in doc <++= (version).map(v => Seq("-doc-title", "Slick", "-doc-version", v)),
test := (),
testOnly <<= inputTask { argTask => (argTask) map { args => }},
previousArtifact := Some("com.typesafe.slick" % "slick_2.10" % "1.0.0"),
binaryIssueFilters ++= Seq(
ProblemFilters.exclude[MissingClassProblem]("scala.slick.util.MacroSupportInterpolationImpl$"),
ProblemFilters.exclude[MissingClassProblem]("scala.slick.util.MacroSupportInterpolationImpl")
),
ivyConfigurations += config("macro").hide.extend(Compile),
libraryDependencies <+= scalaVersion("org.scala-lang" % "scala-compiler" % _ % "macro"),
unmanagedClasspath in Compile <++= fullClasspath in config("macro"),
mappings in (Compile, packageSrc) <++= mappings in (config("macro"), packageSrc),
mappings in (Compile, packageBin) <++= mappings in (config("macro"), packageBin)
))
lazy val slickTestkitProject = Project(id = "testkit", base = file("slick-testkit"),
settings = Project.defaultSettings ++ sharedSettings ++ Seq(
name := "Slick-TestKit",
description := "Test Kit for Slick (Scala Language-Integrated Connection Kit)",
scalacOptions in doc <++= (version).map(v => Seq("-doc-title", "Slick TestKit", "-doc-version", v)),
testOptions += Tests.Argument(TestFrameworks.JUnit, "-q", "-v", "-s", "-a"),
//scalacOptions in Compile += "-Yreify-copypaste",
libraryDependencies <+= scalaVersion("org.scala-lang" % "scala-compiler" % _ % "test"),
libraryDependencies ++= Seq(
// TestKit needs JUnit for its Runner
"junit" % "junit-dep" % "4.10",
// The Slick core tests need junit-interface, logback and the DB drivers
"com.novocode" % "junit-interface" % "0.10-M4" % "test",
"ch.qos.logback" % "logback-classic" % "0.9.28" % "test",
"com.h2database" % "h2" % "1.3.166" % "test",
"org.xerial" % "sqlite-jdbc" % "3.7.2" % "test",
"org.apache.derby" % "derby" % "10.9.1.0" % "test",
"org.hsqldb" % "hsqldb" % "2.2.8" % "test",
"postgresql" % "postgresql" % "9.1-901.jdbc4" % "test",
"mysql" % "mysql-connector-java" % "5.1.23" % "test",
"net.sourceforge.jtds" % "jtds" % "1.2.4" % "test"
),
// Run the Queryable tests (which need macros) on a forked JVM
// to avoid classloader problems with reification
testGrouping <<= definedTests in Test map partitionTests,
// Workaround for sbt bug: Without a testGrouping for all test configs,
// the wrong tests are run
testGrouping in DocTest <<= definedTests in DocTest map partitionTests,
parallelExecution in Test := false
)
).configs(DocTest).settings(inConfig(DocTest)(Defaults.testSettings): _*).settings(
unmanagedSourceDirectories in DocTest <+= (baseDirectory in slickProject) { _ / "src/sphinx/code" }
//resourceDirectory in DocTest <<= baseDirectory { _ / "src/test/resources" }
//test <<= Seq(test in Test, test in DocTest).dependOn,
//concurrentRestrictions += Tags.limitSum(1, Tags.Test, Tags.ForkedTestGroup),
//concurrentRestrictions in Global += Tags.limit(Tags.Test, 1),
) dependsOn(slickProject)
/* Test Configuration for running tests on doc sources */
lazy val DocTest = config("doctest") extend(Test)
/* Split tests into a group that needs to be forked and another one that can run in-process */
def partitionTests(tests: Seq[TestDefinition]) = {
val (fork, notFork) = tests partition (_.name contains ".queryable.")
Seq(
new Group("fork", fork, SubProcess(Seq())),
new Group("inProcess", notFork, InProcess)
)
}
/* FMPP Task */
lazy val fmpp = TaskKey[Seq[File]]("fmpp")
lazy val fmppConfig = config("fmpp") hide
lazy val fmppSettings = inConfig(Compile)(Seq(sourceGenerators <+= fmpp, fmpp <<= fmppTask)) ++ Seq(
libraryDependencies += "net.sourceforge.fmpp" % "fmpp" % "0.9.14" % fmppConfig.name,
ivyConfigurations += fmppConfig,
fullClasspath in fmppConfig <<= update map { _ select configurationFilter(fmppConfig.name) map Attributed.blank },
//mappings in (Compile, packageSrc) <++= // Add generated sources to sources JAR
// (sourceManaged in Compile, managedSources in Compile) map { (b, s) => s x (Path.relativeTo(b) | Path.flat) }
mappings in (Compile, packageSrc) <++=
(sourceManaged in Compile, managedSources in Compile, sourceDirectory in Compile) map { (base, srcs, srcDir) =>
val fmppSrc = srcDir / "scala"
val inFiles = fmppSrc ** "*.fm"
(srcs x (Path.relativeTo(base) | Path.flat)) ++ // Add generated sources to sources JAR
(inFiles x (Path.relativeTo(fmppSrc) | Path.flat)) // Add *.fm files to sources JAR
}
)
lazy val fmppTask =
(fullClasspath in fmppConfig, runner in fmpp, sourceManaged, streams, cacheDirectory, sourceDirectory) map { (cp, r, output, s, cache, srcDir) =>
val fmppSrc = srcDir / "scala"
val inFiles = (fmppSrc ** "*.fm" get).toSet
val cachedFun = FileFunction.cached(cache / "fmpp", outStyle = FilesInfo.exists) { (in: Set[File]) =>
IO.delete(output ** "*.scala" get)
val args = "--expert" :: "-q" :: "-S" :: fmppSrc.getPath :: "-O" :: output.getPath ::
"--replace-extensions=fm, scala" :: "-M" :: "execute(**/*.fm), ignore(**/*)" :: Nil
toError(r.run("fmpp.tools.CommandLine", cp.files, args, s.log))
(output ** "*.scala").get.toSet
}
cachedFun(inFiles).toSeq
}
}