diff options
-rw-r--r-- | build.sbt | 27 | ||||
-rwxr-xr-x | build.sc | 29 | ||||
-rwxr-xr-x | ci/test3.sh | 8 | ||||
-rwxr-xr-x | ci/test_all.sh | 2 | ||||
-rw-r--r-- | core/src/mill/modules/Jvm.scala | 4 | ||||
-rw-r--r-- | readme.md | 2 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/GenIdea.scala | 61 |
7 files changed, 96 insertions, 37 deletions
@@ -167,8 +167,23 @@ lazy val scalaworker: Project = project ) ) -(javaOptions in scalalib) := bridgeProps.value.toSeq ++ scalaWorkerProps.value +def genTask(m: Project) = Def.task{ + Seq((packageBin in (m, Compile)).value, (packageSrc in (m, Compile)).value) ++ + (externalDependencyClasspath in (m, Compile)).value.map(_.data) +} +(javaOptions in scalalib) := { + bridgeProps.value.toSeq ++ + scalaWorkerProps.value ++ + Seq("-DMILL_BUILD_LIBRARIES=" + + ( + genTask(moduledefs).value ++ + genTask(core).value ++ + genTask(scalalib).value ++ + genTask(scalajslib).value + ).mkString(",") + ) +} lazy val scalajslib = project .dependsOn(scalalib % "compile->compile;test->test") .settings( @@ -257,12 +272,12 @@ lazy val bin = project outputStrategy in (Test, run) := Some(StdoutOutput), mainClass in (Test, run) := Some("mill.Main"), baseDirectory in (Test, run) := (baseDirectory in (Compile, run)).value / ".." / "..", + javaOptions in (Test, run) := { + (javaOptions in (scalalib, Compile)).value ++ + scalaWorkerProps.value + }, assemblyOption in assembly := { - val extraArgs = ( - bridgeProps.value ++ - jsbridgeProps.value ++ - scalaWorkerProps.value - ).mkString(" ") + val extraArgs = (javaOptions in (Test, run)).value.mkString(" ") (assemblyOption in assembly).value.copy( prependShellScript = Some( Seq( @@ -115,17 +115,30 @@ object scalalib extends MillModule { def moduleDeps = Seq(core) def bridgeCompiles = mill.define.Task.traverse(bridges.items)(_._2.compile) + + def genTask(m: ScalaModule) = T.task{ + Seq(m.jar(), m.sourcesJar()) ++ + m.externalCompileDepClasspath() ++ + m.externalCompileDepSources() + } + def testArgs = T{ val bridgeVersions = bridges.items.map(_._1.head.toString) - val bridgeArgs = for((version, compile) <- bridgeVersions.zip(bridgeCompiles())) - yield { - val underscored = version.replace('.', '_') - val key = s"MILL_COMPILER_BRIDGE_$underscored" - val value = compile.classes.path - s"-D$key=$value" - } - scalaworker.testArgs() ++ bridgeArgs + val bridgeArgs = + for((version, compile) <- bridgeVersions.zip(bridgeCompiles())) + yield s"-DMILL_COMPILER_BRIDGE_${version.replace('.', '_')}=${compile.classes.path}" + + + val genIdeaArgs = + genTask(moduledefs)() ++ + genTask(core)() ++ + genTask(scalalib)() ++ + genTask(scalajslib)() + + scalaworker.testArgs() ++ + bridgeArgs ++ + Seq("-DMILL_BUILD_LIBRARIES=" + genIdeaArgs.map(_.path).mkString(",")) } } diff --git a/ci/test3.sh b/ci/test3.sh index b10da68d..5b3b1a28 100755 --- a/ci/test3.sh +++ b/ci/test3.sh @@ -13,7 +13,7 @@ target/bin/mill devAssembly # Second build & run tests using Mill -out/devAssembly/dest --all {core,scalalib,scalajslib}.test devAssembly -out/devAssembly/dest integration.test mill.integration.AmmoniteTests -out/devAssembly/dest integration.test "mill.integration.{AcyclicTests,BetterFilesTests,JawnTests}" -out/devAssembly/dest devAssembly +out/devAssembly/dest/out.jar --all {core,scalalib,scalajslib}.test devAssembly +out/devAssembly/dest/out.jar integration.test mill.integration.AmmoniteTests +out/devAssembly/dest/out.jar integration.test "mill.integration.{AcyclicTests,BetterFilesTests,JawnTests}" +out/devAssembly/dest/out.jar devAssembly diff --git a/ci/test_all.sh b/ci/test_all.sh index 558f76d6..74b6d203 100755 --- a/ci/test_all.sh +++ b/ci/test_all.sh @@ -12,4 +12,4 @@ sbt core/test scalalib/test scalajslib/test integration/test bin/test:assembly target/bin/mill --all {core,scalalib,scalajslib,integration}.test devAssembly # Second build & run tests using Mill -out/devAssembly/dest --all {core,scalalib,scalajslib,integration}.test devAssembly
\ No newline at end of file +out/devAssembly/dest/out.jar --all {core,scalalib,scalajslib,integration}.test devAssembly
\ No newline at end of file diff --git a/core/src/mill/modules/Jvm.scala b/core/src/mill/modules/Jvm.scala index d9abff86..fc1a1665 100644 --- a/core/src/mill/modules/Jvm.scala +++ b/core/src/mill/modules/Jvm.scala @@ -162,7 +162,7 @@ object Jvm { def createJar(inputPaths: Agg[Path], mainClass: Option[String] = None) (implicit ctx: Ctx.DestCtx): PathRef = { - val outputPath = ctx.dest + val outputPath = ctx.dest / "out.jar" rm(outputPath) mkdir(outputPath/up) @@ -200,7 +200,7 @@ object Jvm { mainClass: Option[String] = None, prependShellScript: String = "") (implicit ctx: Ctx.DestCtx): PathRef = { - val outputPath = ctx.dest + val outputPath = ctx.dest / "out.jar" rm(outputPath) if(inputPaths.nonEmpty) { @@ -313,7 +313,7 @@ sbt bin/test:assembly target/bin/mill devAssembly # Build Mill executable using the Mill executable generated by Mill itself -out/devAssembly/dest devAssembly +out/devAssembly/dest/out.jar devAssembly ``` Eventually, as Mill stabilizes, we will get rid of the SBT build entirely and diff --git a/scalalib/src/mill/scalalib/GenIdea.scala b/scalalib/src/mill/scalalib/GenIdea.scala index 45475368..a6551535 100644 --- a/scalalib/src/mill/scalalib/GenIdea.scala +++ b/scalalib/src/mill/scalalib/GenIdea.scala @@ -28,8 +28,11 @@ object GenIdea { def xmlFileLayout[T](evaluator: Evaluator[T], rootModule: mill.Module): Seq[(RelPath, scala.xml.Node)] = { + val modules = rootModule.millInternal.segmentsToModules.values + .collect{ case x: scalalib.ScalaModule => (x.millModuleSegments, x)} + .toSeq - val modules = rootModule.millInternal.segmentsToModules.values.collect{case x: scalalib.ScalaModule => (x.millModuleSegments, x)}.toSeq + val buildLibraryPaths = Agg.from(sys.props("MILL_BUILD_LIBRARIES").split(',').map(Path(_)).distinct) val resolved = for((path, mod) <- modules) yield { val Seq(resolvedCp: Loose.Agg[PathRef], resolvedSrcs: Loose.Agg[PathRef]) = @@ -40,19 +43,9 @@ object GenIdea { } val moduleLabels = modules.map(_.swap).toMap - val fixedFiles = Seq( - Tuple2(".idea"/"misc.xml", miscXmlTemplate()), - Tuple2( - ".idea"/"modules.xml", - allModulesXmlTemplate( - for((path, mod) <- modules) - yield moduleName(path) - ) - ), - Tuple2(".idea_modules"/"root.iml", rootXmlTemplate()) - ) - val allResolved = resolved.flatMap(_._2).distinct + + val allResolved = resolved.flatMap(_._2) ++ buildLibraryPaths val minResolvedLength = allResolved.map(_.segments.length).min val commonPrefix = allResolved.map(_.segments.take(minResolvedLength)) .transpose @@ -63,12 +56,37 @@ object GenIdea { .map{p => (p, p.segments.drop(commonPrefix).mkString("_"))} .toMap + val fixedFiles = Seq( + Tuple2(".idea"/"misc.xml", miscXmlTemplate()), + Tuple2(".idea"/"scala_settings.xml", scalaSettingsTemplate()), + Tuple2( + ".idea"/"modules.xml", + allModulesXmlTemplate( + for((path, mod) <- modules) + yield moduleName(path) + ) + ), + Tuple2( + ".idea_modules"/"root.iml", + rootXmlTemplate( + for(path <- buildLibraryPaths) + yield pathToLibName(path) + ) + ) + ) + val libraries = allResolved.map{path => val url = "jar://" + path + "!/" val name = pathToLibName(path) Tuple2(".idea"/'libraries/s"$name.xml", libraryXmlTemplate(name, url)) } + val buildLibraries = buildLibraryPaths.map{path => + val url = "jar://" + path + "!/" + val name = pathToLibName(path) + Tuple2(".idea"/'libraries/s"$name.xml", libraryXmlTemplate(name, url)) + } + val moduleFiles = resolved.map{ case (path, resolvedDeps, mod) => val Seq( resoucesPathRefs: Loose.Agg[PathRef], @@ -95,7 +113,8 @@ object GenIdea { ) Tuple2(".idea_modules"/s"${moduleName(path)}.iml", elem) } - fixedFiles ++ libraries ++ moduleFiles + + fixedFiles ++ libraries ++ moduleFiles ++ buildLibraries } @@ -111,6 +130,14 @@ object GenIdea { case (sb, Segment.Cross(s)) => sb.append("-").append(s.mkString("-")) }.mkString.toLowerCase() + def scalaSettingsTemplate() = { + + <project version="4"> + <component name="ScalaProjectSettings"> + <option name="scFileMode" value="Ammonite" /> + </component> + </project> + } def miscXmlTemplate() = { <project version="4"> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8 (1)" project-jdk-type="JavaSDK"> @@ -136,7 +163,7 @@ object GenIdea { </component> </project> } - def rootXmlTemplate() = { + def rootXmlTemplate(libNames: Strict.Agg[String]) = { <module type="JAVA_MODULE" version="4"> <component name="NewModuleRootManager"> <output url="file://$MODULE_DIR$/../out"/> @@ -144,6 +171,10 @@ object GenIdea { <exclude-output/> <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> + { + for(name <- libNames.toSeq.sorted) + yield <orderEntry type="library" name={name} level="project" /> + } </component> </module> } |