# HG changeset patch # User Tomas Zeman # Date 1608986651 -3600 # Node ID b79a632713a20676a1eb8fed9b9022fb90c8bf00 # Parent dfc8390048781f40657b191e8d43b715cf8f93b2 Cross-compile against Scala 2.13.4 diff -r dfc839004878 -r b79a632713a2 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