Skip to content

Commit 78d4dc6

Browse files
authored
Merge pull request #2160 from aciidb0mb3r/moar-xctest
Support new XCTest overlays
2 parents 8db30a4 + a8c2b02 commit 78d4dc6

File tree

3 files changed

+28
-11
lines changed

3 files changed

+28
-11
lines changed

Sources/Commands/SwiftTestTool.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -477,8 +477,9 @@ public class SwiftTestTool: SwiftTool<TestToolOptions> {
477477
var env = try constructTestEnvironment(toolchain: try getToolchain(), options: self.options, buildParameters: self.buildParameters())
478478
// Add the sdk platform path if we have it. If this is not present, we
479479
// might always end up failing.
480-
if let sdkPlatformFrameworksPath = Destination.sdkPlatformFrameworkPath() {
481-
env["DYLD_FRAMEWORK_PATH"] = sdkPlatformFrameworksPath.pathString
480+
if let sdkPlatformFrameworksPath = Destination.sdkPlatformFrameworkPaths() {
481+
env["DYLD_FRAMEWORK_PATH"] = sdkPlatformFrameworksPath.fwk.pathString
482+
env["DYLD_LIBRARY_PATH"] = sdkPlatformFrameworksPath.lib.pathString
482483
}
483484
try Process.checkNonZeroExit(arguments: args, environment: env)
484485
// Read the temporary file's content.

Sources/TestSupport/Resources.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class Resources: ManifestResourceProvider {
3636

3737
#if os(macOS)
3838
public var sdkPlatformFrameworksPath: AbsolutePath {
39-
return Destination.sdkPlatformFrameworkPath()!
39+
return Destination.sdkPlatformFrameworkPaths()!.fwk
4040
}
4141
#endif
4242

Sources/Workspace/Destination.swift

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,21 @@ public struct Destination {
103103
}
104104

105105
// Compute common arguments for clang and swift.
106-
// This is currently just frameworks path.
107-
let commonArgs = Destination.sdkPlatformFrameworkPath(environment: environment).map({ ["-F", $0.pathString] }) ?? []
106+
var extraCCFlags: [String] = []
107+
var extraSwiftCFlags: [String] = []
108+
if let sdkPaths = Destination.sdkPlatformFrameworkPaths(environment: environment) {
109+
extraCCFlags += ["-F", sdkPaths.fwk.pathString]
110+
extraSwiftCFlags += ["-F", sdkPaths.fwk.pathString]
111+
extraSwiftCFlags += ["-I", sdkPaths.lib.pathString]
112+
extraSwiftCFlags += ["-L", sdkPaths.lib.pathString]
113+
}
108114

109115
return Destination(
110116
target: hostTargetTriple,
111117
sdk: sdkPath,
112118
binDir: binDir,
113-
extraCCFlags: commonArgs,
114-
extraSwiftCFlags: commonArgs,
119+
extraCCFlags: extraCCFlags,
120+
extraSwiftCFlags: extraSwiftCFlags,
115121
extraCPPFlags: ["-lc++"]
116122
)
117123
#else
@@ -127,21 +133,31 @@ public struct Destination {
127133
}
128134

129135
/// Returns macosx sdk platform framework path.
130-
public static func sdkPlatformFrameworkPath(environment: [String:String] = Process.env) -> AbsolutePath? {
136+
public static func sdkPlatformFrameworkPaths(
137+
environment: [String:String] = Process.env
138+
) -> (fwk: AbsolutePath, lib: AbsolutePath)? {
131139
if let path = _sdkPlatformFrameworkPath {
132140
return path
133141
}
134142
let platformPath = try? Process.checkNonZeroExit(
135-
arguments: ["xcrun", "--sdk", "macosx", "--show-sdk-platform-path"], environment: environment).spm_chomp()
143+
arguments: ["xcrun", "--sdk", "macosx", "--show-sdk-platform-path"],
144+
environment: environment).spm_chomp()
136145

137146
if let platformPath = platformPath, !platformPath.isEmpty {
138-
_sdkPlatformFrameworkPath = AbsolutePath(platformPath).appending(
147+
// For XCTest framework.
148+
let fwk = AbsolutePath(platformPath).appending(
139149
components: "Developer", "Library", "Frameworks")
150+
151+
// For XCTest Swift library.
152+
let lib = AbsolutePath(platformPath).appending(
153+
components: "Developer", "usr", "lib")
154+
155+
_sdkPlatformFrameworkPath = (fwk, lib)
140156
}
141157
return _sdkPlatformFrameworkPath
142158
}
143159
/// Cache storage for sdk platform path.
144-
private static var _sdkPlatformFrameworkPath: AbsolutePath? = nil
160+
private static var _sdkPlatformFrameworkPath: (fwk: AbsolutePath, lib: AbsolutePath)? = nil
145161

146162
/// Target triple for the host system.
147163
private static let hostTargetTriple = Triple.hostTriple

0 commit comments

Comments
 (0)