1111 * Vix.cpp
1212 *
1313 */
14- #include " vix/cli/ErrorHandler.hpp"
15-
16- #include " vix/cli/errors/ClangGccParser.hpp"
17- #include " vix/cli/errors/CompilerError.hpp"
18- #include " vix/cli/errors/ErrorContext.hpp"
19- #include " vix/cli/errors/ErrorPipeline.hpp"
20- #include " vix/cli/errors/RawLogDetectors.hpp"
21- #include " vix/cli/errors/CodeFrame.hpp"
14+ #include < vix/cli/ErrorHandler.hpp>
15+
16+ #include < vix/cli/errors/ClangGccParser.hpp>
17+ #include < vix/cli/errors/CompilerError.hpp>
18+ #include < vix/cli/errors/ErrorContext.hpp>
19+ #include < vix/cli/errors/ErrorPipeline.hpp>
20+ #include < vix/cli/errors/RawLogDetectors.hpp>
21+ #include < vix/cli/errors/CodeFrame.hpp>
22+ #include < vix/cli/errors/build/BuildErrorDetectors.hpp>
2223#include < vix/utils/Env.hpp>
24+
2325#include < iostream>
2426#include < sstream>
2527#include < unordered_map>
@@ -194,7 +196,7 @@ namespace
194196
195197namespace vix ::cli
196198{
197- void ErrorHandler::printBuildErrors (
199+ bool ErrorHandler::printBuildErrors (
198200 const std::string &buildLog,
199201 const fs::path &sourceFile,
200202 const std::string &contextMessage)
@@ -212,24 +214,25 @@ namespace vix::cli
212214 << GRAY << " compiler output:\n "
213215 << RESET;
214216 std::cerr << cleanedLog << " \n " ;
215- return ;
217+ return true ;
216218 }
217219
218220 if (RawLogDetectors::handleLinkerOrSanitizer (cleanedLog, sourceFile, contextMessage))
219- return ;
221+ return true ;
222+
223+ if (vix::cli::errors::build::handleBuildErrors (cleanedLog))
224+ return true ;
220225
221226 error (contextMessage + " (see compiler output below):" );
222227 std::cerr << cleanedLog << " \n " ;
223- return ;
228+ return false ;
224229 }
225230
226231 ErrorContext ctx{sourceFile, contextMessage, cleanedLog};
227232 ErrorPipeline pipeline;
228233
229234 if (pipeline.tryHandle (errors, ctx))
230- {
231- return ;
232- }
235+ return true ;
233236
234237 std::unordered_map<std::string, int > counts;
235238 for (const auto &e : errors)
@@ -246,19 +249,16 @@ namespace vix::cli
246249 {
247250 std::string key = e.file + " |" + e.message ;
248251 if (seen.insert (key).second )
249- {
250252 unique.push_back (e);
251- }
252253 }
253254
254255 if (unique.empty ())
255256 {
256257 error (contextMessage + " (no unique errors found, see compiler output below):" );
257258 std::cerr << buildLog << " \n " ;
258- return ;
259+ return false ;
259260 }
260261
261- // Generic build error header
262262 error (contextMessage + " :" );
263263
264264 CodeFrameOptions cf;
@@ -273,19 +273,15 @@ namespace vix::cli
273273 const auto &err = unique[i];
274274
275275 std::cerr << " \n " ;
276-
277276 ::printSingleError (err);
278-
279277 ::printHints (err);
280278
281- {
282- ErrorContext frameCtx{
283- err.file ,
284- contextMessage,
285- cleanedLog};
279+ ErrorContext frameCtx{
280+ err.file ,
281+ contextMessage,
282+ cleanedLog};
286283
287- printCodeFrame (err, frameCtx, cf);
288- }
284+ printCodeFrame (err, frameCtx, cf);
289285
290286 const std::string key = err.file + " |" + err.message ;
291287 auto it = counts.find (key);
@@ -305,5 +301,6 @@ namespace vix::cli
305301 }
306302
307303 std::cerr << " \n Source file: " << sourceFile << " \n " ;
304+ return true ;
308305 }
309306} // namespace vix::cli
0 commit comments