Skip to content

Commit 7750aa9

Browse files
committed
[Package{Model, Graph}] Make it possible to mark modules as implicit
It's currently impossible to distringuish between modules that are created from the declarations in a manifest and the ones synthesized as part of module graph building and/or build plan creation. This was only a problem for `SystemLibraryModule` before, but with the introduction of `swift package migrate` command the situation changed because the command can only operate on modules that appear in the manifest file because it won't be possible to update code or settings of the synthesized modules.
1 parent 86eda5b commit 7750aa9

File tree

13 files changed

+136
-28
lines changed

13 files changed

+136
-28
lines changed

Sources/Build/BuildPlan/BuildPlan+Test.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ extension BuildPlan {
102102
dependencies: testProduct.underlying.modules.map { .module($0, conditions: []) },
103103
packageAccess: true, // test target is allowed access to package decls by default
104104
testDiscoverySrc: Sources(paths: discoveryPaths, root: discoveryDerivedDir),
105-
buildSettings: discoveryBuildSettings
105+
buildSettings: discoveryBuildSettings,
106+
implicit: true
106107
)
107108
let discoveryResolvedModule = ResolvedModule(
108109
packageIdentity: testProduct.packageIdentity,
@@ -287,7 +288,8 @@ private extension PackageModel.SwiftModule {
287288
dependencies: dependencies,
288289
packageAccess: packageAccess,
289290
buildSettings: buildSettings,
290-
usesUnsafeFlags: false
291+
usesUnsafeFlags: false,
292+
implicit: true
291293
)
292294
}
293295
}

Sources/PackageGraph/ModulesGraph+Loading.swift

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -680,12 +680,7 @@ private func createResolvedPackages(
680680
// Get all implicit system library dependencies in this package.
681681
let implicitSystemLibraryDeps = packageBuilder.dependencies
682682
.flatMap(\.modules)
683-
.filter {
684-
if case let systemLibrary as SystemLibraryModule = $0.module {
685-
return systemLibrary.isImplicit
686-
}
687-
return false
688-
}
683+
.filter(\.module.implicit)
689684

690685
let packageDoesNotSupportProductAliases = packageBuilder.package.doesNotSupportProductAliases
691686
let lookupByProductIDs = !packageDoesNotSupportProductAliases &&

Sources/PackageGraph/Resolution/ResolvedModule.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,12 @@ public struct ResolvedModule {
180180
})
181181
}
182182

183+
/// Whether this module comes from a declaration in the manifest file
184+
/// or was synthesized (i.e. some test modules are synthesized).
185+
public var implicit: Bool {
186+
self.underlying.implicit
187+
}
188+
183189
/// Create a resolved module instance.
184190
public init(
185191
packageIdentity: PackageIdentity,

Sources/PackageLoading/PackageBuilder.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1079,7 +1079,8 @@ public final class PackageBuilder {
10791079
declaredSwiftVersions: self.declaredSwiftVersions(),
10801080
buildSettings: buildSettings,
10811081
buildSettingsDescription: manifestTarget.settings,
1082-
usesUnsafeFlags: manifestTarget.usesUnsafeFlags
1082+
usesUnsafeFlags: manifestTarget.usesUnsafeFlags,
1083+
implicit: false
10831084
)
10841085
} else {
10851086
// It's not a Swift target, so it's a Clang target (those are the only two types of source target currently
@@ -1124,7 +1125,8 @@ public final class PackageBuilder {
11241125
dependencies: dependencies,
11251126
buildSettings: buildSettings,
11261127
buildSettingsDescription: manifestTarget.settings,
1127-
usesUnsafeFlags: manifestTarget.usesUnsafeFlags
1128+
usesUnsafeFlags: manifestTarget.usesUnsafeFlags,
1129+
implicit: false
11281130
)
11291131
}
11301132
}
@@ -1903,7 +1905,8 @@ extension PackageBuilder {
19031905
packageAccess: false,
19041906
buildSettings: buildSettings,
19051907
buildSettingsDescription: targetDescription.settings,
1906-
usesUnsafeFlags: false
1908+
usesUnsafeFlags: false,
1909+
implicit: true
19071910
)
19081911
}
19091912
}

Sources/PackageModel/Module/BinaryModule.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ public final class BinaryModule: Module {
4949
buildSettings: .init(),
5050
buildSettingsDescription: [],
5151
pluginUsages: [],
52-
usesUnsafeFlags: false
52+
usesUnsafeFlags: false,
53+
implicit: false
5354
)
5455
}
5556

Sources/PackageModel/Module/ClangModule.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ public final class ClangModule: Module {
6161
dependencies: [Module.Dependency] = [],
6262
buildSettings: BuildSettings.AssignmentTable = .init(),
6363
buildSettingsDescription: [TargetBuildSettingDescription.Setting] = [],
64-
usesUnsafeFlags: Bool
64+
usesUnsafeFlags: Bool,
65+
implicit: Bool
6566
) throws {
6667
guard includeDir.isDescendantOfOrEqual(to: sources.root) else {
6768
throw StringError("\(includeDir) should be contained in the source root \(sources.root)")
@@ -86,7 +87,8 @@ public final class ClangModule: Module {
8687
buildSettings: buildSettings,
8788
buildSettingsDescription: buildSettingsDescription,
8889
pluginUsages: [],
89-
usesUnsafeFlags: usesUnsafeFlags
90+
usesUnsafeFlags: usesUnsafeFlags,
91+
implicit: implicit
9092
)
9193
}
9294
}

