Skip to content

[Traits] Integrate traits into module loading #7689

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 5 commits into from
Jun 20, 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
103 changes: 103 additions & 0 deletions Fixtures/Traits/Example/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
// swift-tools-version: 999.0.0

@_spi(ExperimentalTraits) import PackageDescription

let package = Package(
name: "TraitsExample",
traits: [
Trait(name: "Package1", isDefault: true),
Trait(name: "Package2", isDefault: true),
Trait(name: "Package3", isDefault: true),
Trait(name: "Package4", isDefault: true),
"Package5",
"Package7",
"Package9",
"Package10",
Trait(name: "BuildCondition1", isDefault: true),
"BuildCondition2",
"BuildCondition3",
],
dependencies: [
.package(
path: "../Package1",
traits: ["Package1Trait1"]
),
.package(
path: "../Package2",
traits: ["Package2Trait1"]
),
.package(
path: "../Package3"
),
.package(
path: "../Package4",
traits: []
),
.package(
path: "../Package5",
traits: ["Package5Trait1"]
),
.package(
path: "../Package7"
),
.package(
path: "../Package9"
),
.package(
path: "../Package10",
traits: ["Package10Trait2"]
),
],
targets: [
.executableTarget(
name: "Example",
dependencies: [
.product(
name: "Package1Library1",
package: "Package1",
condition: .when(traits: ["Package1"])
),
.product(
name: "Package2Library1",
package: "Package2",
condition: .when(traits: ["Package2"])
),
.product(
name: "Package3Library1",
package: "Package3",
condition: .when(traits: ["Package3"])
),
.product(
name: "Package4Library1",
package: "Package4",
condition: .when(traits: ["Package4"])
),
.product(
name: "Package5Library1",
package: "Package5",
condition: .when(traits: ["Package5"])
),
.product(
name: "Package7Library1",
package: "Package7",
condition: .when(traits: ["Package7"])
),
.product(
name: "Package9Library1",
package: "Package9",
condition: .when(traits: ["Package9"])
),
.product(
name: "Package10Library1",
package: "Package10",
condition: .when(traits: ["Package10"])
),
],
swiftSettings: [
.define("DEFINE1", .when(traits: ["BuildCondition1"])),
.define("DEFINE2", .when(traits: ["BuildCondition2"])),
.define("DEFINE3", .when(traits: ["BuildCondition3"])),
]
),
]
)
69 changes: 69 additions & 0 deletions Fixtures/Traits/Example/Sources/Example/Example.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#if Package1
import Package1Library1
#endif
#if Package2
import Package2Library1
#endif
#if Package3
import Package3Library1
#endif
#if Package4
import Package4Library1
#endif
#if Package5
import Package5Library1
#endif
#if Package7
import Package7Library1
#endif
#if Package9
import Package9Library1
#endif
#if Package10
import Package10Library1
#endif

@main
struct Example {
static func main() {
#if Package1
Package1Library1.hello()
#endif
#if Package2
Package2Library1.hello()
#endif
#if Package3
Package3Library1.hello()
#endif
#if Package4
Package4Library1.hello()
#endif
#if Package5
Package5Library1.hello()
#endif
#if Package7
Package7Library1.hello()
#endif
#if Package9
Package9Library1.hello()
#endif
#if Package10
Package10Library1.hello()
#endif
#if DEFINE1
print("DEFINE1 enabled")
#else
print("DEFINE1 disabled")
#endif
#if DEFINE2
print("DEFINE2 enabled")
#else
print("DEFINE2 disabled")
#endif
#if DEFINE3
print("DEFINE3 enabled")
#else
print("DEFINE3 disabled")
#endif
}
}
21 changes: 21 additions & 0 deletions Fixtures/Traits/Package1/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// swift-tools-version: 999.0.0

@_spi(ExperimentalTraits) import PackageDescription

