Skip to content

Commit 1cdd335

Browse files
committed
Merge branch 'main' into 6.2-merge-main
2 parents a67efeb + bdfd754 commit 1cdd335

File tree

149 files changed

+2883
-944
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

149 files changed

+2883
-944
lines changed

Sources/Build/BuildDescription/ModuleBuildDescription.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,4 +214,14 @@ extension ModuleBuildDescription {
214214
}
215215
return dependencies
216216
}
217+
218+
package func recursiveLinkDependencies(using plan: BuildPlan) -> [Dependency] {
219+
var dependencies: [Dependency] = []
220+
plan.traverseLinkDependencies(of: self) { product, _, description in
221+
dependencies.append(.product(product, description))
222+
} onModule: { module, _, description in
223+
dependencies.append(.module(module, description))
224+
}
225+
return dependencies
226+
}
217227
}

Sources/Build/BuildDescription/SwiftModuleBuildDescription.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -969,6 +969,12 @@ public final class SwiftModuleBuildDescription {
969969
break
970970
}
971971

972+
if bundlePath != nil {
973+
compilationConditions += ["-DSWIFT_MODULE_RESOURCE_BUNDLE_AVAILABLE"]
974+
} else {
975+
compilationConditions += ["-DSWIFT_MODULE_RESOURCE_BUNDLE_UNAVAILABLE"]
976+
}
977+
972978
return compilationConditions
973979
}
974980