Sources/PackageModel/Module/Module.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,10 @@ public class Module {
242242
/// Whether or not this target uses any custom unsafe flags.
243243
public let usesUnsafeFlags: Bool
244244

245+
/// Whether this module comes from a declaration in the manifest file
246+
/// or was synthesized (i.e. some test modules are synthesized).
247+
public let implicit: Bool
248+
245249
init(
246250
name: String,
247251
potentialBundleName: String? = nil,
@@ -256,7 +260,8 @@ public class Module {
256260
buildSettings: BuildSettings.AssignmentTable,
257261
buildSettingsDescription: [TargetBuildSettingDescription.Setting],
258262
pluginUsages: [PluginUsage],
259-
usesUnsafeFlags: Bool
263+
usesUnsafeFlags: Bool,
264+
implicit: Bool
260265
) {
261266
self.name = name
262267
self.potentialBundleName = potentialBundleName
@@ -273,6 +278,7 @@ public class Module {
273278
self.buildSettingsDescription = buildSettingsDescription
274279
self.pluginUsages = pluginUsages
275280
self.usesUnsafeFlags = usesUnsafeFlags
281+
self.implicit = implicit
276282
}
277283
}
278284

Sources/PackageModel/Module/PluginModule.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ public final class PluginModule: Module {
4545
buildSettings: .init(),
4646
buildSettingsDescription: [],
4747
pluginUsages: [],
48-
usesUnsafeFlags: false
48+
usesUnsafeFlags: false,
49+
implicit: false
4950
)
5051
}
5152
}

Sources/PackageModel/Module/SwiftModule.swift

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public final class SwiftModule: Module {
3333
dependencies: [Module.Dependency],
3434
packageAccess: Bool,
3535
testDiscoverySrc: Sources,
36-
buildSettings: BuildSettings.AssignmentTable = .init()) {
36+
buildSettings: BuildSettings.AssignmentTable = .init(),
37+
implicit: Bool) {
3738
self.declaredSwiftVersions = []
3839

3940
super.init(
@@ -46,7 +47,8 @@ public final class SwiftModule: Module {
4647
buildSettings: buildSettings,
4748
buildSettingsDescription: [],
4849
pluginUsages: [],
49-
usesUnsafeFlags: false
50+
usesUnsafeFlags: false,
51+
implicit: implicit
5052
)
5153
}
5254

@@ -68,7 +70,8 @@ public final class SwiftModule: Module {
6870
buildSettings: BuildSettings.AssignmentTable = .init(),
6971
buildSettingsDescription: [TargetBuildSettingDescription.Setting] = [],
7072
pluginUsages: [PluginUsage] = [],
71-
usesUnsafeFlags: Bool
73+
usesUnsafeFlags: Bool,
74+
implicit: Bool
7275
) {
7376
self.declaredSwiftVersions = declaredSwiftVersions
7477
super.init(
@@ -85,7 +88,8 @@ public final class SwiftModule: Module {
8588
buildSettings: buildSettings,
8689
buildSettingsDescription: buildSettingsDescription,
8790
pluginUsages: pluginUsages,
88-
usesUnsafeFlags: usesUnsafeFlags
91+
usesUnsafeFlags: usesUnsafeFlags,
92+
implicit: implicit
8993
)
9094
}
9195

@@ -133,7 +137,8 @@ public final class SwiftModule: Module {
133137
buildSettings: buildSettings,
134138
buildSettingsDescription: [],
135139
pluginUsages: [],
136-
usesUnsafeFlags: false
140+
usesUnsafeFlags: false,
141+
implicit: true
137142
)
138143
}
139144

Sources/PackageModel/Module/SystemLibraryModule.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@ public final class SystemLibraryModule: Module {
2525
/// List of system package providers, if any.
2626
public let providers: [SystemPackageProviderDescription]?
2727

28-
/// True if this system library should become implicit dependency of its dependent packages.
29-
public let isImplicit: Bool
30-
3128
public init(
3229
name: String,
3330
path: AbsolutePath,
@@ -38,7 +35,6 @@ public final class SystemLibraryModule: Module {
3835
let sources = Sources(paths: [], root: path)
3936
self.pkgConfig = pkgConfig
4037
self.providers = providers
41-
self.isImplicit = isImplicit
4238
super.init(
4339
name: name,
4440
type: .systemModule,
@@ -49,7 +45,8 @@ public final class SystemLibraryModule: Module {
4945
buildSettings: .init(),
5046
buildSettingsDescription: [],
5147
pluginUsages: [],
52-
usesUnsafeFlags: false
48+
usesUnsafeFlags: false,
49+
implicit: isImplicit
5350
)
5451
}
5552
}

0 commit comments

Comments
 (0)