let package = Package(
name: "Package1",
products: [
.library(
name: "Package1Library1",
targets: ["Package1Library1"]
),
],
traits: [
"Package1Trait1"
],
targets: [
.target(
name: "Package1Library1"
),
]
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
public func hello() {
#if Package1Trait1
print("Package1Library1 trait1 enabled")
#else
print("Package1Library1 trait1 disabled")
#endif
}
22 changes: 22 additions & 0 deletions Fixtures/Traits/Package10/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// swift-tools-version: 999.0.0

@_spi(ExperimentalTraits) import PackageDescription

let package = Package(
name: "Package10",
products: [
.library(
name: "Package10Library1",
targets: ["Package10Library1"]
),
],
traits: [
"Package10Trait1",
"Package10Trait2"
],
targets: [
.target(
name: "Package10Library1"
),
]
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
public func hello() {
#if Package10Trait1
print("Package10Library1 trait1 enabled")
#else
print("Package10Library1 trait1 disabled")
#endif
#if Package10Trait2
print("Package10Library1 trait2 enabled")
#else
print("Package10Library1 trait2 disabled")
#endif
}
22 changes: 22 additions & 0 deletions Fixtures/Traits/Package2/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// swift-tools-version: 999.0.0

@_spi(ExperimentalTraits) import PackageDescription

let package = Package(
name: "Package2",
products: [
.library(
name: "Package2Library1",
targets: ["Package2Library1"]
),
],
traits: [
Trait(name: "Package2Trait1", enabledTraits: ["Package2Trait2"]),
"Package2Trait2",
],
targets: [
.target(
name: "Package2Library1"
),
]
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
public func hello() {
#if Package2Trait2
print("Package2Library1 trait2 enabled")
#else
print("Package2Library1 trait2 disabled")
#endif
}
23 changes: 23 additions & 0 deletions Fixtures/Traits/Package3/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// swift-tools-version: 999.0.0

@_spi(ExperimentalTraits) import PackageDescription

let package = Package(
name: "Package3",
products: [
.library(
name: "Package3Library1",
targets: ["Package3Library1"]
),
],
traits: [
Trait(name: "Package3Trait1", enabledTraits: ["Package3Trait2"]),
Trait(name: "Package3Trait2", enabledTraits: ["Package3Trait3"]),
Trait(name: "Package3Trait3", isDefault: true),
],
targets: [
.target(
name: "Package3Library1"
),
]
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
public func hello() {
#if Package3Trait3
print("Package3Library1 trait3 enabled")
#else
print("Package3Library1 trait3 disabled")
#endif
}
21 changes: 21 additions & 0 deletions Fixtures/Traits/Package4/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// swift-tools-version: 999.0.0

@_spi(ExperimentalTraits) import PackageDescription

let package = Package(
name: "Package4",
products: [
.library(
name: "Package4Library1",
targets: ["Package4Library1"]
),
],
traits: [
Trait(name: "Package4Trait1", isDefault: true),
],
targets: [
.target(
name: "Package4Library1"
),
]
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
public func hello() {
#if Package4Trait1
print("Package4Library1 trait1 enabled")
#else
print("Package4Library1 trait1 disabled")
#endif
}
35 changes: 35 additions & 0 deletions Fixtures/Traits/Package5/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// swift-tools-version: 999.0.0

@_spi(ExperimentalTraits) import PackageDescription

let package = Package(
name: "Package5",
products: [
.library(
name: "Package5Library1",
targets: ["Package5Library1"]
),
],
traits: [
"Package5Trait1"
],
dependencies: [
.package(
path: "../Package6",
traits: [
Package.Dependency.Trait(name: "Package6Trait1", condition: .when(traits: ["Package5Trait1"]))
]
)
],
targets: [
.target(
name: "Package5Library1",
dependencies: [
.product(
name: "Package6Library1",
package: "Package6"
)
]
),
]
)
12 changes: 12 additions & 0 deletions Fixtures/Traits/Package5/Sources/Package5Library1/Library.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#if Package5Trait1
import Package6Library1
#endif

public func hello() {
#if Package5Trait1
print("Package5Library1 trait1 enabled")
Package6Library1.hello()
#else
print("Package5Library1 trait1 disabled")
#endif
}
Loading