-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathPackage.swift
101 lines (90 loc) · 3.08 KB
/
Package.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// swift-tools-version: 6.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
/// A module in the package.
protocol Module {
var targetName: String { get }
var dependencies: [String] { get }
var path: String { get }
}
struct BasicModule: Module {
let targetName: String
let dependencies: [String]
let path: String
init(targetName: String, path: String? = nil, dependencies: [String]) {
self.targetName = targetName
self.dependencies = dependencies
self.path = path ?? "Sources/\(targetName)"
}
}
struct MachSubModule: Module {
let targetName: String
let dependencies: [String]
let path: String
internal init(subModuleName: String, folderName: String? = nil, dependencies: [String]) {
let prefixedTargetName = "Mach\(subModuleName)"
self.targetName = prefixedTargetName
self.path = "Sources/Mach/\(folderName ?? subModuleName)"
self.dependencies = ["MachCore"] + dependencies
}
}
struct BSDSubModule: Module {
let targetName: String
let dependencies: [String]
let path: String
internal init(subModuleName: String, folderName: String? = nil, dependencies: [String]) {
let prefixedTargetName = "BSD\(subModuleName)"
self.targetName = prefixedTargetName
self.path = "Sources/BSD/\(folderName ?? subModuleName)"
self.dependencies = ["BSDCore"] + dependencies
}
}
/// The modules that are part of the package, in build order.
let modules: [Module] = [
BasicModule.init(targetName: "KassHelpers", dependencies: []),
BasicModule.init(targetName: "KassC", path: "Sources/KassC", dependencies: []),
BasicModule.init(targetName: "Linking", dependencies: []),
BasicModule.init(
targetName: "OSCore", path: "Sources/OS/Core", dependencies: ["KassHelpers", "KassC"]
),
BasicModule.init(
targetName: "MachCore", path: "Sources/Mach/Core",
dependencies: ["KassHelpers", "KassC", "Linking"]
),
BasicModule.init(
targetName: "BSDCore", path: "Sources/BSD/Core",
dependencies: ["KassHelpers", "MachCore", "KassC", "Linking"]
),
BasicModule.init(
targetName: "LibNotify", dependencies: ["KassHelpers", "BSDCore", "MachCore"]
),
BasicModule.init(targetName: "Kass", dependencies: ["KassHelpers", "BSDCore", "MachCore"]),
]
/// The name of the package.
let name = "Kass"
/// The targets for the modules.
let moduleTargets = modules.map {
Target.target(
name: $0.targetName,
dependencies: $0.dependencies.map { Target.Dependency.target(name: $0) },
path: $0.path
)
}
/// The products for the modules.
let moduleProducts = modules.map {
Product.library(
name: $0.targetName,
targets: [$0.targetName] + $0.dependencies
)
}
let package = Package(
name: name,
platforms: [
.macOS(.v10_13)
],
products: moduleProducts,
dependencies: [
.package(url: "https://github.com/swiftlang/swift-docc-plugin", from: "1.4.3")
],
targets: moduleTargets
)