Skip to content

Commit 12500d3

Browse files
Minor refacto of JavaHomeInfo
Useful in subsequent commits, adding a method on it
1 parent 2cf64ad commit 12500d3

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

modules/core/src/main/scala/scala/build/internals/OsLibc.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,18 @@ object OsLibc {
8282
s"${JavaHome.systemId}|$defaultJvm0"
8383
}
8484

85+
def javaVersion(javaCmd: String): Int = {
86+
val javaVersionOutput = os.proc(javaCmd, "-version").call(
87+
cwd = os.pwd,
88+
stdout = os.Pipe,
89+
stderr = os.Pipe,
90+
mergeErrIntoOut = true
91+
).out.text().trim()
92+
parseJavaVersion(javaVersionOutput).getOrElse {
93+
throw new Exception(s"Could not parse java version from output: $javaVersionOutput")
94+
}
95+
}
96+
8597
def javaHomeVersion(javaHome: os.Path): (Int, String) = {
8698
val ext = if (Properties.isWin) ".exe" else ""
8799
val javaCmd = (javaHome / "bin" / s"java$ext").toString

modules/options/src/main/scala/scala/build/options/BuildOptions.scala

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@ import scala.build.interactive.Interactive.*
1717
import scala.build.internal.Constants.*
1818
import scala.build.internal.CsLoggerUtil.*
1919
import scala.build.internal.Regexes.scala3NightlyNicknameRegex
20-
import scala.build.internal.{Constants, StableScalaVersion}
20+
import scala.build.internal.{Constants, OsLibc, StableScalaVersion}
2121
import scala.build.options.validation.BuildOptionsRule
2222
import scala.build.{Artifacts, Logger, Os, Position, Positioned}
2323
import scala.concurrent.duration.*
24+
import scala.util.Properties
2425

2526
final case class BuildOptions(
2627
scalaOptions: ScalaOptions = ScalaOptions(),
@@ -173,7 +174,7 @@ final case class BuildOptions(
173174
lazy val archiveCache: ArchiveCache[Task] = ArchiveCache().withCache(finalCache)
174175

175176
private lazy val javaCommand0: Positioned[JavaHomeInfo] =
176-
javaOptions.javaHome(archiveCache, finalCache, internal.verbosityOrDefault)
177+
javaHomeLocation().map(JavaHomeInfo(_))
177178

178179
def javaHomeLocationOpt(): Option[Positioned[os.Path]] =
179180
javaOptions.javaHomeLocationOpt(archiveCache, finalCache, internal.verbosityOrDefault)
@@ -544,6 +545,15 @@ object BuildOptions {
544545
version: Int
545546
)
546547

548+
object JavaHomeInfo {
549+
def apply(javaHome: os.Path): JavaHomeInfo = {
550+
val ext = if (Properties.isWin) ".exe" else ""
551+
val javaCmd = (javaHome / "bin" / s"java$ext").toString
552+
val javaVersion = OsLibc.javaVersion(javaCmd)
553+
JavaHomeInfo(javaHome, javaCmd, javaVersion)
554+
}
555+
}
556+
547557
implicit val hasHashData: HasHashData[BuildOptions] = HasHashData.derive
548558
implicit val monoid: ConfigMonoid[BuildOptions] = ConfigMonoid.derive
549559
}

0 commit comments

Comments
 (0)