Skip to content

Commit 6492a87

Browse files
committed
Add meaningful 'minimum JVM version' to the bloop config
1 parent a932138 commit 6492a87

File tree

4 files changed

+24
-23
lines changed

4 files changed

+24
-23
lines changed

modules/cli/src/main/scala/scala/cli/commands/bloop/Bloop.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ object Bloop extends ScalaCommand[BloopOptions] {
3535
)
3636
val options = sharedOptions.buildOptions(false, None).orExit(opts.global.logging.logger)
3737

38-
val javaCmd = opts.compilationServer.bloopJvm
38+
val javaHomeInfo = opts.compilationServer.bloopJvm
3939
.map(JvmUtils.downloadJvm(_, options))
4040
.getOrElse {
4141
JvmUtils.getJavaCmdVersionOrHigher(17, options)
@@ -45,9 +45,9 @@ object Bloop extends ScalaCommand[BloopOptions] {
4545
opts.global.logging.logger,
4646
sharedOptions.coursierCache,
4747
opts.global.logging.verbosity,
48-
javaCmd,
48+
javaHomeInfo.javaCommand,
4949
Directories.directories,
50-
Some(17)
50+
Some(javaHomeInfo.version)
5151
)
5252
}
5353

modules/cli/src/main/scala/scala/cli/commands/pgp/PgpExternalCommand.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ object PgpExternalCommand {
138138
scalaCliSigningJvmVersion,
139139
jvmOptions,
140140
coursierOptions
141-
).orThrow
141+
).orThrow.javaCommand
142142

