Skip to content

Commit f6224e2

Browse files
committed
.
1 parent 54e2985 commit f6224e2

1 file changed

Lines changed: 53 additions & 1 deletion

File tree

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

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ object MsvcEnvironment {
4848
logger.debug(s"not found: vcvars64.bat")
4949
-1
5050
case Some(vcvars) =>
51-
logger.debug(s"Using vcvars script $vcvars")
51+
logger.message(s"Using vcvars script: $vcvars")
52+
logger.message(s"Working directory: $actualWorkingDir")
5253

5354
val msvcEnv: Map[String, String] = captureVcvarsEnv(vcvars, actualWorkingDir, logger)
5455

@@ -76,6 +77,49 @@ object MsvcEnvironment {
7677
// show aliased drive map
7778
getSubstMappings.foreach((k, v) => logger.message(s"substMap $k: -> $v"))
7879

80+
// Log critical MSVC variables at message level for diagnosis
81+
val vsInstallDir = msvcEnv.get("VSINSTALLDIR").orElse(msvcEnv.get("vsinstalldir"))
82+
val vcInstallDir = msvcEnv.get("VCINSTALLDIR").orElse(msvcEnv.get("vcinstalldir"))
83+
logger.message(s"VSINSTALLDIR=${vsInstallDir.getOrElse("<not set>")}")
84+
logger.message(s"VCINSTALLDIR=${vcInstallDir.getOrElse("<not set>")}")
85+
logger.message(s"Environment has ${msvcEnv.size} variables")
86+
87+
// Verify VSINSTALLDIR path exists
88+
vsInstallDir.foreach { dir =>
89+
val path = os.Path(dir.stripSuffix("\\"), os.pwd)
90+
logger.message(s"VSINSTALLDIR exists: ${os.exists(path)}")
91+
}
92+
93+
// Log PATH - check both casings and show what we find
94+
val pathValue =
95+
msvcEnv.get("PATH").orElse(msvcEnv.get("Path")).orElse(msvcEnv.get("path"))
96+
logger.message(
97+
s"PATH found: ${pathValue.isDefined}, length: ${pathValue.map(_.length).getOrElse(0)}"
98+
)
99+
pathValue.foreach { pv =>
100+
val pathEntries = pv.split(";")
101+
val msvcPathEntries = pathEntries.filter(_.toLowerCase.contains("msvc"))
102+
val vcPathEntries = pathEntries.filter(_.toLowerCase.contains("\\vc\\"))
103+
logger.message(
104+
s"MSVC PATH entries: ${msvcPathEntries.length}, VC entries: ${vcPathEntries.length}"
105+
)
106+
if (vcPathEntries.nonEmpty)
107+
logger.message(s"First VC PATH: ${vcPathEntries.head}")
108+
}
109+
// Also check what keys look like PATH
110+
val pathLikeKeys = msvcEnv.keys.filter(_.toLowerCase.contains("path")).toSeq
111+
logger.message(s"PATH-like keys in env: ${pathLikeKeys.mkString(", ")}")
112+
113+
// Direct check of TreeMap case-insensitive behavior
114+
pathLikeKeys.headOption.foreach { actualKey =>
115+
val directGet = msvcEnv.get(actualKey)
116+
val upperGet = msvcEnv.get(actualKey.toUpperCase)
117+
val lowerGet = msvcEnv.get(actualKey.toLowerCase)
118+
logger.message(
119+
s"TreeMap lookup test - direct: ${directGet.isDefined}, upper: ${upperGet.isDefined}, lower: ${lowerGet.isDefined}"
120+
)
121+
}
122+
79123
val finalEnv =
80124
msvcEnv +
81125
("GRAALVM_ARGUMENT_VECTOR_PROGRAM_NAME" -> "native-image")
@@ -113,6 +157,7 @@ object MsvcEnvironment {
113157
command
114158
}
115159

160+
logger.message(s"Running: ${updatedCommand.head}")
116161
logger.debug(s"native-image w/args: $updatedCommand")
117162

118163
val result =
@@ -190,6 +235,13 @@ object MsvcEnvironment {
190235
case _ => None
191236
}
192237

238+
// Debug: log if PATH was found during parsing
239+
val pathInEnv = envLines.find(_.toLowerCase.startsWith("path="))
240+
if pathInEnv.isEmpty then
241+
logger.message("WARNING: PATH not found in vcvars output!")
242+
logger.message(s"First 10 env lines: ${envLines.take(10).mkString("; ")}")
243+
logger.message(s"Last 10 env lines: ${envLines.takeRight(10).mkString("; ")}")
244+
193245
if logger.verbosity > 0 then
194246
debugLines.foreach(dbg => logger.debug(s"$dbg"))
195247
debugLines.find(_.contains("Writing post-execution environment to ")) match {

0 commit comments

Comments
 (0)