diff -r f30a3e465836 -r fe846f058e41 build.sc --- 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