2
2
3
3
import PackageDescription
4
4
5
+ extension Year {
6
+ static var year2015 : Year { Year ( " 2015 " ) }
7
+ static var year2016 : Year { Year ( " 2016 " ) }
8
+ static var year2018 : Year { Year ( " 2018 " ) }
9
+ static var year2019 : Year { Year ( " 2019 " ) }
10
+ static var year2020 : Year { Year ( " 2020 " ) }
11
+ static var year2021 : Year { Year ( " 2021 " ) }
12
+ static var year2022 : Year { Year ( " 2022 " ) }
13
+ static var year2023 : Year { Year ( " 2023 " ) }
14
+ static var year2024 : Year { Year ( " 2024 " ) }
15
+ }
16
+
5
17
let package = Package (
6
18
name: " Advent of Code " ,
7
19
platforms: [
@@ -10,15 +22,15 @@ let package = Package(
10
22
] ,
11
23
products: [
12
24
. library( name: " Advent " , targets: [ " Advent " ] ) ,
13
- . library( name : " Year2015 " , targets : [ " Year2015 " ] ) ,
14
- . library( name : " Year2016 " , targets : [ " Year2016 " ] ) ,
15
- . library( name : " Year2018 " , targets : [ " Year2018 " ] ) ,
16
- . library( name : " Year2019 " , targets : [ " Year2019 " ] ) ,
17
- . library( name : " Year2020 " , targets : [ " Year2020 " ] ) ,
18
- . library( name : " Year2021 " , targets : [ " Year2021 " ] ) ,
19
- . library( name : " Year2022 " , targets : [ " Year2022 " ] ) ,
20
- . library( name : " Year2023 " , targets : [ " Year2023 " ] ) ,
21
- . library( name : " Year2024 " , targets : [ " Year2024 " ] ) ,
25
+ . library( . year2015 ) ,
26
+ . library( . year2016 ) ,
27
+ . library( . year2018 ) ,
28
+ . library( . year2019 ) ,
29
+ . library( . year2020 ) ,
30
+ . library( . year2021 ) ,
31
+ . library( . year2022 ) ,
32
+ . library( . year2023 ) ,
33
+ . library( . year2024 ) ,
22
34
. executable( name: " aoc " , targets: [ " AdventTool " ] ) ,
23
35
. executable( name: " intcode " , targets: [ " IntcodeComputer tool " ] ) ,
24
36
] ,
@@ -71,79 +83,23 @@ let package = Package(
71
83
72
84
// MARK: - Year2015
73
85
74
- . target(
75
- name: " Year2015 " ,
76
- dependencies: [ " Advent " ] ,
77
- path: " Year2015/Sources " ,
78
- swiftSettings: [
79
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
80
- ] ) ,
81
-
82
- . testTarget(
83
- name: " Year2015Tests " ,
84
- dependencies: [ " Advent " , " Year2015 " ] ,
85
- path: " Year2015/Tests " ,
86
- resources: [ . copy( " Inputs " ) ] ,
87
- swiftSettings: [
88
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
89
- ] ) ,
86
+ . target( . year2015) ,
87
+ . testTarget( . year2015) ,
90
88
91
89
// MARK: - Year2016
92
90
93
- . target(
94
- name: " Year2016 " ,
95
- dependencies: [ " Advent " ] ,
96
- path: " Year2016/Sources " ,
97
- swiftSettings: [
98
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
99
- ] ) ,
100
-
101
- . testTarget(
102
- name: " Year2016Tests " ,
103
- dependencies: [ " Advent " , " Year2016 " ] ,
104
- path: " Year2016/Tests " ,
105
- resources: [ . copy( " Inputs " ) ] ,
106
- swiftSettings: [
107
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
108
- ] ) ,
91
+ . target( . year2016) ,
92
+ . testTarget( . year2016) ,
109
93
110
94
// MARK: - Year2018
111
95
112
- . target(
113
- name: " Year2018 " ,
114
- dependencies: [ " Advent " ] ,
115
- path: " Year2018/Sources " ,
116
- swiftSettings: [
117
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
118
- ] ) ,
119
-
120
- . testTarget(
121
- name: " Year2018Tests " ,
122
- dependencies: [ " Advent " , " Year2018 " ] ,
123
- path: " Year2018/Tests " ,
124
- resources: [ . copy( " Inputs " ) ] ,
125
- swiftSettings: [
126
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
127
- ] ) ,
96
+ . target( . year2018) ,
97
+ . testTarget( . year2018) ,
128
98
129
99
// MARK: - Year2019
130
100
131
- . target(
132
- name: " Year2019 " ,
133
- dependencies: [ " Advent " ] ,
134
- path: " Year2019/Sources " ,
135
- swiftSettings: [
136
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
137
- ] ) ,
138
-
139
- . testTarget(
140
- name: " Year2019Tests " ,
141
- dependencies: [ " Advent " , " Year2019 " ] ,
142
- path: " Year2019/Tests " ,
143
- resources: [ . copy( " Inputs " ) ] ,
144
- swiftSettings: [
145
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
146
- ] ) ,
101
+ . target( . year2019) ,
102
+ . testTarget( . year2019) ,
147
103
148
104
. executableTarget(
149
105
name: " IntcodeComputer tool " ,
@@ -159,99 +115,79 @@ let package = Package(
159
115
160
116
// MARK: - Year2020
161
117
162
- . target(
163
- name: " Year2020 " ,
164
- dependencies: [ " Advent " ] ,
165
- path: " Year2020/Sources " ,
166
- swiftSettings: [
167
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
168
- ] ) ,
169
-
170
- . testTarget(
171
- name: " Year2020Tests " ,
172
- dependencies: [ " Advent " , " Year2020 " ] ,
173
- path: " Year2020/Tests " ,
174
- resources: [ . copy( " Inputs " ) ] ,
175
- swiftSettings: [
176
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
177
- ] ) ,
118
+ . target( . year2020) ,
119
+ . testTarget( . year2020) ,
178
120
179
121
// MARK: - Year2021
180
122
181
- . target(
182
- name: " Year2021 " ,
183
- dependencies: [ " Advent " ] ,
184
- path: " Year2021/Sources " ,
185
- swiftSettings: [
186
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
187
- ] ) ,
188
-
189
- . testTarget(
190
- name: " Year2021Tests " ,
191
- dependencies: [ " Advent " , " Year2019 " , " Year2021 " ] ,
192
- path: " Year2021/Tests " ,
193
- resources: [ . copy( " Inputs " ) ] ,
194
- swiftSettings: [
195
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
196
- ] ) ,
123
+ . target( . year2021) ,
124
+ . testTarget( . year2021, dependencies: [ " Year2019 " ] ) ,
197
125
198
126
// MARK: - Year2022
199
127
200
- . target(
201
- name: " Year2022 " ,
202
- dependencies: [ " Advent " ] ,
203
- path: " Year2022/Sources " ,
204
- swiftSettings: [
205
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
206
- ] ) ,
207
-
208
- . testTarget(
209
- name: " Year2022Tests " ,
210
- dependencies: [ " Advent " , " Year2022 " ] ,
211
- path: " Year2022/Tests " ,
212
- resources: [ . copy( " Inputs " ) ] ,
213
- swiftSettings: [
214
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
215
- ] ) ,
128
+ . target( . year2022) ,
129
+ . testTarget( . year2022) ,
216
130
217
131
// MARK: - Year2023
218
132
219
- . target(
220
- name: " Year2023 " ,
221
- dependencies: [ " Advent " ] ,
222
- path: " Year2023/Sources " ,
223
- swiftSettings: [
224
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
225
- ] ) ,
226
-
227
- . testTarget(
228
- name: " Year2023Tests " ,
229
- dependencies: [ " Advent " , " Year2023 " ] ,
230
- path: " Year2023/Tests " ,
231
- resources: [ . copy( " Inputs " ) ] ,
232
- swiftSettings: [
233
- . unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
234
- ] ) ,
133
+ . target( . year2023) ,
134
+ . testTarget( . year2023) ,
235
135
236
136
// MARK: - Year2024
237
137
238
- . target(
239
- name: " Year2024 " ,
240
- dependencies: [ " Advent " ] ,
241
- path: " Year2024/Sources " ,
138
+ . target( . year2024) ,
139
+ . testTarget( . year2024) ,
140
+ ] ,
141
+ swiftLanguageVersions: [ . v5]
142
+ )
143
+
144
+ struct Year {
145
+ let name : String
146
+ init ( _ year: String ) {
147
+ name = " Year \( year) "
148
+ }
149
+ }
150
+
151
+ extension Product {
152
+ static func library( _ year: Year ) -> Product {
153
+ library ( name: year. name, targets: [ year. name] )
154
+ }
155
+ }
156
+
157
+ extension Target {
158
+ static func target( _ year: Year ) -> Target {
159
+ target (
160
+ name: year. name,
161
+ dependencies: [
162
+ " Advent " ,
163
+ . product( name: " Algorithms " , package : " swift-algorithms " ) ,
164
+ . product( name: " Crypto " , package : " swift-crypto " ) ,
165
+ ] ,
166
+ path: " \( year. name) /Sources " ,
242
167
swiftSettings: [
243
168
. unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
244
- ] ) ,
169
+ ]
170
+ )
171
+ }
245
172
246
- . testTarget(
247
- name: " Year2024Tests " ,
248
- dependencies: [ " Advent " , " Year2024 " ] ,
249
- path: " Year2024/Tests " ,
250
- resources: [ . copy( " Inputs " ) ] ,
173
+ static func testTarget(
174
+ _ year: Year ,
175
+ dependencies: [ Target . Dependency ] = [ ]
176
+ ) -> Target {
177
+ testTarget (
178
+ name: " \( year. name) Tests " ,
179
+ dependencies: [
180
+ " Advent " ,
181
+ . byName( name: year. name) ,
182
+ . product( name: " Algorithms " , package : " swift-algorithms " ) ,
183
+ . product( name: " Crypto " , package : " swift-crypto " ) ,
184
+ ] + dependencies,
185
+ path: " \( year. name) /Tests " ,
186
+ resources: [
187
+ . copy( " Inputs " ) ,
188
+ ] ,
251
189
swiftSettings: [
252
190
. unsafeFlags( [ " -enable-bare-slash-regex " ] ) ,
253
- ] ) ,
254
-
255
- ] ,
256
- swiftLanguageVersions: [ . v5]
257
- )
191
+ ] )
192
+ }
193
+ }
0 commit comments