build.sc
changeset 28 fe846f058e41
parent 27 f30a3e465836
equal deleted inserted replaced
27:f30a3e465836 28:fe846f058e41
     6  * Generate Idea project:
     6  * Generate Idea project:
     7  *
     7  *
     8  * ./mill mill.scalalib.GenIdea/idea
     8  * ./mill mill.scalalib.GenIdea/idea
     9  *
     9  *
    10  */
    10  */
       
    11 import ammonite.ops
    11 import mill._
    12 import mill._
    12 import mill.api.Loose
    13 import mill.api.Loose
    13 import mill.define.{Command, Input, Sources, Target}
    14 import mill.define.{Command, Input, Sources, Target}
    14 import mill.scalajslib._
    15 import mill.scalajslib._
    15 import mill.scalalib._
    16 import mill.scalalib._
    26 }
    27 }
    27 
    28 
    28 object D {
    29 object D {
    29   val scalatags211 = ivy"com.lihaoyi::scalatags::0.6.8"
    30   val scalatags211 = ivy"com.lihaoyi::scalatags::0.6.8"
    30   val scalatags = ivy"com.lihaoyi::scalatags::${V.scalatags}"
    31   val scalatags = ivy"com.lihaoyi::scalatags::${V.scalatags}"
    31 }
    32   val scalatex = ivy"org.openmole::scalatex-api:0.4.6"
       
    33   val oslib = ivy"com.lihaoyi::os-lib::0.7.1"
       
    34 }
       
    35 
       
    36 val compilerOptions = Seq(
       
    37     "-deprecation",                      // Emit warning and location for usages of deprecated APIs.
       
    38     "-encoding", "utf-8",                // Specify character encoding used by source files.
       
    39     "-explaintypes",                     // Explain type errors in more detail.
       
    40     "-feature",                          // Emit warning and location for usages of features that should be imported explicitly.
       
    41     "-language:higherKinds",             // Allow higher-kinded types
       
    42     "-language:implicitConversions",     // Allow definition of implicit functions called views
       
    43     "-language:reflectiveCalls",
       
    44     "-language:postfixOps",
       
    45     "-unchecked",                        // Enable additional warnings where generated code depends on assumptions.
       
    46     "-Xcheckinit",                       // Wrap field accessors to throw an exception on uninitialized access.
       
    47     "-target:jvm-1.8"
       
    48   )
    32 
    49 
    33 trait Common extends CrossSbtModule with PublishModule {
    50 trait Common extends CrossSbtModule with PublishModule {
    34 
    51 
    35   def pomSettings: T[PomSettings] = PomSettings(
    52   def pomSettings: T[PomSettings] = PomSettings(
    36     description = "Scalatags DSL for purecss.io framework",
    53     description = "Scalatags DSL for purecss.io framework",
    44     )
    61     )
    45   )
    62   )
    46 
    63 
    47   override def artifactName = "purecss" 
    64   override def artifactName = "purecss" 
    48 
    65 
    49   override def scalacOptions = T{Seq(
    66   override def scalacOptions = T{compilerOptions}
    50     "-deprecation",                      // Emit warning and location for usages of deprecated APIs.
       
    51     "-encoding", "utf-8",                // Specify character encoding used by source files.
       
    52     "-explaintypes",                     // Explain type errors in more detail.
       
    53     "-feature",                          // Emit warning and location for usages of features that should be imported explicitly.
       
    54     "-language:higherKinds",             // Allow higher-kinded types
       
    55     "-language:implicitConversions",     // Allow definition of implicit functions called views
       
    56     "-language:reflectiveCalls",
       
    57     "-language:postfixOps",
       
    58     "-unchecked",                        // Enable additional warnings where generated code depends on assumptions.
       
    59     "-Xcheckinit",                       // Wrap field accessors to throw an exception on uninitialized access.
       
    60     "-target:jvm-1.8"
       
    61   )}
       
    62 
    67 
    63   def hgId: Input[String] = T.input {
    68   def hgId: Input[String] = T.input {
    64     os.proc("hg", "id", "-i").call().out.text.trim
    69     os.proc("hg", "id", "-i").call().out.text.trim
    65   }
    70   }
    66 
    71 
   103   V.scala212 -> V.scalaJs06,
   108   V.scala212 -> V.scalaJs06,
   104   V.scala212 -> V.scalaJs,
   109   V.scala212 -> V.scalaJs,
   105   V.scala213 -> V.scalaJs06,
   110   V.scala213 -> V.scalaJs06,
   106   V.scala213 -> V.scalaJs
   111   V.scala213 -> V.scalaJs
   107 )
   112 )
       
   113 
       
   114 object extras extends Module {
       
   115 
       
   116   val name = "pure-extras"
       
   117 
       
   118   class JvmModule(val crossScalaVersion: String) extends Common {
       
   119     override def artifactName = name
       
   120   }
       
   121 
       
   122   class JsModule(val crossScalaVersion: String, crossJSVersion: String)
       
   123     extends ScalaJSModule with Common {
       
   124 
       
   125     override def scalaJSVersion: Target[String] = crossJSVersion
       
   126 
       
   127     override def millSourcePath = super.millSourcePath / os.up
       
   128 
       
   129     override def artifactName = name
       
   130   }
       
   131 
       
   132   object jvm extends Cross[JvmModule](V.scala211, V.scala212, V.scala213)
       
   133   object js extends Cross[JsModule](
       
   134     V.scala211 -> V.scalaJs06,
       
   135     V.scala212 -> V.scalaJs06,
       
   136     V.scala212 -> V.scalaJs,
       
   137     V.scala213 -> V.scalaJs06,
       
   138     V.scala213 -> V.scalaJs
       
   139   )
       
   140 
       
   141 }
   108 
   142 
   109 def compileAll(): Command[Unit] = T.command{
   143 def compileAll(): Command[Unit] = T.command{
   110   jvm(V.scala213).compile()
   144   jvm(V.scala213).compile()
   111   js(V.scala213, V.scalaJs).compile()
   145   js(V.scala213, V.scalaJs).compile()
   112   js(V.scala213, V.scalaJs06).compile()
   146   js(V.scala213, V.scalaJs06).compile()
   113   jvm(V.scala212).compile()
   147   jvm(V.scala212).compile()
   114   js(V.scala212, V.scalaJs).compile()
   148   js(V.scala212, V.scalaJs).compile()
   115   js(V.scala212, V.scalaJs06).compile()
   149   js(V.scala212, V.scalaJs06).compile()
   116   jvm(V.scala211).compile()
   150   jvm(V.scala211).compile()
   117   js(V.scala211, V.scalaJs06).compile()
   151   js(V.scala211, V.scalaJs06).compile()
       
   152   extras.jvm(V.scala213).compile()
       
   153   extras.js(V.scala213, V.scalaJs).compile()
       
   154   extras.js(V.scala213, V.scalaJs06).compile()
       
   155   extras.jvm(V.scala212).compile()
       
   156   extras.js(V.scala212, V.scalaJs).compile()
       
   157   extras.js(V.scala212, V.scalaJs06).compile()
       
   158   extras.jvm(V.scala211).compile()
       
   159   extras.js(V.scala211, V.scalaJs06).compile()
   118   ()
   160   ()
   119 }
   161 }
   120 
   162 
   121 def publishLocal(): Command[Unit] = T.command{
   163 def publishLocal(): Command[Unit] = T.command{
   122   jvm(V.scala213).publishLocal()()
   164   jvm(V.scala213).publishLocal()()
   125   jvm(V.scala212).publishLocal()()
   167   jvm(V.scala212).publishLocal()()
   126   js(V.scala212, V.scalaJs).publishLocal()()
   168   js(V.scala212, V.scalaJs).publishLocal()()
   127   js(V.scala212, V.scalaJs06).publishLocal()()
   169   js(V.scala212, V.scalaJs06).publishLocal()()
   128   jvm(V.scala211).publishLocal()()
   170   jvm(V.scala211).publishLocal()()
   129   js(V.scala211, V.scalaJs06).publishLocal()()
   171   js(V.scala211, V.scalaJs06).publishLocal()()
       
   172   extras.jvm(V.scala213).publishLocal()()
       
   173   extras.js(V.scala213, V.scalaJs).publishLocal()()
       
   174   extras.js(V.scala213, V.scalaJs06).publishLocal()()
       
   175   extras.jvm(V.scala212).publishLocal()()
       
   176   extras.js(V.scala212, V.scalaJs).publishLocal()()
       
   177   extras.js(V.scala212, V.scalaJs06).publishLocal()()
       
   178   extras.jvm(V.scala211).publishLocal()()
       
   179   extras.js(V.scala211, V.scalaJs06).publishLocal()()
   130 }
   180 }
   131 
   181 
   132 def publishM2Local(p: os.Path): Command[Unit] = T.command{
   182 def publishM2Local(p: os.Path): Command[Unit] = T.command{
   133   jvm(V.scala213).publishM2Local(p.toString)()
   183   jvm(V.scala213).publishM2Local(p.toString)()
   134   js(V.scala213, V.scalaJs).publishM2Local(p.toString)()
   184   js(V.scala213, V.scalaJs).publishM2Local(p.toString)()
   136   jvm(V.scala212).publishM2Local(p.toString)()
   186   jvm(V.scala212).publishM2Local(p.toString)()
   137   js(V.scala212, V.scalaJs).publishM2Local(p.toString)()
   187   js(V.scala212, V.scalaJs).publishM2Local(p.toString)()
   138   js(V.scala212, V.scalaJs06).publishM2Local(p.toString)()
   188   js(V.scala212, V.scalaJs06).publishM2Local(p.toString)()
   139   jvm(V.scala211).publishM2Local(p.toString)()
   189   jvm(V.scala211).publishM2Local(p.toString)()
   140   js(V.scala211, V.scalaJs06).publishM2Local(p.toString)()
   190   js(V.scala211, V.scalaJs06).publishM2Local(p.toString)()
       
   191   extras.jvm(V.scala213).publishM2Local(p.toString)()
       
   192   extras.js(V.scala213, V.scalaJs).publishM2Local(p.toString)()
       
   193   extras.js(V.scala213, V.scalaJs06).publishM2Local(p.toString)()
       
   194   extras.jvm(V.scala212).publishM2Local(p.toString)()
       
   195   extras.js(V.scala212, V.scalaJs).publishM2Local(p.toString)()
       
   196   extras.js(V.scala212, V.scalaJs06).publishM2Local(p.toString)()
       
   197   extras.jvm(V.scala211).publishM2Local(p.toString)()
       
   198   extras.js(V.scala211, V.scalaJs06).publishM2Local(p.toString)()
   141   ()
   199   ()
   142 }
   200 }
   143 
   201 
   144 object extras extends Module {
   202 object example extends ScalaModule {
   145 
   203   override def scalaVersion: T[String] = V.scala213
   146   class JvmModule(val crossScalaVersion: String) extends Common
   204 
   147   class JsModule(val crossScalaVersion: String, crossJSVersion: String)
   205   override def scalacOptions = T{compilerOptions}
   148     extends ScalaJSModule with Common {
   206 
   149 
   207   override def moduleDeps = Seq(jvm(V.scala213), extras.jvm(V.scala213))
   150     override def scalaJSVersion: Target[String] = crossJSVersion
   208 
   151 
   209   override def ivyDeps = Agg(D.scalatex, D.oslib)
   152     override def millSourcePath = super.millSourcePath / os.up
   210 
   153   }
   211   override def generatedSources: Target[Seq[PathRef]] = T{
   154 
   212     val dir = T.ctx().dest
   155   object jvm extends Cross[JvmModule](V.scala211, V.scala212, V.scala213)
   213     val src = sources() map(_.path)
   156   object js extends Cross[JsModule](
   214     val ids = src flatMap(ops.ls! _ filter(_.ext == "scalatex") map { p =>
   157     V.scala211 -> V.scalaJs06,
   215       val id = p.last replaceAllLiterally (".scalatex", "")
   158     V.scala212 -> V.scalaJs06,
   216       os.write(dir / s"$id.scala",
   159     V.scala212 -> V.scalaJs,
   217         s"""
   160     V.scala213 -> V.scalaJs06,
   218            | package example
   161     V.scala213 -> V.scalaJs
   219            | import scalatags.Text.all._
   162   )
   220            | import scalatex._
   163 
   221            | import purecss.Extras
   164 }
   222            | import purecss.text.PureCss._
       
   223            | object `$id` {
       
   224            |   val id = "$id"
       
   225            |   val content = twf("${p.toString}")
       
   226            | }
       
   227            |
       
   228            |/*
       
   229            |${os.read(p)}
       
   230            |*/
       
   231         """.stripMargin)
       
   232       id
       
   233     })
       
   234 
       
   235     os.write(dir / "initializer.scala",
       
   236       s"""
       
   237          | package example
       
   238          | trait ContentInitializer {
       
   239          |   Seq(${ids mkString("`", "`, `", "`")})
       
   240          | }
       
   241       """.stripMargin)
       
   242 
       
   243     os.write(dir / "main.scala",
       
   244       s"""
       
   245          | package example
       
   246          | import os.Path
       
   247          | object A extends ExampleApp with App {
       
   248          |   override def export: Path = Path("${exportDir().path}")
       
   249          | }
       
   250       """.stripMargin)
       
   251 
       
   252     Seq(PathRef(dir))
       
   253   }
       
   254 
       
   255   override def mainClass: T[Option[String]] = Some("example.A")
       
   256 
       
   257   def exportDir = T{
       
   258     val dir = T.ctx().dest
       
   259     PathRef(dir)
       
   260   }
       
   261 
       
   262 }
       
   263 
   165 // vim: et ts=2 sw=2 syn=scala
   264 // vim: et ts=2 sw=2 syn=scala