diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-01-12 20:28:43 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-01-12 20:28:43 -0800 |
commit | 9cca64627d31f078c565c6865a50ae558f567d8f (patch) | |
tree | 6ac4630f51aec69acf3140d858fa1b3298f0e5fc /scalalib | |
parent | aa0cee34da02cfe7e477a9c9b716a592c6809406 (diff) | |
download | mill-9cca64627d31f078c565c6865a50ae558f567d8f.tar.gz mill-9cca64627d31f078c565c6865a50ae558f567d8f.tar.bz2 mill-9cca64627d31f078c565c6865a50ae558f567d8f.zip |
Allow implicit `crossModule()` syntax to automatically find a set of cross-coordinates which are compatible with a given implicit resolver
Diffstat (limited to 'scalalib')
-rw-r--r-- | scalalib/src/main/scala/mill/scalalib/Module.scala | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/scalalib/src/main/scala/mill/scalalib/Module.scala b/scalalib/src/main/scala/mill/scalalib/Module.scala index de962c9c..a6819435 100644 --- a/scalalib/src/main/scala/mill/scalalib/Module.scala +++ b/scalalib/src/main/scala/mill/scalalib/Module.scala @@ -3,12 +3,13 @@ package scalalib import ammonite.ops._ import coursier.{Cache, MavenRepository, Repository} -import mill.define.Task +import mill.define.{Cross, Task} import mill.define.Task.TaskModule import mill.eval.{PathRef, Result} import mill.modules.Jvm import mill.modules.Jvm.{createAssembly, createJar, interactiveSubprocess, subprocess} import Lib._ +import mill.define.Cross.Resolver import sbt.testing.Status object TestModule{ def handleResults(doneMsg: String, results: Seq[TestRunner.Result]) = { @@ -375,6 +376,24 @@ trait SbtModule extends Module { outer => } trait CrossSbtModule extends SbtModule { outer => + implicit def crossSbtModuleResolver: Resolver[CrossSbtModule] = new Resolver[CrossSbtModule]{ + def resolve[V <: CrossSbtModule](c: Cross[V]): V = { + crossScalaVersion.split('.') + .inits + .takeWhile(_.length > 1) + .flatMap( prefix => + c.items.map(_._2).find(_.crossScalaVersion.split('.').startsWith(prefix)) + ) + .collectFirst{case x => x} + .getOrElse( + throw new Exception( + s"Unable to find compatible cross version between $crossScalaVersion and "+ + c.items.map(_._2.crossScalaVersion).mkString(",") + ) + ) + } + } + def crossScalaVersion: String def scalaVersion = crossScalaVersion override def sources = T.input{ |