// swift-tools-version: 6.3
import PackageDescription
struct pkg {
let name: String
let deps: [String]
init(_ name: String, _ deps: [String] = []) {
self.name = name
self.deps = deps
}
}
// keep in sync with Cargo.toml features
let package_names = [
pkg("accessibility"),
pkg("dispatch", ["swift"]),
pkg("pushkit", ["dispatch", "swift"]),
pkg("swift")
]
var targets: [Target] = [
.target(
name: "AppleApisReprC",
path: "src/reprc",
sources: ["lib.h"],
publicHeadersPath: ""
),
.target(
name: "AppleApisUtil",
path: "src/util"
),
.target(
name: "apple-apis",
dependencies: package_names.map {
.target(
name: "apple-apis-" + $0.name,
condition: TargetDependencyCondition.when(traits: [$0.name])
)
},
path: "src/_dummy"
)
]
targets.append(contentsOf: package_names.map {
let other_deps = $0.deps.map { Target.Dependency.target(name: "apple-apis-" + $0) };
return .target(
name: "apple-apis-" + $0.name,
dependencies: [
.target(name: "AppleApisReprC"),
.target(name: "AppleApisUtil")
] + other_deps,
path: "src/" + $0.name
)
})
let package = Package(
name: "apple-apis",
products: [
.library(
name: "apple-apis",
type: .static,
targets: ["apple-apis"]
)
],
traits: Set(package_names.map { .trait(name: $0.name) } + [
.trait(name: "editor"),
.default(enabledTraits: ["editor"])
]),
targets: targets,
swiftLanguageModes: [.v6]
)