Cross-compile against Scala 2.13.4
authorTomas Zeman <tomas@functionals.cz>
Sat, 26 Dec 2020 13:44:11 +0100
changeset 37 b79a632713a2
parent 36 dfc839004878
child 38 be844ade3150
Cross-compile against Scala 2.13.4
build.sc
--- a/build.sc	Sat Dec 26 11:39:56 2020 +0100
+++ b/build.sc	Sat Dec 26 13:44:11 2020 +0100
@@ -11,7 +11,7 @@
 import ammonite.ops._
 import mill._
 import mill.api.Loose
-import mill.define.{Input, Sources, Target}
+import mill.define.{Command, Input, Sources, Target}
 import mill.scalajslib._
 import mill.scalalib._
 import mill.scalalib.publish._
@@ -23,10 +23,13 @@
   val scalaJs = "0.6.33"
   val scala211 = "2.11.12"
   val scala212 = "2.12.12"
+  val scala213 = "2.13.4"
+  val scalatags = "0.9.2"
 }
 
 object D {
-  val scalatags = ivy"com.lihaoyi::scalatags::0.6.8"
+  val scalatags211 = ivy"com.lihaoyi::scalatags::0.6.8"
+  val scalatags = ivy"com.lihaoyi::scalatags::${V.scalatags}"
 }
 
 def camelCase(s: String): String = {
@@ -39,6 +42,20 @@
   inner(s toList) mkString ""
 }
 
+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 {
 
   override def artifactName = "fatags"
@@ -57,20 +74,7 @@
     )
   )
 
-  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.
-    "-Xfuture",                          // Turn on future language features.
-    "-target:jvm-1.8"
-  )}
+  override def scalacOptions: T[Seq[String]] = T{compilerOptions}
 
   def hgId: Input[String] = T.input {
     os.proc("hg", "id", "-i").call().out.text.trim
@@ -84,7 +88,9 @@
     os.proc("hg", "id", "-t").call().out.text.trim.split(' ').headOption
   }
 
-  override def ivyDeps: Target[Loose.Agg[Dep]] = Agg(D.scalatags)
+  override def ivyDeps: Target[Loose.Agg[Dep]] = T{
+    if (scalaVersion() == V.scala211) Agg(D.scalatags211) else Agg(D.scalatags)
+  }
 
   override def sources: Sources = T.sources{
     super.sources() :+ PathRef(millSourcePath / 'shared / 'src / 'main / 'scala)
@@ -142,17 +148,31 @@
   override def scalaJSVersion: Target[String] = V.scalaJs
 }
 
-object jvm extends Cross[JvmModule](V.scala211, V.scala212)
-object js extends Cross[JsModule](V.scala211, V.scala212)
+object jvm extends Cross[JvmModule](V.scala211, V.scala212, V.scala213)
+object js extends Cross[JsModule](V.scala211, V.scala212, V.scala213)
 
-def publishLocal(): define.Command[Unit] = T.command{
+def compileAll(): Command[Unit] = T.command{
+  jvm(V.scala213).compile()
+  js(V.scala213).compile()
+  jvm(V.scala212).compile()
+  js(V.scala212).compile()
+  jvm(V.scala211).compile()
+  js(V.scala211).compile()
+  ()
+}
+
+def publishLocal(): Command[Unit] = T.command{
+  jvm(V.scala213).publishLocal()()
+  js(V.scala213).publishLocal()()
   jvm(V.scala212).publishLocal()()
   js(V.scala212).publishLocal()()
   jvm(V.scala211).publishLocal()()
   js(V.scala211).publishLocal()()
 }
 
-def publishM2Local(p: os.Path): define.Command[Unit] = T.command{
+def publishM2Local(p: os.Path): Command[Unit] = T.command{
+  jvm(V.scala213).publishM2Local(p.toString)()
+  js(V.scala213).publishM2Local(p.toString)()
   jvm(V.scala212).publishM2Local(p.toString)()
   js(V.scala212).publishM2Local(p.toString)()
   jvm(V.scala211).publishM2Local(p.toString)()
@@ -161,18 +181,13 @@
 }
 
 object example extends ScalaModule with ScalaJSModule {
-  override def scalaVersion: Target[String] = T{V.scala212}
+  override def scalaVersion: Target[String] = T{V.scala213}
   override def scalaJSVersion: Target[String] = V.scalaJs
 
+  override def scalacOptions: T[Seq[String]] = T{compilerOptions}
 
-  /* Ugly hack to prevent
-   * "Referring to non-existent method fontawesome.generic.FA... error"
-   */
-  //override def moduleDeps: Seq[PublishModule] = Seq(js(V.scala212))
-  override def ivyDeps: Target[Loose.Agg[Dep]] = Agg(D.scalatags)
-  override def sources: Sources = T.sources{super.sources() ++ js(V.scala212).sources()}
-  override def generatedSources = T{js(V.scala212).generatedSources()}
+  override def moduleDeps: Seq[PublishModule] = Seq(js(V.scala213))
+
 }
 
-
 // vim: et ts=2 sw=2 syn=scala