build.sc
changeset 26 040b435ce0dd
parent 25 c0cf0150cb4c
child 27 f30a3e465836
equal deleted inserted replaced
25:c0cf0150cb4c 26:040b435ce0dd
    15 import mill.scalalib._
    15 import mill.scalalib._
    16 import mill.scalalib.publish._
    16 import mill.scalalib.publish._
    17 
    17 
    18 object V {
    18 object V {
    19   val app = "0.3-SNAPSHOT"
    19   val app = "0.3-SNAPSHOT"
    20   val scalaJs = "0.6.33"
       
    21   val scala211 = "2.11.12"
    20   val scala211 = "2.11.12"
    22   val scala212 = "2.12.12"
    21   val scala212 = "2.12.12"
       
    22   val scala213 = "2.13.4"
       
    23   val scalaJs06 = "0.6.33"
       
    24   val scalaJs = "1.3.1"
       
    25   val scalatags = "0.9.2"
    23 }
    26 }
    24 
    27 
    25 object D {
    28 object D {
    26   val scalatags = ivy"com.lihaoyi::scalatags::0.6.8"
    29   val scalatags211 = ivy"com.lihaoyi::scalatags::0.6.8"
       
    30   val scalatags = ivy"com.lihaoyi::scalatags::${V.scalatags}"
    27 }
    31 }
    28 
    32 
    29 trait Common extends CrossSbtModule with PublishModule {
    33 trait Common extends CrossSbtModule with PublishModule {
    30 
    34 
    31   def pomSettings: T[PomSettings] = PomSettings(
    35   def pomSettings: T[PomSettings] = PomSettings(
    51     "-language:implicitConversions",     // Allow definition of implicit functions called views
    55     "-language:implicitConversions",     // Allow definition of implicit functions called views
    52     "-language:reflectiveCalls",
    56     "-language:reflectiveCalls",
    53     "-language:postfixOps",
    57     "-language:postfixOps",
    54     "-unchecked",                        // Enable additional warnings where generated code depends on assumptions.
    58     "-unchecked",                        // Enable additional warnings where generated code depends on assumptions.
    55     "-Xcheckinit",                       // Wrap field accessors to throw an exception on uninitialized access.
    59     "-Xcheckinit",                       // Wrap field accessors to throw an exception on uninitialized access.
    56     "-Xfuture",                          // Turn on future language features.
       
    57     "-target:jvm-1.8"
    60     "-target:jvm-1.8"
    58   )}
    61   )}
    59 
    62 
    60   def hgId: Input[String] = T.input {
    63   def hgId: Input[String] = T.input {
    61     os.proc("hg", "id", "-i").call().out.text.trim
    64     os.proc("hg", "id", "-i").call().out.text.trim
    69   def hgTag: Input[Option[String]] = T.input {
    72   def hgTag: Input[Option[String]] = T.input {
    70     os.proc("hg", "id", "-t").call().out.text.trim.split(' ').filterNot(v =>
    73     os.proc("hg", "id", "-t").call().out.text.trim.split(' ').filterNot(v =>
    71       maskedTags contains v).headOption
    74       maskedTags contains v).headOption
    72   }
    75   }
    73 
    76 
    74   override def ivyDeps: Target[Loose.Agg[Dep]] = Agg(D.scalatags)
    77   override def ivyDeps: Target[Loose.Agg[Dep]] = T{
       
    78     if (scalaVersion() == V.scala211) Agg(D.scalatags211) else Agg(D.scalatags)
       
    79   }
    75 
    80 
    76   override def sources: Sources = T.sources{
    81   override def sources: Sources = T.sources{
    77     super.sources() :+ PathRef(millSourcePath / 'shared / 'src / 'main / 'scala)
    82     super.sources() :+ PathRef(millSourcePath / 'shared / 'src / 'main / 'scala)
    78   }
    83   }
    79 
    84 
    82     V.app.replace("SNAPSHOT", s"${hgNum()}-${hgId()}$tv")
    87     V.app.replace("SNAPSHOT", s"${hgNum()}-${hgId()}$tv")
    83   }
    88   }
    84 }
    89 }
    85 
    90 
    86 class JvmModule(val crossScalaVersion: String) extends Common
    91 class JvmModule(val crossScalaVersion: String) extends Common
    87 class JsModule(val crossScalaVersion: String) extends ScalaJSModule
    92 class JsModule(val crossScalaVersion: String, crossJSVersion: String)
    88   with Common {
    93   extends ScalaJSModule with Common {
    89   override def scalaJSVersion: Target[String] = V.scalaJs
    94 
       
    95   override def scalaJSVersion: Target[String] = crossJSVersion
       
    96 
       
    97   override def millSourcePath = super.millSourcePath / os.up
    90 }
    98 }
    91 
    99 
    92 object jvm extends Cross[JvmModule](V.scala211, V.scala212)
   100 object jvm extends Cross[JvmModule](V.scala211, V.scala212, V.scala213)
    93 object js extends Cross[JsModule](V.scala211, V.scala212)
   101 object js extends Cross[JsModule](
       
   102   V.scala211 -> V.scalaJs06,
       
   103   V.scala212 -> V.scalaJs06,
       
   104   V.scala212 -> V.scalaJs,
       
   105   V.scala213 -> V.scalaJs06,
       
   106   V.scala213 -> V.scalaJs
       
   107 )
    94 
   108 
    95 def compileAll(): Command[Unit] = T.command{
   109 def compileAll(): Command[Unit] = T.command{
       
   110   jvm(V.scala213).compile()
       
   111   js(V.scala213, V.scalaJs).compile()
       
   112   js(V.scala213, V.scalaJs06).compile()
    96   jvm(V.scala212).compile()
   113   jvm(V.scala212).compile()
    97   js(V.scala212).compile()
   114   js(V.scala212, V.scalaJs).compile()
       
   115   js(V.scala212, V.scalaJs06).compile()
    98   jvm(V.scala211).compile()
   116   jvm(V.scala211).compile()
    99   js(V.scala211).compile()
   117   js(V.scala211, V.scalaJs06).compile()
   100   ()
   118   ()
   101 }
   119 }
   102 
   120 
   103 def publishLocal(): Command[Unit] = T.command{
   121 def publishLocal(): Command[Unit] = T.command{
       
   122   jvm(V.scala213).publishLocal()()
       
   123   js(V.scala213, V.scalaJs).publishLocal()()
       
   124   js(V.scala213, V.scalaJs06).publishLocal()()
   104   jvm(V.scala212).publishLocal()()
   125   jvm(V.scala212).publishLocal()()
   105   js(V.scala212).publishLocal()()
   126   js(V.scala212, V.scalaJs).publishLocal()()
       
   127   js(V.scala212, V.scalaJs06).publishLocal()()
   106   jvm(V.scala211).publishLocal()()
   128   jvm(V.scala211).publishLocal()()
   107   js(V.scala211).publishLocal()()
   129   js(V.scala211, V.scalaJs06).publishLocal()()
   108   ()
       
   109 }
   130 }
   110 
   131 
   111 def publishM2Local(p: os.Path): Command[Unit] = T.command{
   132 def publishM2Local(p: os.Path): Command[Unit] = T.command{
       
   133   jvm(V.scala213).publishM2Local(p.toString)()
       
   134   js(V.scala213, V.scalaJs).publishM2Local(p.toString)()
       
   135   js(V.scala213, V.scalaJs06).publishM2Local(p.toString)()
   112   jvm(V.scala212).publishM2Local(p.toString)()
   136   jvm(V.scala212).publishM2Local(p.toString)()
   113   js(V.scala212).publishM2Local(p.toString)()
   137   js(V.scala212, V.scalaJs).publishM2Local(p.toString)()
       
   138   js(V.scala212, V.scalaJs06).publishM2Local(p.toString)()
   114   jvm(V.scala211).publishM2Local(p.toString)()
   139   jvm(V.scala211).publishM2Local(p.toString)()
   115   js(V.scala211).publishM2Local(p.toString)()
   140   js(V.scala211, V.scalaJs06).publishM2Local(p.toString)()
   116   ()
   141   ()
   117 }
   142 }
   118 
   143 
   119 // vim: et ts=2 sw=2 syn=scala
   144 // vim: et ts=2 sw=2 syn=scala