mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
Properly handling lib failures
This commit is contained in:
parent
293387e41f
commit
d67e03f137
3 changed files with 22 additions and 3 deletions
|
@ -185,6 +185,7 @@ bool BeLibFile::Init(const StringImpl& filePath, bool moveFile)
|
|||
::DeleteFileA(altName.c_str());
|
||||
if (!::MoveFileA(filePath.c_str(), altName.c_str()))
|
||||
{
|
||||
mFilePath = filePath;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -499,10 +500,18 @@ void BeLibManager::Finish()
|
|||
{
|
||||
BP_ZONE("BeLibManager::Finish");
|
||||
|
||||
AutoCrit autoCrit(mCritSect);
|
||||
|
||||
for (auto& libPair : mLibFiles)
|
||||
{
|
||||
auto libFile = libPair.mValue;
|
||||
libFile->Finish();
|
||||
if (!libFile->mFilePath.IsEmpty())
|
||||
{
|
||||
if (!libFile->Finish())
|
||||
{
|
||||
mErrors.Add(StrFormat("Failed to write lib file '%s'", libFile->mFilePath.c_str()));
|
||||
}
|
||||
}
|
||||
delete libFile;
|
||||
}
|
||||
mLibFiles.Clear();
|
||||
|
|
|
@ -105,6 +105,7 @@ class BeLibManager
|
|||
public:
|
||||
CritSect mCritSect;
|
||||
Dictionary<String, BeLibFile*> mLibFiles;
|
||||
Array<String> mErrors;
|
||||
|
||||
public:
|
||||
BeLibManager();
|
||||
|
|
|
@ -6486,7 +6486,16 @@ bool BfCompiler::DoCompile(const StringImpl& outputDirectory)
|
|||
}
|
||||
}
|
||||
|
||||
BeLibManager::Get()->Finish();
|
||||
auto libManager = BeLibManager::Get();
|
||||
libManager->Finish();
|
||||
if (!libManager->mErrors.IsEmpty())
|
||||
{
|
||||
for (auto& error : libManager->mErrors)
|
||||
mPassInstance->Fail(error);
|
||||
// We need to rebuild everything just to force that lib to get repopulated
|
||||
mOptions.mForceRebuildIdx++;
|
||||
}
|
||||
libManager->mErrors.Clear();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue