From abe5220d8958973a9afdc058d96df387f8f02520 Mon Sep 17 00:00:00 2001 From: Olivier Melois Date: Wed, 2 Jun 2021 12:32:16 +0200 Subject: [PATCH 1/3] Prevent compilation during bloop config generation --- .../src/mill/contrib/bloop/BloopImpl.scala | 152 +++++++++--------- .../src/mill/contrib/bloop/BloopTests.scala | 12 ++ 2 files changed, 88 insertions(+), 76 deletions(-) diff --git a/contrib/bloop/src/mill/contrib/bloop/BloopImpl.scala b/contrib/bloop/src/mill/contrib/bloop/BloopImpl.scala index 6d5b901640a..67a75581b3b 100644 --- a/contrib/bloop/src/mill/contrib/bloop/BloopImpl.scala +++ b/contrib/bloop/src/mill/contrib/bloop/BloopImpl.scala @@ -157,7 +157,7 @@ class BloopImpl(ev: () => Evaluator, wd: Path) extends ExternalModule { outer => def bloopConfig(module: JavaModule): Task[BloopConfig.File] = { import _root_.bloop.config.Config - def out(m: JavaModule) = { + def out(m: JavaModule) = { val allSegs = m.millModuleShared.value.getOrElse(Segments()) ++ m.millModuleSegments bloopDir / "out" / allSegs.render } @@ -195,81 +195,6 @@ class BloopImpl(ev: () => Evaluator, wd: Path) extends ExternalModule { outer => case _ => T.task(None) } - //////////////////////////////////////////////////////////////////////////// - // Platform (Jvm/Js/Native) - //////////////////////////////////////////////////////////////////////////// - - def jsLinkerMode(m: JavaModule): Task[Config.LinkerMode] = - (m.asBloop match { - case Some(bm) => T.task(bm.linkerMode()) - case None => T.task(None) - }).map(_.getOrElse(Config.LinkerMode.Debug)) - - val platform: Task[BloopConfig.Platform] = module match { - case m: ScalaJSModule => - T.task { - BloopConfig.Platform.Js( - BloopConfig.JsConfig.empty.copy( - version = m.scalaJSVersion(), - mode = jsLinkerMode(m)(), - kind = m.moduleKind() match { - case ModuleKind.NoModule => Config.ModuleKindJS.NoModule - case ModuleKind.CommonJSModule => - Config.ModuleKindJS.CommonJSModule - case ModuleKind.ESModule => Config.ModuleKindJS.ESModule - }, - emitSourceMaps = m.jsEnvConfig() match{ - case c: JsEnvConfig.NodeJs => c.sourceMap - case _ => false - }, - jsdom = Some(false), - ), - mainClass = module.mainClass() - ) - } - case m: ScalaNativeModule => - T.task { - BloopConfig.Platform.Native( - BloopConfig.NativeConfig.empty.copy( - version = m.scalaNativeVersion(), - mode = m.releaseMode() match { - case ReleaseMode.Debug => BloopConfig.LinkerMode.Debug - case ReleaseMode.ReleaseFast => BloopConfig.LinkerMode.Release - case ReleaseMode.ReleaseFull => BloopConfig.LinkerMode.Release - }, - gc = m.nativeGC(), - targetTriple = m.nativeTarget(), - clang = m.nativeClang().toNIO, - clangpp = m.nativeClangPP().toNIO, - options = Config.NativeOptions( - m.nativeLinkingOptions().toList, - m.nativeCompileOptions().toList - ), - linkStubs = m.nativeLinkStubs(), - ), - mainClass = module.mainClass() - ) - } - case _ => - T.task { - BloopConfig.Platform.Jvm( - BloopConfig.JvmConfig( - home = T.env.get("JAVA_HOME").map(s => Path(s).toNIO), - options = { - // See https://github.com/scalacenter/bloop/issues/1167 - val forkArgs = module.forkArgs().toList - if (forkArgs.exists(_.startsWith("-Duser.dir="))) forkArgs - else s"-Duser.dir=$wd" :: forkArgs - } - ), - mainClass = module.mainClass(), - runtimeConfig = None, - classpath = Some(module.compileClasspath().map(_.path.toNIO).toList), - resources = Some(module.resources().map(_.path.toNIO).toList) - ) - } - } - //////////////////////////////////////////////////////////////////////////// // Tests //////////////////////////////////////////////////////////////////////////// @@ -405,6 +330,81 @@ class BloopImpl(ev: () => Evaluator, wd: Path) extends ExternalModule { outer => .map(_.distinct) val resources = T.task(module.resources().map(_.path.toNIO).toList) + //////////////////////////////////////////////////////////////////////////// + // Platform (Jvm/Js/Native) + //////////////////////////////////////////////////////////////////////////// + + def jsLinkerMode(m: JavaModule): Task[Config.LinkerMode] = + (m.asBloop match { + case Some(bm) => T.task(bm.linkerMode()) + case None => T.task(None) + }).map(_.getOrElse(Config.LinkerMode.Debug)) + + def platform: Task[BloopConfig.Platform] = module match { + case m: ScalaJSModule => + T.task { + BloopConfig.Platform.Js( + BloopConfig.JsConfig.empty.copy( + version = m.scalaJSVersion(), + mode = jsLinkerMode(m)(), + kind = m.moduleKind() match { + case ModuleKind.NoModule => Config.ModuleKindJS.NoModule + case ModuleKind.CommonJSModule => + Config.ModuleKindJS.CommonJSModule + case ModuleKind.ESModule => Config.ModuleKindJS.ESModule + }, + emitSourceMaps = m.jsEnvConfig() match { + case c: JsEnvConfig.NodeJs => c.sourceMap + case _ => false + }, + jsdom = Some(false) + ), + mainClass = module.mainClass() + ) + } + case m: ScalaNativeModule => + T.task { + BloopConfig.Platform.Native( + BloopConfig.NativeConfig.empty.copy( + version = m.scalaNativeVersion(), + mode = m.releaseMode() match { + case ReleaseMode.Debug => BloopConfig.LinkerMode.Debug + case ReleaseMode.ReleaseFast => BloopConfig.LinkerMode.Release + case ReleaseMode.ReleaseFull => BloopConfig.LinkerMode.Release + }, + gc = m.nativeGC(), + targetTriple = m.nativeTarget(), + clang = m.nativeClang().toNIO, + clangpp = m.nativeClangPP().toNIO, + options = Config.NativeOptions( + m.nativeLinkingOptions().toList, + m.nativeCompileOptions().toList + ), + linkStubs = m.nativeLinkStubs() + ), + mainClass = module.mainClass() + ) + } + case _ => + T.task { + BloopConfig.Platform.Jvm( + BloopConfig.JvmConfig( + home = T.env.get("JAVA_HOME").map(s => Path(s).toNIO), + options = { + // See https://github.com/scalacenter/bloop/issues/1167 + val forkArgs = module.forkArgs().toList + if (forkArgs.exists(_.startsWith("-Duser.dir="))) forkArgs + else s"-Duser.dir=$wd" :: forkArgs + } + ), + mainClass = module.mainClass(), + runtimeConfig = None, + classpath = Some(classpath().map(_.toNIO).toList), + resources = Some(module.resources().map(_.path.toNIO).toList) + ) + } + } + //////////////////////////////////////////////////////////////////////////// // Tying up //////////////////////////////////////////////////////////////////////////// diff --git a/contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala b/contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala index aa2a48f4882..317a9f26ca5 100644 --- a/contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala +++ b/contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala @@ -80,6 +80,18 @@ object BloopTests extends TestSuite { // skipped on Windows val scalanativeModuleConfig = if(scala.util.Properties.isWin) None else Some(readBloopConf("scalanativeModule.json")) + "no-compilation" - { + val workspaceOut = os.pwd / "target" / "workspace" / "mill" / "contrib" / "bloop" / "BloopTests" / "testEvaluator" + val scalaModuleCompile = workspaceOut / "scalaModule" / "compile" + val scalaModule2Compile = workspaceOut / "scalaModule2" / "compile" + + // Ensuring that bloop config generation didn't trigger compilation + assert(os.exists(workspaceOut / "scalaModule")) + assert(!os.exists(workspaceOut / "scalaModule" / "compile")) + assert(os.exists(workspaceOut / "scalaModule2")) + assert(!os.exists(workspaceOut / "scalaModule2" / "compile")) + } + "scalaModule" - { val p = scalaModuleConfig.project val name = p.name From c740b06a9daec2aa3b9d6eae839035301f08f304 Mon Sep 17 00:00:00 2001 From: Olivier Melois Date: Wed, 2 Jun 2021 18:04:21 +0200 Subject: [PATCH 2/3] Remove Platform.JVM#classpath value altogether Bloop will fallback to the value present in the Project object. --- .../src/mill/contrib/bloop/BloopImpl.scala | 150 +++++++++--------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/contrib/bloop/src/mill/contrib/bloop/BloopImpl.scala b/contrib/bloop/src/mill/contrib/bloop/BloopImpl.scala index 67a75581b3b..03c2ecc7fda 100644 --- a/contrib/bloop/src/mill/contrib/bloop/BloopImpl.scala +++ b/contrib/bloop/src/mill/contrib/bloop/BloopImpl.scala @@ -195,6 +195,81 @@ class BloopImpl(ev: () => Evaluator, wd: Path) extends ExternalModule { outer => case _ => T.task(None) } + //////////////////////////////////////////////////////////////////////////// + // Platform (Jvm/Js/Native) + //////////////////////////////////////////////////////////////////////////// + + def jsLinkerMode(m: JavaModule): Task[Config.LinkerMode] = + (m.asBloop match { + case Some(bm) => T.task(bm.linkerMode()) + case None => T.task(None) + }).map(_.getOrElse(Config.LinkerMode.Debug)) + + val platform: Task[BloopConfig.Platform] = module match { + case m: ScalaJSModule => + T.task { + BloopConfig.Platform.Js( + BloopConfig.JsConfig.empty.copy( + version = m.scalaJSVersion(), + mode = jsLinkerMode(m)(), + kind = m.moduleKind() match { + case ModuleKind.NoModule => Config.ModuleKindJS.NoModule + case ModuleKind.CommonJSModule => + Config.ModuleKindJS.CommonJSModule + case ModuleKind.ESModule => Config.ModuleKindJS.ESModule + }, + emitSourceMaps = m.jsEnvConfig() match{ + case c: JsEnvConfig.NodeJs => c.sourceMap + case _ => false + }, + jsdom = Some(false), + ), + mainClass = module.mainClass() + ) + } + case m: ScalaNativeModule => + T.task { + BloopConfig.Platform.Native( + BloopConfig.NativeConfig.empty.copy( + version = m.scalaNativeVersion(), + mode = m.releaseMode() match { + case ReleaseMode.Debug => BloopConfig.LinkerMode.Debug + case ReleaseMode.ReleaseFast => BloopConfig.LinkerMode.Release + case ReleaseMode.ReleaseFull => BloopConfig.LinkerMode.Release + }, + gc = m.nativeGC(), + targetTriple = m.nativeTarget(), + clang = m.nativeClang().toNIO, + clangpp = m.nativeClangPP().toNIO, + options = Config.NativeOptions( + m.nativeLinkingOptions().toList, + m.nativeCompileOptions().toList + ), + linkStubs = m.nativeLinkStubs(), + ), + mainClass = module.mainClass() + ) + } + case _ => + T.task { + BloopConfig.Platform.Jvm( + BloopConfig.JvmConfig( + home = T.env.get("JAVA_HOME").map(s => Path(s).toNIO), + options = { + // See https://github.com/scalacenter/bloop/issues/1167 + val forkArgs = module.forkArgs().toList + if (forkArgs.exists(_.startsWith("-Duser.dir="))) forkArgs + else s"-Duser.dir=$wd" :: forkArgs + } + ), + mainClass = module.mainClass(), + runtimeConfig = None, + classpath = None, + resources = Some(module.resources().map(_.path.toNIO).toList) + ) + } + } + //////////////////////////////////////////////////////////////////////////// // Tests //////////////////////////////////////////////////////////////////////////// @@ -330,81 +405,6 @@ class BloopImpl(ev: () => Evaluator, wd: Path) extends ExternalModule { outer => .map(_.distinct) val resources = T.task(module.resources().map(_.path.toNIO).toList) - //////////////////////////////////////////////////////////////////////////// - // Platform (Jvm/Js/Native) - //////////////////////////////////////////////////////////////////////////// - - def jsLinkerMode(m: JavaModule): Task[Config.LinkerMode] = - (m.asBloop match { - case Some(bm) => T.task(bm.linkerMode()) - case None => T.task(None) - }).map(_.getOrElse(Config.LinkerMode.Debug)) - - def platform: Task[BloopConfig.Platform] = module match { - case m: ScalaJSModule => - T.task { - BloopConfig.Platform.Js( - BloopConfig.JsConfig.empty.copy( - version = m.scalaJSVersion(), - mode = jsLinkerMode(m)(), - kind = m.moduleKind() match { - case ModuleKind.NoModule => Config.ModuleKindJS.NoModule - case ModuleKind.CommonJSModule => - Config.ModuleKindJS.CommonJSModule - case ModuleKind.ESModule => Config.ModuleKindJS.ESModule - }, - emitSourceMaps = m.jsEnvConfig() match { - case c: JsEnvConfig.NodeJs => c.sourceMap - case _ => false - }, - jsdom = Some(false) - ), - mainClass = module.mainClass() - ) - } - case m: ScalaNativeModule => - T.task { - BloopConfig.Platform.Native( - BloopConfig.NativeConfig.empty.copy( - version = m.scalaNativeVersion(), - mode = m.releaseMode() match { - case ReleaseMode.Debug => BloopConfig.LinkerMode.Debug - case ReleaseMode.ReleaseFast => BloopConfig.LinkerMode.Release - case ReleaseMode.ReleaseFull => BloopConfig.LinkerMode.Release - }, - gc = m.nativeGC(), - targetTriple = m.nativeTarget(), - clang = m.nativeClang().toNIO, - clangpp = m.nativeClangPP().toNIO, - options = Config.NativeOptions( - m.nativeLinkingOptions().toList, - m.nativeCompileOptions().toList - ), - linkStubs = m.nativeLinkStubs() - ), - mainClass = module.mainClass() - ) - } - case _ => - T.task { - BloopConfig.Platform.Jvm( - BloopConfig.JvmConfig( - home = T.env.get("JAVA_HOME").map(s => Path(s).toNIO), - options = { - // See https://github.com/scalacenter/bloop/issues/1167 - val forkArgs = module.forkArgs().toList - if (forkArgs.exists(_.startsWith("-Duser.dir="))) forkArgs - else s"-Duser.dir=$wd" :: forkArgs - } - ), - mainClass = module.mainClass(), - runtimeConfig = None, - classpath = Some(classpath().map(_.toNIO).toList), - resources = Some(module.resources().map(_.path.toNIO).toList) - ) - } - } - //////////////////////////////////////////////////////////////////////////// // Tying up //////////////////////////////////////////////////////////////////////////// From 2b60d12a478e9cb633aa458d3b81f85b8023debe Mon Sep 17 00:00:00 2001 From: Olivier Melois Date: Thu, 3 Jun 2021 11:06:53 +0200 Subject: [PATCH 3/3] Removing unused vals --- contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala | 2 -- 1 file changed, 2 deletions(-) diff --git a/contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala b/contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala index 317a9f26ca5..244d52397ec 100644 --- a/contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala +++ b/contrib/bloop/test/src/mill/contrib/bloop/BloopTests.scala @@ -82,8 +82,6 @@ object BloopTests extends TestSuite { "no-compilation" - { val workspaceOut = os.pwd / "target" / "workspace" / "mill" / "contrib" / "bloop" / "BloopTests" / "testEvaluator" - val scalaModuleCompile = workspaceOut / "scalaModule" / "compile" - val scalaModule2Compile = workspaceOut / "scalaModule2" / "compile" // Ensuring that bloop config generation didn't trigger compilation assert(os.exists(workspaceOut / "scalaModule"))