@@ -2,7 +2,9 @@ use anyhow::{anyhow, Result};
2
2
use clap:: { Parser , Subcommand } ;
3
3
use itertools:: Itertools ;
4
4
use jwalk:: WalkDir ;
5
- use renkit:: renconstruct:: config:: { Config , CustomOptionValue , TaskOptions } ;
5
+ use renkit:: renconstruct:: config:: {
6
+ BuildOption , Config , CustomOptionValue , KnownBuildOption , TaskOptions ,
7
+ } ;
6
8
use renkit:: renconstruct:: tasks:: {
7
9
task_convert_images_pre, task_keystore_post, task_keystore_pre, task_lint_pre,
8
10
task_notarize_post, Task , TaskContext ,
@@ -81,32 +83,41 @@ async fn build(
81
83
return Err ( anyhow ! ( "Input directory does not exist" ) ) ;
82
84
}
83
85
84
- if !config. build . pc
85
- && !config. build . win
86
- && !config. build . linux
87
- && !config. build . mac
88
- && !config. build . web
89
- && !config. build . steam
90
- && !config. build . market
91
- && !config. build . android_apk
92
- && !config. build . android_aab
93
- {
86
+ if config. builds . is_empty ( ) {
94
87
return Err ( anyhow ! ( "No build options enabled" ) ) ;
95
88
}
96
89
97
- if config. build . web && config. renutil . version < Version :: from_str ( "8.2.0" ) . unwrap ( ) {
90
+ if * config
91
+ . builds
92
+ . get ( & BuildOption :: Known ( KnownBuildOption :: Web ) )
93
+ . unwrap_or ( & false )
94
+ && config. renutil . version < Version :: from_str ( "8.2.0" ) . unwrap ( )
95
+ {
98
96
return Err ( anyhow ! (
99
97
"Web build support requires Ren'Py 8.2.0 or higher."
100
98
) ) ;
101
99
}
102
100
103
- if config. build . android_aab && config. renutil . version < Version :: from_str ( "7.5.0" ) . unwrap ( ) {
101
+ if * config
102
+ . builds
103
+ . get ( & BuildOption :: Known ( KnownBuildOption :: AndroidAab ) )
104
+ . unwrap_or ( & false )
105
+ && config. renutil . version < Version :: from_str ( "7.5.0" ) . unwrap ( )
106
+ {
104
107
return Err ( anyhow ! (
105
108
"Android App Bundle build support requires Ren'Py 7.5.0 or higher."
106
109
) ) ;
107
110
}
108
111
109
- if config. build . android_apk || config. build . android_aab {
112
+ if * config
113
+ . builds
114
+ . get ( & BuildOption :: Known ( KnownBuildOption :: AndroidApk ) )
115
+ . unwrap_or ( & false )
116
+ || * config
117
+ . builds
118
+ . get ( & BuildOption :: Known ( KnownBuildOption :: AndroidAab ) )
119
+ . unwrap_or ( & false )
120
+ {
110
121
let has_keystore_task = config
111
122
. tasks
112
123
. iter ( )
@@ -154,32 +165,28 @@ async fn build(
154
165
let mut active_builds = {
155
166
let mut active_builds = HashSet :: < String > :: new ( ) ;
156
167
157
- if config. build . pc {
158
- active_builds. insert ( "pc" . into ( ) ) ;
159
- }
160
- if config. build . win {
161
- active_builds. insert ( "win" . into ( ) ) ;
162
- }
163
- if config. build . linux {
164
- active_builds. insert ( "linux" . into ( ) ) ;
165
- }
166
- if config. build . mac {
167
- active_builds. insert ( "mac" . into ( ) ) ;
168
- }
169
- if config. build . web {
170
- active_builds. insert ( "web" . into ( ) ) ;
171
- }
172
- if config. build . steam {
173
- active_builds. insert ( "steam" . into ( ) ) ;
174
- }
175
- if config. build . market {
176
- active_builds. insert ( "market" . into ( ) ) ;
177
- }
178
- if config. build . android_apk {
179
- active_builds. insert ( "android_apk" . into ( ) ) ;
180
- }
181
- if config. build . android_aab {
182
- active_builds. insert ( "android_aab" . into ( ) ) ;
168
+ for ( build, enabled) in & config. builds {
169
+ if !enabled {
170
+ continue ;
171
+ }
172
+ match build {
173
+ BuildOption :: Known ( KnownBuildOption :: Pc ) => active_builds. insert ( "pc" . into ( ) ) ,
174
+ BuildOption :: Known ( KnownBuildOption :: Win ) => active_builds. insert ( "win" . into ( ) ) ,
175
+ BuildOption :: Known ( KnownBuildOption :: Linux ) => active_builds. insert ( "linux" . into ( ) ) ,
176
+ BuildOption :: Known ( KnownBuildOption :: Mac ) => active_builds. insert ( "mac" . into ( ) ) ,
177
+ BuildOption :: Known ( KnownBuildOption :: Web ) => active_builds. insert ( "web" . into ( ) ) ,
178
+ BuildOption :: Known ( KnownBuildOption :: Steam ) => active_builds. insert ( "steam" . into ( ) ) ,
179
+ BuildOption :: Known ( KnownBuildOption :: Market ) => {
180
+ active_builds. insert ( "market" . into ( ) )
181
+ }
182
+ BuildOption :: Known ( KnownBuildOption :: AndroidApk ) => {
183
+ active_builds. insert ( "android_apk" . into ( ) )
184
+ }
185
+ BuildOption :: Known ( KnownBuildOption :: AndroidAab ) => {
186
+ active_builds. insert ( "android_aab" . into ( ) )
187
+ }
188
+ BuildOption :: Custom ( s) => active_builds. insert ( s. into ( ) ) ,
189
+ } ;
183
190
}
184
191
185
192
active_builds
@@ -358,7 +365,11 @@ async fn build(
358
365
} ;
359
366
}
360
367
361
- if config. build . android_apk {
368
+ if * config
369
+ . builds
370
+ . get ( & BuildOption :: Known ( KnownBuildOption :: AndroidApk ) )
371
+ . unwrap_or ( & false )
372
+ {
362
373
println ! ( "Building Android APK package." ) ;
363
374
active_builds. remove ( "android_apk" ) ;
364
375
if config. renutil . version >= Version :: from_str ( "7.5.0" ) . unwrap ( ) {
@@ -401,7 +412,11 @@ async fn build(
401
412
}
402
413
}
403
414
404
- if config. build . android_aab {
415
+ if * config
416
+ . builds
417
+ . get ( & BuildOption :: Known ( KnownBuildOption :: AndroidAab ) )
418
+ . unwrap_or ( & false )
419
+ {
405
420
println ! ( "Building Android App Bundle package." ) ;
406
421
active_builds. remove ( "android_aab" ) ;
407
422
if config. renutil . version >= Version :: from_str ( "7.5.0" ) . unwrap ( ) {
@@ -426,7 +441,11 @@ async fn build(
426
441
}
427
442
}
428
443
429
- if config. build . web {
444
+ if * config
445
+ . builds
446
+ . get ( & BuildOption :: Known ( KnownBuildOption :: Web ) )
447
+ . unwrap_or ( & false )
448
+ {
430
449
println ! ( "Building Web package." ) ;
431
450
active_builds. remove ( "web" ) ;
432
451
@@ -464,29 +483,44 @@ async fn build(
464
483
"--destination" . into( ) ,
465
484
output_dir. to_string_lossy( ) . to_string( ) ,
466
485
] ;
467
- if config. build . pc {
468
- args. push ( "--package" . into ( ) ) ;
469
- args. push ( "pc" . into ( ) ) ;
470
- }
471
- if config. build . win {
472
- args. push ( "--package" . into ( ) ) ;
473
- args. push ( "win" . into ( ) ) ;
474
- }
475
- if config. build . linux {
476
- args. push ( "--package" . into ( ) ) ;
477
- args. push ( "linux" . into ( ) ) ;
478
- }
479
- if config. build . mac {
480
- args. push ( "--package" . into ( ) ) ;
481
- args. push ( "mac" . into ( ) ) ;
482
- }
483
- if config. build . steam {
484
- args. push ( "--package" . into ( ) ) ;
485
- args. push ( "steam" . into ( ) ) ;
486
- }
487
- if config. build . market {
488
- args. push ( "--package" . into ( ) ) ;
489
- args. push ( "market" . into ( ) ) ;
486
+
487
+ for ( build, enabled) in config. builds {
488
+ if !enabled {
489
+ continue ;
490
+ }
491
+ match build {
492
+ BuildOption :: Known ( KnownBuildOption :: Pc ) => {
493
+ args. push ( "--package" . into ( ) ) ;
494
+ args. push ( "pc" . into ( ) ) ;
495
+ }
496
+ BuildOption :: Known ( KnownBuildOption :: Win ) => {
497
+ args. push ( "--package" . into ( ) ) ;
498
+ args. push ( "win" . into ( ) ) ;
499
+ }
500
+ BuildOption :: Known ( KnownBuildOption :: Linux ) => {
501
+ args. push ( "--package" . into ( ) ) ;
502
+ args. push ( "linux" . into ( ) ) ;
503
+ }
504
+ BuildOption :: Known ( KnownBuildOption :: Mac ) => {
505
+ args. push ( "--package" . into ( ) ) ;
506
+ args. push ( "mac" . into ( ) ) ;
507
+ }
508
+ BuildOption :: Known ( KnownBuildOption :: Web ) => continue ,
509
+ BuildOption :: Known ( KnownBuildOption :: Steam ) => {
510
+ args. push ( "--package" . into ( ) ) ;
511
+ args. push ( "steam" . into ( ) ) ;
512
+ }
513
+ BuildOption :: Known ( KnownBuildOption :: Market ) => {
514
+ args. push ( "--package" . into ( ) ) ;
515
+ args. push ( "market" . into ( ) ) ;
516
+ }
517
+ BuildOption :: Known ( KnownBuildOption :: AndroidApk ) => continue ,
518
+ BuildOption :: Known ( KnownBuildOption :: AndroidAab ) => continue ,
519
+ BuildOption :: Custom ( s) => {
520
+ args. push ( "--package" . into ( ) ) ;
521
+ args. push ( s) ;
522
+ }
523
+ } ;
490
524
}
491
525
492
526
launch (
0 commit comments