mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-31 11:59:38 -06:00
Autogen: Add cmQtAutoGenGlobalInitializer class
This moves the global ``AUTOMOC/UIC/RCC`` targets initializer generation code into a separate new ``cmQtAutoGenGlobalInitializer`` class.
This commit is contained in:
@@ -320,6 +320,8 @@ set(SRCS
|
|||||||
cmQtAutoGen.h
|
cmQtAutoGen.h
|
||||||
cmQtAutoGenerator.cxx
|
cmQtAutoGenerator.cxx
|
||||||
cmQtAutoGenerator.h
|
cmQtAutoGenerator.h
|
||||||
|
cmQtAutoGenGlobalInitializer.cxx
|
||||||
|
cmQtAutoGenGlobalInitializer.h
|
||||||
cmQtAutoGenInitializer.cxx
|
cmQtAutoGenInitializer.cxx
|
||||||
cmQtAutoGenInitializer.h
|
cmQtAutoGenInitializer.h
|
||||||
cmQtAutoGeneratorMocUic.cxx
|
cmQtAutoGeneratorMocUic.cxx
|
||||||
|
|||||||
@@ -34,8 +34,6 @@
|
|||||||
#include "cmMakefile.h"
|
#include "cmMakefile.h"
|
||||||
#include "cmOutputConverter.h"
|
#include "cmOutputConverter.h"
|
||||||
#include "cmPolicies.h"
|
#include "cmPolicies.h"
|
||||||
#include "cmQtAutoGen.h"
|
|
||||||
#include "cmQtAutoGenInitializer.h"
|
|
||||||
#include "cmSourceFile.h"
|
#include "cmSourceFile.h"
|
||||||
#include "cmState.h"
|
#include "cmState.h"
|
||||||
#include "cmStateDirectory.h"
|
#include "cmStateDirectory.h"
|
||||||
@@ -46,6 +44,7 @@
|
|||||||
|
|
||||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||||
# include "cmCryptoHash.h"
|
# include "cmCryptoHash.h"
|
||||||
|
# include "cmQtAutoGenGlobalInitializer.h"
|
||||||
# include "cm_jsoncpp_value.h"
|
# include "cm_jsoncpp_value.h"
|
||||||
# include "cm_jsoncpp_writer.h"
|
# include "cm_jsoncpp_writer.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -1469,64 +1468,11 @@ bool cmGlobalGenerator::ComputeTargetDepends()
|
|||||||
bool cmGlobalGenerator::QtAutoGen()
|
bool cmGlobalGenerator::QtAutoGen()
|
||||||
{
|
{
|
||||||
#ifdef CMAKE_BUILD_WITH_CMAKE
|
#ifdef CMAKE_BUILD_WITH_CMAKE
|
||||||
std::vector<std::unique_ptr<cmQtAutoGenInitializer>> autogenInits;
|
cmQtAutoGenGlobalInitializer initializer(this->LocalGenerators);
|
||||||
|
return initializer.generate();
|
||||||
for (cmLocalGenerator* localGen : this->LocalGenerators) {
|
#else
|
||||||
const std::vector<cmGeneratorTarget*>& targets =
|
|
||||||
localGen->GetGeneratorTargets();
|
|
||||||
// Find targets that require AUTOGEN processing
|
|
||||||
for (cmGeneratorTarget* target : targets) {
|
|
||||||
if (target->GetType() == cmStateEnums::GLOBAL_TARGET) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (target->GetType() != cmStateEnums::EXECUTABLE &&
|
|
||||||
target->GetType() != cmStateEnums::STATIC_LIBRARY &&
|
|
||||||
target->GetType() != cmStateEnums::SHARED_LIBRARY &&
|
|
||||||
target->GetType() != cmStateEnums::MODULE_LIBRARY &&
|
|
||||||
target->GetType() != cmStateEnums::OBJECT_LIBRARY) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (target->IsImported()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const bool mocEnabled = target->GetPropertyAsBool("AUTOMOC");
|
|
||||||
const bool uicEnabled = target->GetPropertyAsBool("AUTOUIC");
|
|
||||||
const bool rccEnabled = target->GetPropertyAsBool("AUTORCC");
|
|
||||||
if (!mocEnabled && !uicEnabled && !rccEnabled) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto qtVersion = cmQtAutoGenInitializer::GetQtVersion(target);
|
|
||||||
// don't do anything if there is no Qt4 or Qt5Core (which contains moc)
|
|
||||||
if (qtVersion.Major != 4 && qtVersion.Major != 5) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
autogenInits.emplace_back(cm::make_unique<cmQtAutoGenInitializer>(
|
|
||||||
target, mocEnabled, uicEnabled, rccEnabled, qtVersion));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!autogenInits.empty()) {
|
|
||||||
// Initialize custom targets
|
|
||||||
for (auto& autoGen : autogenInits) {
|
|
||||||
if (!autoGen->InitCustomTargets()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup custom targets
|
|
||||||
for (auto& autoGen : autogenInits) {
|
|
||||||
if (!autoGen->SetupCustomTargets()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
autoGen.reset(nullptr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
cmLinkLineComputer* cmGlobalGenerator::CreateLinkLineComputer(
|
cmLinkLineComputer* cmGlobalGenerator::CreateLinkLineComputer(
|
||||||
|
|||||||
76
Source/cmQtAutoGenGlobalInitializer.cxx
Normal file
76
Source/cmQtAutoGenGlobalInitializer.cxx
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||||
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
||||||
|
#include "cmQtAutoGenGlobalInitializer.h"
|
||||||
|
#include "cmAlgorithms.h"
|
||||||
|
#include "cmGeneratorTarget.h"
|
||||||
|
#include "cmLocalGenerator.h"
|
||||||
|
#include "cmQtAutoGenInitializer.h"
|
||||||
|
|
||||||
|
cmQtAutoGenGlobalInitializer::cmQtAutoGenGlobalInitializer(
|
||||||
|
std::vector<cmLocalGenerator*> const& localGenerators)
|
||||||
|
{
|
||||||
|
for (cmLocalGenerator* localGen : localGenerators) {
|
||||||
|
// Find targets that require AUTOMOC/UIC/RCC processing
|
||||||
|
for (cmGeneratorTarget* target : localGen->GetGeneratorTargets()) {
|
||||||
|
// Process only certain target types
|
||||||
|
switch (target->GetType()) {
|
||||||
|
case cmStateEnums::EXECUTABLE:
|
||||||
|
case cmStateEnums::STATIC_LIBRARY:
|
||||||
|
case cmStateEnums::SHARED_LIBRARY:
|
||||||
|
case cmStateEnums::MODULE_LIBRARY:
|
||||||
|
case cmStateEnums::OBJECT_LIBRARY:
|
||||||
|
// Process target
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Don't process target
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (target->IsImported()) {
|
||||||
|
// Don't process target
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool const moc = target->GetPropertyAsBool("AUTOMOC");
|
||||||
|
bool const uic = target->GetPropertyAsBool("AUTOUIC");
|
||||||
|
bool const rcc = target->GetPropertyAsBool("AUTORCC");
|
||||||
|
if (moc || uic || rcc) {
|
||||||
|
// We support Qt4 and Qt5
|
||||||
|
auto qtVersion = cmQtAutoGenInitializer::GetQtVersion(target);
|
||||||
|
if ((qtVersion.Major == 4) || (qtVersion.Major == 5)) {
|
||||||
|
// Create autogen target initializer
|
||||||
|
Initializers_.emplace_back(cm::make_unique<cmQtAutoGenInitializer>(
|
||||||
|
target, moc, uic, rcc, qtVersion));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cmQtAutoGenGlobalInitializer::~cmQtAutoGenGlobalInitializer()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cmQtAutoGenGlobalInitializer::generate()
|
||||||
|
{
|
||||||
|
return (InitializeCustomTargets() && SetupCustomTargets());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cmQtAutoGenGlobalInitializer::InitializeCustomTargets()
|
||||||
|
{
|
||||||
|
for (auto& autoGen : Initializers_) {
|
||||||
|
if (!autoGen->InitCustomTargets()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cmQtAutoGenGlobalInitializer::SetupCustomTargets()
|
||||||
|
{
|
||||||
|
for (auto& autoGen : Initializers_) {
|
||||||
|
if (!autoGen->SetupCustomTargets()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
32
Source/cmQtAutoGenGlobalInitializer.h
Normal file
32
Source/cmQtAutoGenGlobalInitializer.h
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||||
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
||||||
|
#ifndef cmQtAutoGenGlobalInitializer_h
|
||||||
|
#define cmQtAutoGenGlobalInitializer_h
|
||||||
|
|
||||||
|
#include "cmConfigure.h" // IWYU pragma: keep
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class cmLocalGenerator;
|
||||||
|
class cmQtAutoGenInitializer;
|
||||||
|
|
||||||
|
/// @brief Initializes the QtAutoGen generators
|
||||||
|
class cmQtAutoGenGlobalInitializer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
cmQtAutoGenGlobalInitializer(
|
||||||
|
std::vector<cmLocalGenerator*> const& localGenerators);
|
||||||
|
~cmQtAutoGenGlobalInitializer();
|
||||||
|
|
||||||
|
bool generate();
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool InitializeCustomTargets();
|
||||||
|
bool SetupCustomTargets();
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<std::unique_ptr<cmQtAutoGenInitializer>> Initializers_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user