--- a/build.sc Sat Dec 26 21:46:29 2020 +0100
+++ b/build.sc Sun Dec 27 22:54:33 2020 +0100
@@ -8,6 +8,7 @@
* ./mill mill.scalalib.GenIdea/idea
*
*/
+import ammonite.ops
import mill._
import mill.api.Loose
import mill.define.{Command, Input, Sources, Target}
@@ -28,8 +29,24 @@
object D {
val scalatags211 = ivy"com.lihaoyi::scalatags::0.6.8"
val scalatags = ivy"com.lihaoyi::scalatags::${V.scalatags}"
+ val scalatex = ivy"org.openmole::scalatex-api:0.4.6"
+ val oslib = ivy"com.lihaoyi::os-lib::0.7.1"
}
+val compilerOptions = Seq(
+ "-deprecation", // Emit warning and location for usages of deprecated APIs.
+ "-encoding", "utf-8", // Specify character encoding used by source files.
+ "-explaintypes", // Explain type errors in more detail.
+ "-feature", // Emit warning and location for usages of features that should be imported explicitly.
+ "-language:higherKinds", // Allow higher-kinded types
+ "-language:implicitConversions", // Allow definition of implicit functions called views
+ "-language:reflectiveCalls",
+ "-language:postfixOps",
+ "-unchecked", // Enable additional warnings where generated code depends on assumptions.
+ "-Xcheckinit", // Wrap field accessors to throw an exception on uninitialized access.
+ "-target:jvm-1.8"
+ )
+
trait Common extends CrossSbtModule with PublishModule {
def pomSettings: T[PomSettings] = PomSettings(
@@ -46,19 +63,7 @@
override def artifactName = "purecss"
- override def scalacOptions = T{Seq(
- "-deprecation", // Emit warning and location for usages of deprecated APIs.
- "-encoding", "utf-8", // Specify character encoding used by source files.
- "-explaintypes", // Explain type errors in more detail.
- "-feature", // Emit warning and location for usages of features that should be imported explicitly.
- "-language:higherKinds", // Allow higher-kinded types
- "-language:implicitConversions", // Allow definition of implicit functions called views
- "-language:reflectiveCalls",
- "-language:postfixOps",
- "-unchecked", // Enable additional warnings where generated code depends on assumptions.
- "-Xcheckinit", // Wrap field accessors to throw an exception on uninitialized access.
- "-target:jvm-1.8"
- )}
+ override def scalacOptions = T{compilerOptions}
def hgId: Input[String] = T.input {
os.proc("hg", "id", "-i").call().out.text.trim
@@ -106,6 +111,35 @@
V.scala213 -> V.scalaJs
)
+object extras extends Module {
+
+ val name = "pure-extras"
+
+ class JvmModule(val crossScalaVersion: String) extends Common {
+ override def artifactName = name
+ }
+
+ class JsModule(val crossScalaVersion: String, crossJSVersion: String)
+ extends ScalaJSModule with Common {
+
+ override def scalaJSVersion: Target[String] = crossJSVersion
+
+ override def millSourcePath = super.millSourcePath / os.up
+
+ override def artifactName = name
+ }
+
+ object jvm extends Cross[JvmModule](V.scala211, V.scala212, V.scala213)
+ object js extends Cross[JsModule](
+ V.scala211 -> V.scalaJs06,
+ V.scala212 -> V.scalaJs06,
+ V.scala212 -> V.scalaJs,
+ V.scala213 -> V.scalaJs06,
+ V.scala213 -> V.scalaJs
+ )
+
+}
+
def compileAll(): Command[Unit] = T.command{
jvm(V.scala213).compile()
js(V.scala213, V.scalaJs).compile()
@@ -115,6 +149,14 @@
js(V.scala212, V.scalaJs06).compile()
jvm(V.scala211).compile()
js(V.scala211, V.scalaJs06).compile()
+ extras.jvm(V.scala213).compile()
+ extras.js(V.scala213, V.scalaJs).compile()
+ extras.js(V.scala213, V.scalaJs06).compile()
+ extras.jvm(V.scala212).compile()
+ extras.js(V.scala212, V.scalaJs).compile()
+ extras.js(V.scala212, V.scalaJs06).compile()
+ extras.jvm(V.scala211).compile()
+ extras.js(V.scala211, V.scalaJs06).compile()
()
}
@@ -127,6 +169,14 @@
js(V.scala212, V.scalaJs06).publishLocal()()
jvm(V.scala211).publishLocal()()
js(V.scala211, V.scalaJs06).publishLocal()()
+ extras.jvm(V.scala213).publishLocal()()
+ extras.js(V.scala213, V.scalaJs).publishLocal()()
+ extras.js(V.scala213, V.scalaJs06).publishLocal()()
+ extras.jvm(V.scala212).publishLocal()()
+ extras.js(V.scala212, V.scalaJs).publishLocal()()
+ extras.js(V.scala212, V.scalaJs06).publishLocal()()
+ extras.jvm(V.scala211).publishLocal()()
+ extras.js(V.scala211, V.scalaJs06).publishLocal()()
}
def publishM2Local(p: os.Path): Command[Unit] = T.command{
@@ -138,28 +188,77 @@
js(V.scala212, V.scalaJs06).publishM2Local(p.toString)()
jvm(V.scala211).publishM2Local(p.toString)()
js(V.scala211, V.scalaJs06).publishM2Local(p.toString)()
+ extras.jvm(V.scala213).publishM2Local(p.toString)()
+ extras.js(V.scala213, V.scalaJs).publishM2Local(p.toString)()
+ extras.js(V.scala213, V.scalaJs06).publishM2Local(p.toString)()
+ extras.jvm(V.scala212).publishM2Local(p.toString)()
+ extras.js(V.scala212, V.scalaJs).publishM2Local(p.toString)()
+ extras.js(V.scala212, V.scalaJs06).publishM2Local(p.toString)()
+ extras.jvm(V.scala211).publishM2Local(p.toString)()
+ extras.js(V.scala211, V.scalaJs06).publishM2Local(p.toString)()
()
}
-object extras extends Module {
+object example extends ScalaModule {
+ override def scalaVersion: T[String] = V.scala213
+
+ override def scalacOptions = T{compilerOptions}
+
+ override def moduleDeps = Seq(jvm(V.scala213), extras.jvm(V.scala213))
+
+ override def ivyDeps = Agg(D.scalatex, D.oslib)
- class JvmModule(val crossScalaVersion: String) extends Common
- class JsModule(val crossScalaVersion: String, crossJSVersion: String)
- extends ScalaJSModule with Common {
+ override def generatedSources: Target[Seq[PathRef]] = T{
+ val dir = T.ctx().dest
+ val src = sources() map(_.path)
+ val ids = src flatMap(ops.ls! _ filter(_.ext == "scalatex") map { p =>
+ val id = p.last replaceAllLiterally (".scalatex", "")
+ os.write(dir / s"$id.scala",
+ s"""
+ | package example
+ | import scalatags.Text.all._
+ | import scalatex._
+ | import purecss.Extras
+ | import purecss.text.PureCss._
+ | object `$id` {
+ | val id = "$id"
+ | val content = twf("${p.toString}")
+ | }
+ |
+ |/*
+ |${os.read(p)}
+ |*/
+ """.stripMargin)
+ id
+ })
- override def scalaJSVersion: Target[String] = crossJSVersion
+ os.write(dir / "initializer.scala",
+ s"""
+ | package example
+ | trait ContentInitializer {
+ | Seq(${ids mkString("`", "`, `", "`")})
+ | }
+ """.stripMargin)
- override def millSourcePath = super.millSourcePath / os.up
+ os.write(dir / "main.scala",
+ s"""
+ | package example
+ | import os.Path
+ | object A extends ExampleApp with App {
+ | override def export: Path = Path("${exportDir().path}")
+ | }
+ """.stripMargin)
+
+ Seq(PathRef(dir))
}
- object jvm extends Cross[JvmModule](V.scala211, V.scala212, V.scala213)
- object js extends Cross[JsModule](
- V.scala211 -> V.scalaJs06,
- V.scala212 -> V.scalaJs06,
- V.scala212 -> V.scalaJs,
- V.scala213 -> V.scalaJs06,
- V.scala213 -> V.scalaJs
- )
+ override def mainClass: T[Option[String]] = Some("example.A")
+
+ def exportDir = T{
+ val dir = T.ctx().dest
+ PathRef(dir)
+ }
}
+
// vim: et ts=2 sw=2 syn=scala