From 9cca64627d31f078c565c6865a50ae558f567d8f Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Fri, 12 Jan 2018 20:28:43 -0800 Subject: Allow implicit `crossModule()` syntax to automatically find a set of cross-coordinates which are compatible with a given implicit resolver --- scalalib/src/main/scala/mill/scalalib/Module.scala | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'scalalib') 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{ -- cgit v1.2.3