143143
launcher(
144144
cache,
@@ -159,7 +159,7 @@ object PgpExternalCommand {
159159
JvmUtils.getJavaCmdVersionOrHigher(
160160
scalaCliSigningJvmVersion,
161161
buildOptions
162-
).orThrow
162+
).orThrow.javaCommand
163163

164164
launcher(
165165
cache,

modules/cli/src/main/scala/scala/cli/commands/shared/SharedOptions.scala

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import scala.build.internal.util.ConsoleUtils.ScalaCliConsole
2626
import scala.build.internal.util.WarningMessages
2727
import scala.build.internal.{Constants, FetchExternalBinary, ObjectCodeWrapper, OsLibc, Util}
2828
import scala.build.options.ScalaVersionUtil.fileWithTtl0
29-
import scala.build.options.{ComputeVersion, Platform, ScalacOpt, ShadowingSeq}
29+
import scala.build.options.{BuildOptions, ComputeVersion, Platform, ScalacOpt, ShadowingSeq}
3030
import scala.build.preprocessing.directives.ClasspathUtils.*
3131
import scala.build.preprocessing.directives.Toolkit
3232
import scala.build.options as bo
@@ -520,27 +520,28 @@ final case class SharedOptions(
520520

521521
def bloopRifleConfig(): Either[BuildException, BloopRifleConfig] = either {
522522
val options = value(buildOptions(false, None))
523-
lazy val defaultJvmCmd = value {
523+
lazy val defaultJvmHome = value {
524524
JvmUtils.downloadJvm(OsLibc.defaultJvm(OsLibc.jvmIndexOs), options)
525525
}
526526

527-
val javaCmd = compilationServer.bloopJvm
527+
val javaHomeInfo = compilationServer.bloopJvm
528528
.map(jvmId => value(JvmUtils.downloadJvm(jvmId, options)))
529529
.orElse {
530530
for (javaHome <- options.javaHomeLocationOpt()) yield {
531531
val (javaHomeVersion, javaHomeCmd) = OsLibc.javaHomeVersion(javaHome.value)
532-
if (javaHomeVersion >= 17) javaHomeCmd
533-
else defaultJvmCmd
532+
if (javaHomeVersion >= 17)
533+
BuildOptions.JavaHomeInfo(javaHome.value, javaHomeCmd, javaHomeVersion)
534+
else defaultJvmHome
534535
}
535-
}.getOrElse(defaultJvmCmd)
536+
}.getOrElse(defaultJvmHome)
536537

537538
compilationServer.bloopRifleConfig(
538539
logging.logger,
539540
coursierCache,
540541
logging.verbosity,
541-
javaCmd,
542+
javaHomeInfo.javaCommand,
542543
Directories.directories,
543-
Some(17)
544+
Some(javaHomeInfo.version)
544545
)
545546
}
546547

modules/cli/src/main/scala/scala/cli/commands/util/JvmUtils.scala

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import scala.build.EitherCps.{either, value}
77
import scala.build.errors.{BuildException, JvmDownloadError, UnrecognizedDebugModeError}
88
import scala.build.internal.CsLoggerUtil.*
99
import scala.build.internal.OsLibc
10+
import scala.build.options.BuildOptions.JavaHomeInfo
1011
import scala.build.options.{JavaOpt, JavaOptions, ShadowingSeq}
1112
import scala.build.{Os, Position, Positioned, options as bo}
1213
import scala.cli.commands.shared.{CoursierOptions, SharedJvmOptions, SharedOptions}
@@ -67,38 +68,37 @@ object JvmUtils {
6768
)
6869
}
6970

70-
def downloadJvm(jvmId: String, options: bo.BuildOptions): Either[BuildException, String] = {
71+
def downloadJvm(jvmId: String, options: bo.BuildOptions): Either[BuildException, JavaHomeInfo] = {
7172
implicit val ec: ExecutionContextExecutorService = options.finalCache.ec
7273
val javaHomeManager = options.javaHomeManager
7374
.withMessage(s"Downloading JVM $jvmId")
7475
val logger = javaHomeManager.cache
7576
.flatMap(_.archiveCache.cache.loggerOpt)
7677
.getOrElse(_root_.coursier.cache.CacheLogger.nop)
7778

78-
val javaHomePathOrError = Try(javaHomeManager.get(jvmId).unsafeRun()) match {
79+
val javaHomeOrError = Try(javaHomeManager.get(jvmId).unsafeRun()) match {
7980
case Success(path) => Right(path)
8081
case Failure(e) => Left(JvmDownloadError(jvmId, e))
8182
}
8283

8384
for {
84-
javaHomePath <- javaHomePathOrError
85+
javaHome <- javaHomeOrError
8586
} yield {
86-
val javaHome = os.Path(javaHomePath)
87-
val ext = if (Properties.isWin) ".exe" else ""
88-
val javaCmd = (javaHome / "bin" / s"java$ext").toString
89-
javaCmd
87+
val javaHomePath = os.Path(javaHome)
88+
val (javaVersion, javaCmd) = OsLibc.javaHomeVersion(javaHomePath)
89+
JavaHomeInfo(javaHomePath, javaCmd, javaVersion)
9090
}
9191
}
9292

9393
def getJavaCmdVersionOrHigher(
9494
javaVersion: Int,
9595
options: bo.BuildOptions
96-
): Either[BuildException, String] = {
96+
): Either[BuildException, JavaHomeInfo] = {
9797
val javaHomeCmdOpt = for {
9898
javaHome <- options.javaHomeLocationOpt()
9999
(javaHomeVersion, javaHomeCmd) = OsLibc.javaHomeVersion(javaHome.value)
100100
if javaHomeVersion >= javaVersion
101-
} yield javaHomeCmd
101+
} yield JavaHomeInfo(javaHome.value, javaHomeCmd, javaHomeVersion)
102102

103103
javaHomeCmdOpt match {
104104
case Some(cmd) => Right(cmd)
@@ -110,7 +110,7 @@ object JvmUtils {
110110
javaVersion: Int,
111111
jvmOpts: SharedJvmOptions,
112112
coursierOpts: CoursierOptions
113-
): Either[BuildException, String] = {
113+
): Either[BuildException, JavaHomeInfo] = {
114114
val sharedOpts = SharedOptions(jvm = jvmOpts, coursier = coursierOpts)
115115

116116
for {

0 commit comments

Comments
 (0)