forked from databricks/sjsonnet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.sc
139 lines (128 loc) · 4.73 KB
/
build.sc
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
import mill._, scalalib._, publish._, scalajslib.ScalaJSModule
val sjsonnetVersion = "0.1.6"
object sjsonnet extends Cross[SjsonnetModule]("2.12.8", "2.13.0")
class SjsonnetModule(val crossScalaVersion: String) extends Module {
def millSourcePath = super.millSourcePath / ammonite.ops.up
trait SjsonnetCrossModule extends CrossScalaModule with PublishModule{
def artifactName = "sjsonnet"
def platformSegment: String
def sources = T.sources(
millSourcePath / "src",
millSourcePath / s"src-$platformSegment"
)
def crossScalaVersion = SjsonnetModule.this.crossScalaVersion
def ivyDeps = Agg(
ivy"com.lihaoyi::fastparse::2.1.3",
ivy"com.lihaoyi::pprint::0.5.5",
ivy"com.lihaoyi::ujson::0.7.5",
ivy"com.lihaoyi::scalatags::0.7.0",
ivy"com.github.scopt::scopt::3.7.1",
ivy"org.scala-lang.modules::scala-collection-compat::2.0.0"
)
def publishVersion = sjsonnetVersion
def generatedSources = T{
os.write(
T.ctx().dest / "Version.scala",
s"""package sjsonnet
|object Version{
| val version = ${pprint.Util.literalize(sjsonnetVersion)}
|}
|""".stripMargin
)
Seq(PathRef(T.ctx().dest / "Version.scala"))
}
def pomSettings = PomSettings(
description = artifactName(),
organization = "com.lihaoyi",
url = "https://github.com/lihaoyi/sjsonnet",
licenses = Seq(License.MIT),
versionControl = VersionControl.github("lihaoyi", "sjsonnet"),
developers = Seq(
Developer("lihaoyi", "Li Haoyi","https://github.com/lihaoyi")
)
)
trait CrossTests extends ScalaModule with TestModule {
def platformSegment = SjsonnetCrossModule.this.platformSegment
def ivyDeps = Agg(ivy"com.lihaoyi::utest::0.7.1")
def testFrameworks = Seq("utest.runner.Framework")
def sources = T.sources(
millSourcePath / "src",
millSourcePath / s"src-$platformSegment"
)
}
}
object js extends SjsonnetCrossModule with ScalaJSModule{
def scalaJSVersion = "0.6.28"
def platformSegment = "js"
object test extends Tests with CrossTests
}
object jvm extends SjsonnetCrossModule {
def mainClass = Some("sjsonnet.SjsonnetMain")
def platformSegment = "jvm"
def ivyDeps = super.ivyDeps() ++ Agg(
ivy"com.lihaoyi::os-lib:0.3.0",
)
def compileIvyDeps = Agg( ivy"com.lihaoyi::acyclic:0.2.0")
def scalacOptions = Seq("-P:acyclic:force")
def scalacPluginIvyDeps = Agg( ivy"com.lihaoyi::acyclic:0.2.0")
object test extends Tests with CrossTests{
def compileIvyDeps = Agg( ivy"com.lihaoyi::acyclic:0.2.0")
def scalacOptions = Seq("-P:acyclic:force")
def scalacPluginIvyDeps = Agg( ivy"com.lihaoyi::acyclic:0.2.0")
def forkOptions = Seq("-Xss100m")
}
}
object client extends JavaModule {
def ivyDeps = Agg(
ivy"org.scala-sbt.ipcsocket:ipcsocket:1.0.0".exclude(
"net.java.dev.jna" -> "jna",
"net.java.dev.jna" -> "jna-platform"
)
)
object test extends Tests{
def testFrameworks = Seq("com.novocode.junit.JUnitFramework")
def ivyDeps = Agg(ivy"com.novocode:junit-interface:0.11")
}
}
object server extends ScalaModule{
def scalaVersion = crossScalaVersion
def moduleDeps = Seq(SjsonnetModule.this.jvm, client)
def ivyDeps = Agg(
ivy"org.scala-sbt.ipcsocket:ipcsocket:1.0.0".exclude(
"net.java.dev.jna" -> "jna",
"net.java.dev.jna" -> "jna-platform"
),
ivy"net.java.dev.jna:jna:4.5.0",
ivy"net.java.dev.jna:jna-platform:4.5.0"
)
override def prependShellScript = mill.modules.Jvm.universalScript(
shellCommands = {
def java(mainClass: String) =
s"""exec java -DSJSONNET_EXECUTABLE=$$0 -DSJSONNET_VERSION=$sjsonnetVersion $$JAVA_OPTS -cp $$0 $mainClass "$$@""""
s"""case "$$1" in
| -i | --interactive )
| ${java("sjsonnet.SjsonnetMain")}
| ;;
| *)
| ${java("sjsonnet.client.SjsonnetClientMain")}
| ;;
|esac""".stripMargin
},
cmdCommands = {
def java(mainClass: String) =
s"""java -DSJSONNET_EXECUTABLE=%~dpnx0 -DSJSONNET_VERSION=$sjsonnetVersion %JAVA_OPTS% -cp %~dpnx0 $mainClass %*"""
s"""if "%1" == "-i" set _I_=true
|if "%1" == "--interactive" set _I_=true
|if defined _I_ (
| ${java("sjsonnet.SjsonnetMain")}
|) else (
| ${java("sjsonnet.client.SjsonnetClientMain")}
|)""".stripMargin
}
)
object test extends Tests{
def testFrameworks = Seq("com.novocode.junit.JUnitFramework")
def ivyDeps = Agg(ivy"com.novocode:junit-interface:0.11")
}
}
}