apple-apis 0.1.0

System bindings for Apple APIs
// 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]
)