summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Holtermann <sebholt@web.de>2020-01-17 12:29:13 +0100
committerBrad King <brad.king@kitware.com>2020-01-17 09:48:35 -0500
commit086d9b2bab926b673bcb88a87a188586e76de3d6 (patch)
treeb7829c1c4322072f9b01ff064e5e1ea48f0572e0
parent512ab500f06d6c645985cc8014c5e6291b9a059f (diff)
downloadcmake-086d9b2bab926b673bcb88a87a188586e76de3d6.tar.gz
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"
-rw-r--r--Source/cmQtAutoGenInitializer.cxx24
-rw-r--r--Source/cmQtAutoGenInitializer.h9
2 files changed, 19 insertions, 14 deletions
diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx
index 6b0fc1e931..5eb04f704c 100644
--- a/Source/cmQtAutoGenInitializer.cxx
+++ b/Source/cmQtAutoGenInitializer.cxx
@@ -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)
diff --git a/Source/cmQtAutoGenInitializer.h b/Source/cmQtAutoGenInitializer.h
index 486dab71fc..d55259c5eb 100644
--- a/Source/cmQtAutoGenInitializer.h
+++ b/Source/cmQtAutoGenInitializer.h
@@ -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);