@@ -462,7 +462,7 @@ public final class UserToolchain: Toolchain {
462
462
// Windows uses a variable named SDKROOT to determine the root of
463
463
// the SDK. This is not the same value as the SDKROOT parameter
464
464
// in Xcode, however, the value represents a similar concept.
465
- if let SDKROOT = environment [ " SDKROOT " ] , let sdkroot = try ? AbsolutePath ( validating : SDKROOT ) {
465
+ if let sdkroot = getWindowsSDKRootDirectory ( from : environment ) {
466
466
var runtime : [ String ] = [ ]
467
467
var xctest : [ String ] = [ ]
468
468
var swiftTesting : [ String ] = [ ]
@@ -700,7 +700,7 @@ public final class UserToolchain: Toolchain {
700
700
}
701
701
702
702
if triple. isWindows ( ) {
703
- if let SDKROOT = environment [ " SDKROOT " ] , let root = try ? AbsolutePath ( validating : SDKROOT ) {
703
+ if let root = Self . getWindowsSDKRootDirectory ( from : environment ) {
704
704
if let settings = WindowsSDKSettings (
705
705
reading: root. appending ( " SDKSettings.plist " ) ,
706
706
observabilityScope: nil ,
@@ -873,19 +873,28 @@ public final class UserToolchain: Toolchain {
873
873
return . none
874
874
}
875
875
876
+ private static func getWindowsSDKRootDirectory( from environment: Environment ) -> AbsolutePath ? {
877
+ if let SDKROOT = environment [ " SDKROOT " ] , let sdkDir = try ? AbsolutePath ( validating: SDKROOT . removingTrailingBackslash) {
878
+ return sdkDir
879
+ }
880
+ return nil
881
+ }
882
+
876
883
private static func getWindowsPlatformInfo(
877
884
swiftSDK: SwiftSDK ,
878
885
environment: Environment ,
879
886
fileSystem: any FileSystem
880
887
) -> ( AbsolutePath , WindowsPlatformInfo ) ? {
881
- let sdkRoot : AbsolutePath
882
-
883
- if let sdkDir = swiftSDK. pathsConfiguration. sdkRootPath {
884
- sdkRoot = sdkDir
885
- } else if let SDKROOT = environment [ " SDKROOT " ] , let sdkDir = try ? AbsolutePath ( validating: SDKROOT) {
886
- sdkRoot = sdkDir
888
+ let sdkRoot : AbsolutePath ? = if let sdkDir = swiftSDK. pathsConfiguration. sdkRootPath {
889
+ sdkDir
890
+ } else if let sdkDir = getWindowsSDKRootDirectory ( from: environment) {
891
+ sdkDir
887
892
} else {
888
- return . none
893
+ nil
894
+ }
895
+
896
+ guard let sdkRoot else {
897
+ return nil
889
898
}
890
899
891
900
// The layout of the SDK is as follows:
@@ -1079,3 +1088,13 @@ public final class UserToolchain: Toolchain {
1079
1088
return `default`
1080
1089
}
1081
1090
}
1091
+
1092
+ extension String {
1093
+ fileprivate var removingTrailingBackslash : String {
1094
+ if self . hasSuffix ( " \\ " ) {
1095
+ return Self ( self . dropLast ( ) )
1096
+ } else {
1097
+ return self
1098
+ }
1099
+ }
1100
+ }
0 commit comments