Autogen: Enable SKIP_UNITY_BUILD_INCLUSION on AUTORCC generated files

`rcc` generated files are not compatible with unity builds, because they
contain classes in anonymous namespaces and static data with identical names.

This patch sets the source file property `SKIP_UNITY_BUILD_INCLUSION` to `On`
on all `AUTORCC` generated files to exclude them from unity build files.

Fixes: #20191 "QT5: Exclude resource files from unity build"
This commit is contained in:
Sebastian Holtermann 2020-01-17 12:29:13 +01:00 committed by Brad King
parent 512ab500f0
commit 086d9b2bab
2 changed files with 19 additions and 14 deletions

View File

@ -1166,7 +1166,10 @@ bool cmQtAutoGenInitializer::InitRccTargets()
// Register info file as generated by CMake
this->Makefile->AddCMakeOutputFile(qrc.InfoFile);
// Register file at target
this->AddGeneratedSource(qrc.OutputFile, this->Rcc);
{
cmSourceFile* sf = this->AddGeneratedSource(qrc.OutputFile, this->Rcc);
sf->SetProperty("SKIP_UNITY_BUILD_INCLUSION", "On");
}
std::vector<std::string> ccOutput;
ccOutput.push_back(qrc.OutputFile);
@ -1461,27 +1464,30 @@ bool cmQtAutoGenInitializer::SetupWriteRccInfo()
return true;
}
void cmQtAutoGenInitializer::RegisterGeneratedSource(
cmSourceFile* cmQtAutoGenInitializer::RegisterGeneratedSource(
std::string const& filename)
{
cmSourceFile* gFile = this->Makefile->GetOrCreateSource(filename, true);
gFile->SetProperty("GENERATED", "1");
gFile->SetProperty("SKIP_AUTOGEN", "1");
return gFile;
}
bool cmQtAutoGenInitializer::AddGeneratedSource(std::string const& filename,
GenVarsT const& genVars,
bool prepend)
cmSourceFile* cmQtAutoGenInitializer::AddGeneratedSource(
std::string const& filename, GenVarsT const& genVars, bool prepend)
{
// Register source at makefile
this->RegisterGeneratedSource(filename);
cmSourceFile* gFile = this->RegisterGeneratedSource(filename);
// Add source file to target
this->GenTarget->AddSource(filename, prepend);
// Add source file to source group
return this->AddToSourceGroup(filename, genVars.GenNameUpper);
this->AddToSourceGroup(filename, genVars.GenNameUpper);
return gFile;
}
bool cmQtAutoGenInitializer::AddToSourceGroup(std::string const& fileName,
void cmQtAutoGenInitializer::AddToSourceGroup(std::string const& fileName,
cm::string_view genNameUpper)
{
cmSourceGroup* sourceGroup = nullptr;
@ -1512,14 +1518,12 @@ bool cmQtAutoGenInitializer::AddToSourceGroup(std::string const& fileName,
cmStrCat(genNameUpper, " error in ", property,
": Could not find or create the source group ",
cmQtAutoGen::Quoted(groupName)));
return false;
}
}
}
if (sourceGroup != nullptr) {
sourceGroup->AddGroupFile(fileName);
}
return true;
}
void cmQtAutoGenInitializer::AddCleanFile(std::string const& fileName)

View File

@ -129,10 +129,11 @@ private:
bool SetupWriteAutogenInfo();
bool SetupWriteRccInfo();
void RegisterGeneratedSource(std::string const& filename);
bool AddGeneratedSource(std::string const& filename, GenVarsT const& genVars,
bool prepend = false);
bool AddToSourceGroup(std::string const& fileName,
cmSourceFile* RegisterGeneratedSource(std::string const& filename);
cmSourceFile* AddGeneratedSource(std::string const& filename,
GenVarsT const& genVars,
bool prepend = false);
void AddToSourceGroup(std::string const& fileName,
cm::string_view genNameUpper);
void AddCleanFile(std::string const& fileName);