Skip to content

Commit 12bf7e7

Browse files
authored
Merge pull request #2598 from aciidb0mb3r/target-dep
[PackageDescription] Use a dedicated type for target dependency condi…
2 parents dabc464 + 4c0a7ae commit 12bf7e7

File tree

2 files changed

+32
-10
lines changed

2 files changed

+32
-10
lines changed

Sources/PackageDescription/Target.swift

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ public final class Target {
3737
case productItem(name: String, package: String?)
3838
case byNameItem(name: String)
3939
#else
40-
case _targetItem(name: String, condition: BuildSettingCondition?)
41-
case _productItem(name: String, package: String?, condition: BuildSettingCondition?)
42-
case _byNameItem(name: String, condition: BuildSettingCondition?)
40+
case _targetItem(name: String, condition: TargetDependencyCondition?)
41+
case _productItem(name: String, package: String?, condition: TargetDependencyCondition?)
42+
case _byNameItem(name: String, condition: TargetDependencyCondition?)
4343
#endif
4444
}
4545

@@ -656,7 +656,7 @@ extension Target.Dependency {
656656
/// - name: The name of the target.
657657
/// - condition: The condition under which the dependency is exercised.
658658
@available(_PackageDescription, introduced: 999)
659-
public static func target(name: String, condition: BuildSettingCondition? = nil) -> Target.Dependency {
659+
public static func target(name: String, condition: TargetDependencyCondition? = nil) -> Target.Dependency {
660660
return ._targetItem(name: name, condition: condition)
661661
}
662662

@@ -670,7 +670,7 @@ extension Target.Dependency {
670670
public static func product(
671671
name: String,
672672
package: String,
673-
condition: BuildSettingCondition? = nil
673+
condition: TargetDependencyCondition? = nil
674674
) -> Target.Dependency {
675675
return ._productItem(name: name, package: package, condition: condition)
676676
}
@@ -682,7 +682,7 @@ extension Target.Dependency {
682682
/// - name: The name of the dependency, either a target or a product.
683683
/// - condition: The condition under which the dependency is exercised.
684684
@available(_PackageDescription, introduced: 999)
685-
public static func byName(name: String, condition: BuildSettingCondition? = nil) -> Target.Dependency {
685+
public static func byName(name: String, condition: TargetDependencyCondition? = nil) -> Target.Dependency {
686686
return ._byNameItem(name: name, condition: condition)
687687
}
688688
#endif
@@ -704,3 +704,25 @@ extension Target.Dependency: ExpressibleByStringLiteral {
704704
#endif
705705
}
706706
}
707+
708+
/// A condition that limits the application of a target's dependency.
709+
public struct TargetDependencyCondition: Encodable {
710+
711+
private let platforms: [Platform]?
712+
713+
private init(platforms: [Platform]?) {
714+
self.platforms = platforms
715+
}
716+
717+
/// Create a target dependency condition.
718+
///
719+
/// - Parameters:
720+
/// - platforms: The applicable platforms for this target dependency condition.
721+
public static func when(
722+
platforms: [Platform]? = nil
723+
) -> TargetDependencyCondition {
724+
// FIXME: This should be an error, not a precondition.
725+
precondition(!(platforms == nil))
726+
return TargetDependencyCondition(platforms: platforms)
727+
}
728+
}

Tests/PackageLoadingTests/PDNextLoadingTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,8 @@ class PackageDescriptionNextLoadingTests: PackageDescriptionLoadingTests {
303303
.target(name: "Foo", dependencies: [
304304
.target(name: "Biz"),
305305
.target(name: "Bar", condition: .when(platforms: [.linux])),
306-
.product(name: "Baz", package: "Baz", condition: .when(configuration: .release)),
307-
.byName(name: "Bar", condition: .when(platforms: [.watchOS, .iOS], configuration: .debug)),
306+
.product(name: "Baz", package: "Baz", condition: .when(platforms: [.macOS])),
307+
.byName(name: "Bar", condition: .when(platforms: [.watchOS, .iOS])),
308308
]),
309309
.target(name: "Bar"),
310310
.target(name: "Biz"),
@@ -317,8 +317,8 @@ class PackageDescriptionNextLoadingTests: PackageDescriptionLoadingTests {
317317

318318
XCTAssertEqual(dependencies[0], .target(name: "Biz"))
319319
XCTAssertEqual(dependencies[1], .target(name: "Bar", condition: .init(platformNames: ["linux"], config: nil)))
320-
XCTAssertEqual(dependencies[2], .product(name: "Baz", package: "Baz", condition: .init(platformNames: [], config: "release")))
321-
XCTAssertEqual(dependencies[3], .byName(name: "Bar", condition: .init(platformNames: ["watchos", "ios"], config: "debug")))
320+
XCTAssertEqual(dependencies[2], .product(name: "Baz", package: "Baz", condition: .init(platformNames: ["macos"])))
321+
XCTAssertEqual(dependencies[3], .byName(name: "Bar", condition: .init(platformNames: ["watchos", "ios"])))
322322
}
323323
}
324324
}

0 commit comments

Comments
 (0)