Skip to content

Revert #7766 and #7783. #7788

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions Sources/Build/BuildManifest/LLBuildManifestBuilder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,9 @@ public class LLBuildManifestBuilder {
}
}

try self.addTestDiscoveryGenerationCommand()
if self.plan.destinationBuildParameters.testingParameters.library == .xctest {
try self.addTestDiscoveryGenerationCommand()
}
try self.addTestEntryPointGenerationCommand()

// Create command for all products in the plan.
Expand Down Expand Up @@ -308,7 +310,9 @@ extension LLBuildManifestBuilder {

let outputs = testEntryPointTarget.target.sources.paths

let mainFileName = TestEntryPointTool.mainFileName
let mainFileName = TestEntryPointTool.mainFileName(
for: self.plan.destinationBuildParameters.testingParameters.library
)
guard let mainOutput = (outputs.first { $0.basename == mainFileName }) else {
throw InternalError("main output (\(mainFileName)) not found")
}
Expand Down
6 changes: 4 additions & 2 deletions Sources/Build/BuildPlan/BuildPlan+Product.swift
Original file line number Diff line number Diff line change
Expand Up @@ -275,8 +275,10 @@ extension BuildPlan {
}

// Add derived test targets, if necessary
if product.type == .test, let derivedTestTargets = derivedTestTargetsMap[product.id] {
staticTargets.append(contentsOf: derivedTestTargets)
if buildParameters.testingParameters.testProductStyle.requiresAdditionalDerivedTestTargets {
if product.type == .test, let derivedTestTargets = derivedTestTargetsMap[product.id] {
staticTargets.append(contentsOf: derivedTestTargets)
}
}

return (linkLibraries, staticTargets, systemModules, libraryBinaryPaths, providedLibraries, availableTools)
Expand Down
26 changes: 14 additions & 12 deletions Sources/Build/BuildPlan/BuildPlan+Test.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,13 @@ extension BuildPlan {
_ fileSystem: FileSystem,
_ observabilityScope: ObservabilityScope
) throws -> [(product: ResolvedProduct, discoveryTargetBuildDescription: SwiftModuleBuildDescription?, entryPointTargetBuildDescription: SwiftModuleBuildDescription)] {
var explicitlyEnabledDiscovery = false
var explicitlySpecifiedPath: AbsolutePath?
if case let .entryPointExecutable(caseExplicitlyEnabledDiscovery, caseExplicitlySpecifiedPath) = destinationBuildParameters.testingParameters.testProductStyle {
explicitlyEnabledDiscovery = caseExplicitlyEnabledDiscovery
explicitlySpecifiedPath = caseExplicitlySpecifiedPath
guard destinationBuildParameters.testingParameters.testProductStyle.requiresAdditionalDerivedTestTargets,
case .entryPointExecutable(let explicitlyEnabledDiscovery, let explicitlySpecifiedPath) =
destinationBuildParameters.testingParameters.testProductStyle
else {
throw InternalError("makeTestManifestTargets should not be used for build plan which does not require additional derived test targets")
}

let isEntryPointPathSpecifiedExplicitly = explicitlySpecifiedPath != nil

var isDiscoveryEnabledRedundantly = explicitlyEnabledDiscovery && !isEntryPointPathSpecifiedExplicitly
Expand Down Expand Up @@ -115,7 +116,7 @@ extension BuildPlan {
resolvedTargetDependencies: [ResolvedModule.Dependency]
) throws -> SwiftModuleBuildDescription {
let entryPointDerivedDir = destinationBuildParameters.buildPath.appending(components: "\(testProduct.name).derived")
let entryPointMainFileName = TestEntryPointTool.mainFileName
let entryPointMainFileName = TestEntryPointTool.mainFileName(for: destinationBuildParameters.testingParameters.library)
let entryPointMainFile = entryPointDerivedDir.appending(component: entryPointMainFileName)
let entryPointSources = Sources(paths: [entryPointMainFile], root: entryPointDerivedDir)

Expand Down Expand Up @@ -152,17 +153,18 @@ extension BuildPlan {
let swiftTargetDependencies: [Module.Dependency]
let resolvedTargetDependencies: [ResolvedModule.Dependency]

if destinationBuildParameters.triple.isDarwin() {
discoveryTargets = nil
swiftTargetDependencies = []
resolvedTargetDependencies = []
} else {
switch destinationBuildParameters.testingParameters.library {
case .xctest:
discoveryTargets = try generateDiscoveryTargets()
swiftTargetDependencies = [.module(discoveryTargets!.target, conditions: [])]
resolvedTargetDependencies = [.module(discoveryTargets!.resolved, conditions: [])]
case .swiftTesting:
discoveryTargets = nil
swiftTargetDependencies = testProduct.modules.map { .module($0.underlying, conditions: []) }
resolvedTargetDependencies = testProduct.modules.map { .module($0, conditions: []) }
}

if !destinationBuildParameters.triple.isDarwin(), let entryPointResolvedTarget = testProduct.testEntryPointModule {
if let entryPointResolvedTarget = testProduct.testEntryPointModule {
if isEntryPointPathSpecifiedExplicitly || explicitlyEnabledDiscovery {
if isEntryPointPathSpecifiedExplicitly {
// Allow using the explicitly-specified test entry point target, but still perform test discovery and thus declare a dependency on the discovery modules.
Expand Down
42 changes: 22 additions & 20 deletions Sources/Build/BuildPlan/BuildPlan.swift
Original file line number Diff line number Diff line change
Expand Up @@ -473,29 +473,31 @@ public class BuildPlan: SPMBuildCore.BuildPlan {
}

// Plan the derived test targets, if necessary.
let derivedTestTargets = try Self.makeDerivedTestTargets(
testProducts: productMap.values.filter {
$0.product.type == .test
},
destinationBuildParameters: destinationBuildParameters,
toolsBuildParameters: toolsBuildParameters,
shouldDisableSandbox: self.shouldDisableSandbox,
self.fileSystem,
self.observabilityScope
)
for item in derivedTestTargets {
var derivedTestTargets = [item.entryPointTargetBuildDescription.target]

targetMap[item.entryPointTargetBuildDescription.target.id] = .swift(
item.entryPointTargetBuildDescription
if destinationBuildParameters.testingParameters.testProductStyle.requiresAdditionalDerivedTestTargets {
let derivedTestTargets = try Self.makeDerivedTestTargets(
testProducts: productMap.values.filter {
$0.product.type == .test
},
destinationBuildParameters: destinationBuildParameters,
toolsBuildParameters: toolsBuildParameters,
shouldDisableSandbox: self.shouldDisableSandbox,
self.fileSystem,
self.observabilityScope
)
for item in derivedTestTargets {
var derivedTestTargets = [item.entryPointTargetBuildDescription.target]

if let discoveryTargetBuildDescription = item.discoveryTargetBuildDescription {
targetMap[discoveryTargetBuildDescription.target.id] = .swift(discoveryTargetBuildDescription)
derivedTestTargets.append(discoveryTargetBuildDescription.target)
}
targetMap[item.entryPointTargetBuildDescription.target.id] = .swift(
item.entryPointTargetBuildDescription
)

if let discoveryTargetBuildDescription = item.discoveryTargetBuildDescription {
targetMap[discoveryTargetBuildDescription.target.id] = .swift(discoveryTargetBuildDescription)
derivedTestTargets.append(discoveryTargetBuildDescription.target)
}

self.derivedTestTargetsMap[item.product.id] = derivedTestTargets
self.derivedTestTargetsMap[item.product.id] = derivedTestTargets
}
}

self.buildToolPluginInvocationResults = buildToolPluginInvocationResults
Expand Down
Loading