import $file.^.outer.build import $file.inner.build import ammonite.ops._ import mill._ def assertPaths(p1 : Path, p2 : Path) : Unit = if (p1 != p2) throw new Exception( s"Paths were not equal : \n- $p1 \n- $p2" ) object sub extends PathAware with DestAware { object sub extends PathAware with DestAware object sub2 extends ^.outer.build.PathAware with ^.outer.build.DestAware } def checkProjectPaths = T { val thisPath : Path = millSourcePath assert(thisPath.last == "project") assertPaths(sub.selfPath(), thisPath / 'sub) assertPaths(sub.sub.selfPath(), thisPath / 'sub / 'sub) assertPaths(sub.sub2.selfPath(), thisPath / 'sub / 'sub2) } def checkInnerPaths = T { val thisPath : Path = millSourcePath assertPaths(inner.build.millSourcePath, thisPath / 'inner ) assertPaths(inner.build.sub.selfPath(), thisPath / 'inner / 'sub) assertPaths(inner.build.sub.sub.selfPath(), thisPath / 'inner / 'sub / 'sub) } def checkOuterPaths = T { val thisPath : Path = millSourcePath assertPaths(^.outer.build.millSourcePath, thisPath / up / 'outer ) assertPaths(^.outer.build.sub.selfPath(), thisPath / up / 'outer / 'sub) assertPaths(^.outer.build.sub.sub.selfPath(), thisPath / up / 'outer / 'sub / 'sub) } def checkOuterInnerPaths = T { val thisPath : Path = millSourcePath assertPaths(^.outer.inner.build.millSourcePath, thisPath / up / 'outer / 'inner ) assertPaths(^.outer.inner.build.sub.selfPath(), thisPath / up / 'outer / 'inner /'sub) assertPaths(^.outer.inner.build.sub.sub.selfPath(), thisPath / up / 'outer / 'inner / 'sub / 'sub) } def checkProjectDests = T { val outPath : Path = millSourcePath / 'out assertPaths(sub.selfDest(), outPath / 'sub) assertPaths(sub.sub.selfDest(), outPath / 'sub / 'sub) assertPaths(sub.sub2.selfDest(), outPath / 'sub / 'sub2) } def checkInnerDests = T { val foreignOut : Path = millSourcePath / 'out / "foreign-modules" assertPaths(inner.build.sub.selfDest(), foreignOut / 'inner / 'sub) assertPaths(inner.build.sub.sub.selfDest(), foreignOut / 'inner / 'sub / 'sub) } def checkOuterDests = T { val foreignOut : Path = millSourcePath / 'out / "foreign-modules" assertPaths(^.outer.build.sub.selfDest(), foreignOut / "up-1" / 'outer/ 'sub ) assertPaths(^.outer.build.sub.sub.selfDest(), foreignOut / "up-1" / 'outer/ 'sub / 'sub) } def checkOuterInnerDests = T { val foreignOut : Path = millSourcePath / 'out / "foreign-modules" assertPaths(^.outer.inner.build.sub.selfDest(), foreignOut / "up-1" / 'outer/ 'inner / 'sub) assertPaths(^.outer.inner.build.sub.sub.selfDest(), foreignOut / "up-1" / 'outer/ 'inner / 'sub / 'sub) } trait PathAware extends mill.Module { def selfPath = T { millSourcePath } } trait DestAware extends mill.Module { def selfDest = T { T.ctx().dest / up / up } }