From 2a69fbe385b1c455cedf0e9c689fc9f6b5c36323 Mon Sep 17 00:00:00 2001 From: Piotr Chabelski Date: Tue, 29 Sep 2026 07:36:07 +0200 Subject: [PATCH 1/2] Migrate CoursierCacheProcessor & `scala3-graal` to Scala CLI's old `scala3-graal-processor` --- build.mill | 4 +++- .../src/CoursierCacheProcessor.scala | 17 ----------------- 2 files changed, 3 insertions(+), 18 deletions(-) delete mode 100644 scala3-graal-processor/src/CoursierCacheProcessor.scala diff --git a/build.mill b/build.mill index 93c4790..b9c770d 100644 --- a/build.mill +++ b/build.mill @@ -101,7 +101,9 @@ object `scala3-graal-processor` extends JavaClassNameModule { override def mainClass: T[Option[String]] = Some("scala.cli.graal.CoursierCacheProcessor") override def mvnDeps: T[Seq[Dep]] = downgradeJline { - super.mvnDeps() ++ Seq(mvn"org.virtuslab.scala-cli::scala3-graal:${Versions.scalaCli}") + super.mvnDeps() ++ Seq( + mvn"org.virtuslab.scala-cli::scala3-graal-processor:${Versions.scalaCli}" + ) } } diff --git a/scala3-graal-processor/src/CoursierCacheProcessor.scala b/scala3-graal-processor/src/CoursierCacheProcessor.scala deleted file mode 100644 index c8b747a..0000000 --- a/scala3-graal-processor/src/CoursierCacheProcessor.scala +++ /dev/null @@ -1,17 +0,0 @@ -// copied from https://github.com/VirtusLab/scala-cli/blob/b19086697401827a6f8185040ceb248d8865bf21/modules/scala3-graal-processor/src/scala/cli/graal/CoursierCacheProcessor.scala -// remove once the scala3-graal-processor module of Scala CLI is published, and can be used from here - -package scala.cli.graal - -import java.io.File - -object CoursierCacheProcessor { - def main(args: Array[String]) = { - val List(cacheDir, classpath) = args.toList - val cache = DirCache(os.Path(cacheDir, os.pwd)) - - val newCp = BytecodeProcessor.processClassPath(classpath, cache).map(_.nioPath) - - println(newCp.mkString(File.pathSeparator)) - } -} From 1b991d4835c4f7c49b6b35ecbe60981be57ece4d Mon Sep 17 00:00:00 2001 From: Piotr Chabelski Date: Tue, 29 Sep 2026 07:46:32 +0200 Subject: [PATCH 2/2] Remove the (now unnecessary) `scala3-graal-processor` dependency --- build.mill | 34 +--------------------------------- 1 file changed, 1 insertion(+), 33 deletions(-) diff --git a/build.mill b/build.mill index b9c770d..7e2443b 100644 --- a/build.mill +++ b/build.mill @@ -10,8 +10,6 @@ import io.github.alexarchambault.millnativeimage.upload.Upload import coursier.core.{Dependency, DependencyManagement} import coursier.version.VersionConstraint -import java.io.File - import scala.annotation.unused import scala.concurrent.duration.DurationInt import com.goyeau.mill.scalafix.ScalafixModule @@ -25,7 +23,6 @@ import mill.util.{Tasks, VcsVersion} object Versions { def scala = "3.3.8" - def scalaCli = "1.9.1" def graalVmVersion = "22.3.1" def coursier = "2.1.25-M19" def osLib = "0.11.8" @@ -97,39 +94,10 @@ trait JavaClassNameModule extends ScalaModule with ScalafixModule { override def mvnDeps: T[Seq[Dep]] = downgradeJline(super.mvnDeps()) } -object `scala3-graal-processor` extends JavaClassNameModule { - override def mainClass: T[Option[String]] = Some("scala.cli.graal.CoursierCacheProcessor") - - override def mvnDeps: T[Seq[Dep]] = downgradeJline { - super.mvnDeps() ++ Seq( - mvn"org.virtuslab.scala-cli::scala3-graal-processor:${Versions.scalaCli}" - ) - } -} - object `java-class-name` extends JavaClassNameModule with JavaMainClassNativeImage with JavaClassNamePublishModule { def nativeImageClassPath: T[Seq[PathRef]] = Task { - // adapted from https://github.com/VirtusLab/scala-cli/blob/b19086697401827a6f8185040ceb248d8865bf21/build.sc#L732-L744 - - val classpath = runClasspath().map(_.path).mkString(File.pathSeparator) - val cache = Task.dest / "native-cp" - // `scala3-graal-processor`.run() do not give me output and I cannot pass dynamically computed values like classpath - System.err.println("Calling scala3 graal processor on") - for (f <- classpath.split(File.pathSeparator)) - System.err.println(s" $f") - val res = mill.util.Jvm.callProcess( - mainClass = `scala3-graal-processor`.finalMainClass(), - classPath = `scala3-graal-processor`.runClasspath().map(_.path), - mainArgs = Seq(cache.toNIO.toString, classpath) - ) - val cp = res.out.trim() - if cp.isBlank then System.err.println("class path can't be empty!") - assert(cp.nonEmpty) - System.err.println("Processed class path:") - for (f <- cp.split(File.pathSeparator)) - System.err.println(s" $f") - cp.split(File.pathSeparator).toSeq.map(p => mill.PathRef(os.Path(p))) + runClasspath() } override def mvnDeps: T[Seq[Dep]] = downgradeJline {