Sources/Build/BuildPlan/BuildPlan+Swift.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ extension BuildPlan {
2424
func plan(swiftTarget: SwiftModuleBuildDescription) throws {
2525
// We need to iterate recursive dependencies because Swift compiler needs to see all the targets a target
2626
// builds against
27-
for case .module(let dependency, let description) in swiftTarget.recursiveDependencies(using: self) {
27+
for case .module(let dependency, let description) in swiftTarget.recursiveLinkDependencies(using: self) {
2828
switch dependency.underlying {
2929
case let underlyingTarget as ClangModule where underlyingTarget.type == .library:
3030
guard case let .clang(target)? = description else {

Sources/Build/BuildPlan/BuildPlan.swift

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1230,6 +1230,82 @@ extension BuildPlan {
12301230
}
12311231
}
12321232
}
1233+
1234+
// Only follow link time dependencies, i.e. skip dependencies on macros and plugins
1235+
// except for testTargets that depend on macros.
1236+
package func traverseLinkDependencies(
1237+
of description: ModuleBuildDescription,
1238+
onProduct: (ResolvedProduct, BuildParameters.Destination, ProductBuildDescription?) -> Void,
1239+
onModule: (ResolvedModule, BuildParameters.Destination, ModuleBuildDescription?) -> Void
1240+
) {
1241+
var visited = Set<TraversalNode>()
1242+
func successors(
1243+
for product: ResolvedProduct,
1244+
destination: Destination
1245+
) -> [TraversalNode] {
1246+
product.modules.map { module in
1247+
TraversalNode(module: module, context: destination)
1248+
}.filter {
1249+
visited.insert($0).inserted
1250+
}
1251+
}
1252+
1253+
func successors(
1254+
for parentModule: ResolvedModule,
1255+
destination: Destination
1256+
) -> [TraversalNode] {
1257+
parentModule
1258+
.dependencies(satisfying: description.buildParameters.buildEnvironment)
1259+
.reduce(into: [TraversalNode]()) { partial, dependency in
1260+
switch dependency {
1261+
case .product(let product, _):
1262+
guard product.type != .plugin else {
1263+
return
1264+
}
1265+
1266+
guard product.type != .macro || parentModule.type == .test else {
1267+
return
1268+
}
1269+
1270+
partial.append(.init(product: product, context: destination))
1271+
case .module(let childModule, _):
1272+
guard childModule.type != .plugin else {
1273+
return
1274+
}
1275+
1276+
guard childModule.type != .macro || parentModule.type == .test else {
1277+
return
1278+
}
1279+
1280+
partial.append(.init(module: childModule, context: destination))
1281+
}
1282+
}.filter {
1283+
visited.insert($0).inserted
1284+
}
1285+
}
1286+
1287+
depthFirstSearch(successors(for: description.module, destination: description.destination)) {
1288+
switch $0 {
1289+
case .module(let module, let destination):
1290+
successors(for: module, destination: destination)
1291+
case .product(let product, let destination):
1292+
successors(for: product, destination: destination)
1293+
case .package:
1294+
[]
1295+
}
1296+
} onNext: { module, _ in
1297+
switch module {
1298+
case .package:
1299+
break
1300+
1301+
case .product(let product, let destination):
1302+
onProduct(product, destination, self.description(for: product, context: destination))
1303+
1304+
case .module(let module, let destination):
1305+
onModule(module, destination, self.description(for: module, context: destination))
1306+
}
1307+
}
1308+
}
12331309
}
12341310

12351311
extension Basics.Diagnostic {

Sources/Build/LLBuildDescription.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import SPMBuildCore
1717
import PackageGraph
1818
import PackageModel
1919

20+
import enum PackageModel.TraitConfiguration
21+
2022
import struct TSCBasic.ByteString
2123

2224
/// Contains the description of the build that is needed during the execution.

Sources/Commands/PackageCommands/EditCommands.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ extension SwiftPackageCommand {
3737
var packageIdentity: String
3838

3939
func run(_ swiftCommandState: SwiftCommandState) async throws {
40-
try await swiftCommandState.resolve(nil)
40+
try await swiftCommandState.resolve()
4141
let workspace = try swiftCommandState.getActiveWorkspace()
4242

4343
// Put the dependency in edit mode.
@@ -66,7 +66,7 @@ extension SwiftPackageCommand {
6666
var packageIdentity: String
6767

6868
func run(_ swiftCommandState: SwiftCommandState) async throws {
69-
try await swiftCommandState.resolve(nil)
69+
try await swiftCommandState.resolve()
7070
let workspace = try swiftCommandState.getActiveWorkspace()
7171

7272
try await workspace.unedit(

Sources/Commands/PackageCommands/Resolve.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import CoreCommands
1616
import TSCUtility
1717
import Workspace
1818

19-
import struct PackageGraph.TraitConfiguration
19+
import enum PackageModel.TraitConfiguration
2020

2121
extension SwiftPackageCommand {
2222
struct ResolveOptions: ParsableArguments {

Sources/CoreCommands/BuildSystemSupport.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import class Basics.ObservabilityScope
2222
import struct PackageGraph.ModulesGraph
2323
import struct PackageLoading.FileRuleDescription
2424
import protocol TSCBasic.OutputByteStream
25+
import enum PackageModel.TraitConfiguration
2526

2627
private struct NativeBuildSystemFactory: BuildSystemFactory {
2728
let swiftCommandState: SwiftCommandState

Sources/CoreCommands/Options.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import struct PackageModel.PackageIdentity
2727
import enum PackageModel.Sanitizer
2828
@_spi(SwiftPMInternal) import struct PackageModel.SwiftSDK
2929

30-
import struct PackageGraph.TraitConfiguration
30+
import enum PackageModel.TraitConfiguration
3131

3232
import struct SPMBuildCore.BuildParameters
3333
import struct SPMBuildCore.BuildSystemProvider

Sources/CoreCommands/SwiftCommandState.swift

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -214,14 +214,14 @@ public final class SwiftCommandState {
214214
}
215215

216216
/// Get the current workspace root object.
217-
public func getWorkspaceRoot(traitConfiguration: TraitConfiguration? = nil) throws -> PackageGraphRootInput {
217+
public func getWorkspaceRoot(traitConfiguration: TraitConfiguration = .default) throws -> PackageGraphRootInput {
218218
let packages: [AbsolutePath]
219219

220220
if let workspace = options.locations.multirootPackageDataFile {
221221
packages = try self.workspaceLoaderProvider(self.fileSystem, self.observabilityScope)
222222
.load(workspace: workspace)
223223
} else {
224-
packages = [try getPackageRoot()]
224+
packages = try [self.getPackageRoot()]
225225
}
226226

227227
return PackageGraphRootInput(packages: packages, traitConfiguration: traitConfiguration)
@@ -457,10 +457,7 @@ public final class SwiftCommandState {
457457
}
458458

459459
/// Returns the currently active workspace.
460-
public func getActiveWorkspace(
461-
emitDeprecatedConfigurationWarning: Bool = false,
462-
traitConfiguration: TraitConfiguration? = nil
463-
) throws -> Workspace {
460+
public func getActiveWorkspace(emitDeprecatedConfigurationWarning: Bool = false, traitConfiguration: TraitConfiguration = .default) throws -> Workspace {
464461
if let workspace = _workspace {
465462
return workspace
466463
}
@@ -525,9 +522,7 @@ public final class SwiftCommandState {
525522
return workspace
526523
}
527524

528-
public func getRootPackageInformation(traitConfiguration: TraitConfiguration? = nil) async throws
529-
-> (dependencies: [PackageIdentity: [PackageIdentity]], targets: [PackageIdentity: [String]])
530-
{
525+
public func getRootPackageInformation(traitConfiguration: TraitConfiguration = .default) async throws -> (dependencies: [PackageIdentity: [PackageIdentity]], targets: [PackageIdentity: [String]]) {
531526
let workspace = try self.getActiveWorkspace(traitConfiguration: traitConfiguration)
532527
let root = try self.getWorkspaceRoot(traitConfiguration: traitConfiguration)
533528
let rootManifests = try await workspace.loadRootManifests(
@@ -652,7 +647,7 @@ public final class SwiftCommandState {
652647
}
653648

654649
/// Resolve the dependencies.
655-
public func resolve(_ traitConfiguration: TraitConfiguration?) async throws {
650+
public func resolve(_ traitConfiguration: TraitConfiguration = .default) async throws {
656651
let workspace = try getActiveWorkspace(traitConfiguration: traitConfiguration)
657652
let root = try getWorkspaceRoot(traitConfiguration: traitConfiguration)
658653

@@ -682,7 +677,7 @@ public final class SwiftCommandState {
682677
) async throws -> ModulesGraph {
683678
try await self.loadPackageGraph(
684679
explicitProduct: explicitProduct,
685-
traitConfiguration: nil,
680+
traitConfiguration: .default,
686681
testEntryPointPath: testEntryPointPath
687682
)
688683
}
@@ -695,7 +690,7 @@ public final class SwiftCommandState {
695690
@discardableResult
696691
package func loadPackageGraph(
697692
explicitProduct: String? = nil,
698-
traitConfiguration: TraitConfiguration? = nil,
693+
traitConfiguration: TraitConfiguration = .default,
699694
testEntryPointPath: AbsolutePath? = nil
700695
) async throws -> ModulesGraph {
701696
do {
@@ -750,7 +745,7 @@ public final class SwiftCommandState {
750745
try self._manifestLoader.get()
751746
}
752747

753-
public func canUseCachedBuildManifest(_ traitConfiguration: TraitConfiguration? = nil) async throws -> Bool {
748+
public func canUseCachedBuildManifest(_ traitConfiguration: TraitConfiguration = .default) async throws -> Bool {
754749
if !self.options.caching.cacheBuildManifest {
755750
return false
756751
}

Sources/PackageGraph/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ add_library(PackageGraph
1919
PackageModel+Extensions.swift
2020
PackageRequirement.swift
2121
ResolvedPackagesStore.swift
22-
TraitConfiguration.swift
2322
Resolution/PubGrub/Assignment.swift
2423
Resolution/PubGrub/ContainerProvider.swift
2524
Resolution/PubGrub/DiagnosticReportBuilder.swift

Sources/PackageGraph/ModulesGraph+Loading.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1035,7 +1035,7 @@ private func calculateEnabledTraits(
10351035
}
10361036
}
10371037

1038-
if let parentPackage, !(explictlyEnabledTraits == nil || areDefaultsEnabled) && manifest.traits.isEmpty {
1038+
if let parentPackage, !(explictlyEnabledTraits == nil || areDefaultsEnabled) && !manifest.supportsTraits {
10391039
// We throw an error when default traits are disabled for a package without any traits
10401040
// This allows packages to initially move new API behind traits once.
10411041
throw ModuleError.disablingDefaultTraitsOnEmptyTraits(

Sources/PackageGraph/ModulesGraph.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ public func loadModulesGraph(
458458
useXCBuildFileRules: Bool = false,
459459
customXCTestMinimumDeploymentTargets: [PackageModel.Platform: PlatformVersion]? = .none,
460460
observabilityScope: ObservabilityScope,
461-
traitConfiguration: TraitConfiguration? = nil
461+
traitConfiguration: TraitConfiguration = .default
462462
) throws -> ModulesGraph {
463463
let rootManifests = manifests.filter(\.packageKind.isRoot).spm_createDictionary { ($0.path, $0) }
464464
let externalManifests = try manifests.filter { !$0.packageKind.isRoot }
@@ -471,7 +471,7 @@ public func loadModulesGraph(
471471

472472
let packages = Array(rootManifests.keys)
473473
let input = PackageGraphRootInput(packages: packages, traitConfiguration: traitConfiguration)
474-
let graphRoot = PackageGraphRoot(
474+
let graphRoot = try PackageGraphRoot(
475475
input: input,
476476
manifests: rootManifests,
477477
explicitProduct: explicitProduct,

Sources/PackageGraph/PackageContainer.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public protocol PackageContainer {
102102
/// Fetch the enabled traits of a package container.
103103
///
104104
/// NOTE: This method should only be called on root packages.
105-
func getEnabledTraits(traitConfiguration: TraitConfiguration?, version: Version?) async throws -> Set<String>
105+
func getEnabledTraits(traitConfiguration: TraitConfiguration, version: Version?) async throws -> Set<String>
106106
}
107107

108108
extension PackageContainer {
@@ -118,7 +118,7 @@ extension PackageContainer {
118118
return true
119119
}
120120

121-
public func getEnabledTraits(traitConfiguration: TraitConfiguration?, version: Version? = nil) async throws -> Set<String> {
121+
public func getEnabledTraits(traitConfiguration: TraitConfiguration, version: Version? = nil) async throws -> Set<String> {
122122
return []
123123
}
124124
}

0 commit comments

Comments
 (0)