summaryrefslogtreecommitdiff
path: root/scalalib
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-01-12 20:28:43 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-01-12 20:28:43 -0800
commit9cca64627d31f078c565c6865a50ae558f567d8f (patch)
tree6ac4630f51aec69acf3140d858fa1b3298f0e5fc /scalalib
parentaa0cee34da02cfe7e477a9c9b716a592c6809406 (diff)
downloadmill-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.scala21
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{