99#include " buildparser.hpp"
1010#include " commands/build.hpp"
1111#include " compiler.hpp"
12+ #include " error_codes.hpp"
1213#include " logger.hpp"
1314#include " muuk_parser.hpp"
1415#include " muuklockgen.hpp"
1516#include " rustify.hpp"
17+ #include " try_expected.hpp"
1618#include " util.hpp"
1719
1820namespace fs = std::filesystem;
@@ -89,29 +91,34 @@ namespace muuk {
8991 Result<void > add_script (const std::string& profile, const std::string& build_name) {
9092 (void )build_name;
9193
92- auto result = muuk::parse_muuk_file (" muuk.toml" , false );
94+ auto result = muuk::parse_muuk_file (
95+ " muuk.toml" ,
96+ false ,
97+ false );
9398 if (!result)
94- return tl::unexpected ( " Failed to parse muuk.toml: " + result.error ());
99+ return Err ( result.error ());
95100
96101 toml::value config = result.value ();
97102
98- std::string executable_name = " muuk" ;
99103#ifdef _WIN32
100- std::string executable_path = " build/" + profile + " /" + executable_name + " .exe" ;
104+ std::string executable_path = " build/"
105+ + profile + " /" + build_name
106+ + " /" + build_name + " .exe" ;
101107#else
102- std::string executable_path = " ./build/" + profile + " /" + executable_name;
108+ std::string executable_path = " ./build/"
109+ + profile + " /" + build_name
110+ + " /" + build_name + " .exe" ;
103111#endif
104112
105113 if (!config.contains (" scripts" ) || !config[" scripts" ].is_table ()) {
106114 config[" scripts" ] = toml::table {};
107115 }
108116
109- config[" scripts" ].as_table ()[" run " ] = toml::value (executable_path);
117+ config[" scripts" ].as_table ()[build_name ] = toml::value (executable_path);
110118
111119 std::ofstream out (" muuk.toml" );
112- if (!out) {
113- return tl::unexpected (" Failed to open muuk.toml for writing." );
114- }
120+ if (!out)
121+ return make_error<EC::FileNotFound>(" muuk.toml" );
115122 out << toml::format (config);
116123
117124 muuk::logger::info (" Successfully added run script to 'muuk.toml': {}" , executable_path);
@@ -128,15 +135,21 @@ namespace muuk {
128135
129136 Result<void > build (std::string& target_build, const std::string& compiler, const std::string& profile, const toml::value& config) {
130137
138+ auto muuk_result = parse_muuk_file (
139+ " muuk.toml" ,
140+ false ,
141+ true );
142+ if (!muuk_result)
143+ return Err (muuk_result);
144+
145+ auto muuk_file = muuk_result.value ();
146+
147+ // TODO: Pass the config to the lock generator
131148 auto lock_generator_ = MuukLockGenerator::create (" ./" );
132149 if (!lock_generator_)
133150 return Err (lock_generator_.error ());
134151
135- auto lock_file_result = lock_generator_->generate_cache (MUUK_CACHE_FILE);
136- if (!lock_file_result)
137- return Err (lock_file_result.error ());
138-
139- spdlog::default_logger ()->flush ();
152+ TRYV (lock_generator_->generate_cache (MUUK_CACHE_FILE));
140153
141154 auto compiler_result = compiler.empty ()
142155 ? detect_default_compiler ()
@@ -151,24 +164,28 @@ namespace muuk {
151164
152165 auto profile_result = select_profile (profile, config);
153166 if (!profile_result)
154- return tl::unexpected (profile_result.error ());
155-
156- std::string selected_profile = profile_result.value ();
167+ return Err (profile_result);
168+ auto selected_profile = profile_result.value ();
157169
158170 auto build_manager = std::make_unique<BuildManager>();
159171
160- auto parse_result = parse (
172+ // TODO: IMPLEMENT
173+ // if (muuk_file.contains("build")) {
174+ // const auto& builds = muuk_file["build"].as_table();
175+ // for (const auto& [build_name, _] : builds) {
176+ // muuk::logger::info("Adding script for build target '{}'", build_name);
177+ // TRYV(add_script(selected_profile, build_name));
178+ // }
179+ // }
180+
181+ TRYV (parse (
161182 *build_manager,
162183 selected_compiler,
163184 fs::path (" build" ) / selected_profile,
164- selected_profile);
165-
166- if (!parse_result) {
167- return Err (parse_result.error ());
168- }
185+ selected_profile));
169186
170187 NinjaBackend build_backend (
171- *build_manager, // ← Reuse external BuildManager
188+ *build_manager,
172189 selected_compiler,
173190 selected_archiver,
174191 selected_linker);
@@ -179,7 +196,12 @@ namespace muuk {
179196 build_backend.generate_build_file (target_build, selected_profile);
180197
181198 execute_build (selected_profile);
182- generate_compile_commands (*build_manager, selected_profile, selected_compiler, selected_archiver, selected_linker);
199+ generate_compile_commands (
200+ *build_manager,
201+ selected_profile,
202+ selected_compiler,
203+ selected_archiver,
204+ selected_linker);
183205
184206 return {};
185207 }
0 commit comments