diff options
author | Orkun Tokdemir <ilhanorkuntokdemir@gmail.com> | 2023-05-25 15:34:35 (GMT) |
---|---|---|
committer | Orkun Tokdemir <ilhanorkuntokdemir@gmail.com> | 2023-05-27 10:55:21 (GMT) |
commit | 2bb3d9b6448efd2aab4db3e33a16b22a1b1b097f (patch) | |
tree | 39069259af567b047142846e0f9b05b02990115c /Source/cmQtAutoGenInitializer.cxx | |
parent | 3bd605f3d06b8ac39f517b5a105c5254ca3ec12b (diff) | |
download | CMake-2bb3d9b6448efd2aab4db3e33a16b22a1b1b097f.zip CMake-2bb3d9b6448efd2aab4db3e33a16b22a1b1b097f.tar.gz CMake-2bb3d9b6448efd2aab4db3e33a16b22a1b1b097f.tar.bz2 |
Autogen: Fix multi-config generated file issue
The default config was an empty string when a `multi-config`
generator is used. An if check was added for those situations.
If a source file has a specific config configuration,
it is used with `$<CONFIG>` in the `multi-config` generator usage.
Fixes: #24848
Diffstat (limited to 'Source/cmQtAutoGenInitializer.cxx')
-rw-r--r-- | Source/cmQtAutoGenInitializer.cxx | 49 |
1 files changed, 39 insertions, 10 deletions
diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx index 62d7ffb..2c48e78 100644 --- a/Source/cmQtAutoGenInitializer.cxx +++ b/Source/cmQtAutoGenInitializer.cxx @@ -662,8 +662,6 @@ bool cmQtAutoGenInitializer::InitMoc() return sanitizer(dirs); }; - // Default configuration include directories - this->Moc.Includes.Default = getDirs(this->ConfigDefault); // Other configuration settings if (this->MultiConfig) { for (std::string const& cfg : this->ConfigsList) { @@ -673,6 +671,9 @@ bool cmQtAutoGenInitializer::InitMoc() } this->Moc.Includes.Config[cfg] = std::move(dirs); } + } else { + // Default configuration include directories + this->Moc.Includes.Default = getDirs(this->ConfigDefault); } } @@ -690,8 +691,6 @@ bool cmQtAutoGenInitializer::InitMoc() return defines; }; - // Default configuration defines - this->Moc.Defines.Default = getDefs(this->ConfigDefault); // Other configuration defines if (this->MultiConfig) { for (std::string const& cfg : this->ConfigsList) { @@ -701,6 +700,9 @@ bool cmQtAutoGenInitializer::InitMoc() } this->Moc.Defines.Config[cfg] = std::move(defines); } + } else { + // Default configuration defines + this->Moc.Defines.Default = getDefs(this->ConfigDefault); } } @@ -1024,8 +1026,24 @@ bool cmQtAutoGenInitializer::InitScanFiles() if (this->MocOrUicEnabled() && !this->AutogenTarget.FilesGenerated.empty()) { if (this->CMP0071Accept) { // Let the autogen target depend on the GENERATED files - for (MUFile* muf : this->AutogenTarget.FilesGenerated) { - this->AutogenTarget.DependFiles.insert(muf->FullPath); + if (this->MultiConfig && + this->Makefile->GetSafeDefinition("CMAKE_CROSS_CONFIGS").empty()) { + for (MUFile const* muf : this->AutogenTarget.FilesGenerated) { + if (muf->Configs.empty()) { + this->AutogenTarget.DependFiles.insert(muf->FullPath); + } else { + for (size_t ci : muf->Configs) { + std::string const& config = this->ConfigsList[ci]; + std::string const& pathWithConfig = + cmStrCat("$<$<CONFIG:", config, ">:", muf->FullPath, '>'); + this->AutogenTarget.DependFiles.insert(pathWithConfig); + } + } + } + } else { + for (MUFile const* muf : this->AutogenTarget.FilesGenerated) { + this->AutogenTarget.DependFiles.insert(muf->FullPath); + } } } else if (this->CMP0071Warn) { cm::string_view property; @@ -1738,10 +1756,21 @@ bool cmQtAutoGenInitializer::SetupWriteAutogenInfo() this->GenTarget, "AUTOMOC_MACRO_NAMES", nullptr, nullptr); EvaluatedTargetPropertyEntries InterfaceAutoMocMacroNamesEntries; - AddInterfaceEntries(this->GenTarget, this->ConfigDefault, - "INTERFACE_AUTOMOC_MACRO_NAMES", "CXX", &dagChecker, - InterfaceAutoMocMacroNamesEntries, - IncludeRuntimeInterface::Yes); + if (this->MultiConfig) { + for (auto const& cfg : this->ConfigsList) { + if (!cfg.empty()) { + AddInterfaceEntries(this->GenTarget, cfg, + "INTERFACE_AUTOMOC_MACRO_NAMES", "CXX", + &dagChecker, InterfaceAutoMocMacroNamesEntries, + IncludeRuntimeInterface::Yes); + } + } + } else { + AddInterfaceEntries(this->GenTarget, this->ConfigDefault, + "INTERFACE_AUTOMOC_MACRO_NAMES", "CXX", &dagChecker, + InterfaceAutoMocMacroNamesEntries, + IncludeRuntimeInterface::Yes); + } for (auto const& entry : InterfaceAutoMocMacroNamesEntries.Entries) { this->Moc.MacroNames.insert(this->Moc.MacroNames.end(), |