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 |