@@ -122,12 +122,12 @@ static auto download_file(boost::url url, fs::path out_file_path) -> int {
122
122
}
123
123
124
124
static auto handle_source ( //
125
- ecsact::build_recipe::source_fetch src,
126
- fs::path work_dir
125
+ ecsact::build_recipe::source_fetch src,
126
+ const ecsact::cli::cook_recipe_options& options
127
127
) -> int {
128
128
auto outdir = src.outdir //
129
- ? work_dir / *src.outdir
130
- : work_dir;
129
+ ? options. work_dir / *src.outdir
130
+ : options. work_dir ;
131
131
auto url = boost::url{src.url };
132
132
auto out_file_path = outdir / fs::path{url.path ().c_str ()}.filename ();
133
133
@@ -148,17 +148,18 @@ static auto handle_source( //
148
148
}
149
149
150
150
static auto handle_source ( //
151
- ecsact::build_recipe::source_codegen src,
152
- fs::path work_dir
151
+ ecsact::build_recipe::source_codegen src,
152
+ const ecsact::cli::cook_recipe_options& options
153
153
) -> int {
154
154
auto default_plugins_dir = ecsact::cli::get_default_plugins_dir ();
155
155
auto plugin_paths = std::vector<fs::path>{};
156
156
157
157
for (auto plugin : src.plugins ) {
158
- auto plugin_path = ecsact::cli::resolve_plugin_path ( //
159
- plugin,
160
- default_plugins_dir
161
- );
158
+ auto plugin_path = ecsact::cli::resolve_plugin_path ({
159
+ .plugin_arg = plugin,
160
+ .default_plugins_dir = default_plugins_dir,
161
+ .additional_plugin_dirs = options.additional_plugin_dirs ,
162
+ });
162
163
163
164
if (!plugin_path) {
164
165
return 1 ;
@@ -174,12 +175,12 @@ static auto handle_source( //
174
175
}
175
176
176
177
static auto handle_source ( //
177
- ecsact::build_recipe::source_path src,
178
- fs::path work_dir
178
+ ecsact::build_recipe::source_path src,
179
+ const ecsact::cli::cook_recipe_options& options
179
180
) -> int {
180
181
auto outdir = src.outdir //
181
- ? work_dir / *src.outdir
182
- : work_dir;
182
+ ? options. work_dir / *src.outdir
183
+ : options. work_dir ;
183
184
184
185
auto ec = std::error_code{};
185
186
fs::create_directories (outdir, ec);
@@ -503,35 +504,37 @@ auto cl_compile(compile_options options) -> int {
503
504
504
505
auto ecsact::cli::cook_recipe ( //
505
506
const char * argv0,
506
- std::vector<fs::path> files,
507
507
const ecsact::build_recipe& recipe,
508
508
cc_compiler compiler,
509
- fs::path work_dir,
510
- fs::path output_path
509
+ const cook_recipe_options& recipe_options
511
510
) -> std::optional<std::filesystem::path> {
512
511
auto exit_code = int {};
513
512
514
513
for (auto & src : recipe.sources ()) {
515
- exit_code =
516
- std::visit ([&](auto & src) { return handle_source (src, work_dir); }, src);
514
+ exit_code = std::visit (
515
+ [&](auto & src) { return handle_source (src, recipe_options); },
516
+ src
517
+ );
517
518
518
519
if (exit_code != 0 ) {
519
520
return {};
520
521
}
521
522
}
522
523
524
+ auto output_path = recipe_options.output_path ;
525
+
523
526
if (output_path.has_extension ()) {
524
527
auto has_allowed_output_extension = false ;
525
528
for (auto allowed_ext : compiler.allowed_output_extensions ) {
526
- if (allowed_ext == output_path.extension ().string ()) {
529
+ if (allowed_ext == recipe_options. output_path .extension ().string ()) {
527
530
has_allowed_output_extension = true ;
528
531
}
529
532
}
530
533
531
534
if (!has_allowed_output_extension) {
532
535
ecsact::cli::report_error (
533
536
" Invalid output extension {}" ,
534
- output_path.extension ().string ()
537
+ recipe_options. output_path .extension ().string ()
535
538
);
536
539
537
540
return {};
@@ -543,8 +546,8 @@ auto ecsact::cli::cook_recipe( //
543
546
544
547
ecsact::cli::report_info (" Compiling {}" , output_path.string ());
545
548
546
- auto src_dir = work_dir / " src" ;
547
- auto inc_dir = work_dir / " include" ;
549
+ auto src_dir = recipe_options. work_dir / " src" ;
550
+ auto inc_dir = recipe_options. work_dir / " include" ;
548
551
549
552
auto inc_dirs = std::vector{inc_dir};
550
553
@@ -640,7 +643,7 @@ auto ecsact::cli::cook_recipe( //
640
643
641
644
if (is_cl_like (compiler.compiler_type )) {
642
645
exit_code = cl_compile ({
643
- .work_dir = work_dir,
646
+ .work_dir = recipe_options. work_dir ,
644
647
.compiler = compiler,
645
648
.inc_dirs = inc_dirs,
646
649
.system_libs = as_vec (recipe.system_libs ()),
@@ -651,7 +654,7 @@ auto ecsact::cli::cook_recipe( //
651
654
});
652
655
} else {
653
656
exit_code = clang_gcc_compile ({
654
- .work_dir = work_dir,
657
+ .work_dir = recipe_options. work_dir ,
655
658
.compiler = compiler,
656
659
.inc_dirs = inc_dirs,
657
660
.system_libs = as_vec (recipe.system_libs ()),
0 commit comments