/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#pragma once
#include "cmConfigure.h" // IWYU pragma: keep
#include <map>
#include <memory>
#include <string>
#include <unordered_map>
#include <vector>
#include "cmQtAutoGen.h"
class cmLocalGenerator;
class cmQtAutoGenInitializer;
/// @brief Initializes the QtAutoGen generators
class cmQtAutoGenGlobalInitializer
{
public:
/// @brief Collection of QtAutogen related keywords
class Keywords
{
public:
Keywords();
std::string AUTOMOC;
std::string AUTOUIC;
std::string AUTORCC;
std::string AUTOMOC_EXECUTABLE;
std::string AUTOUIC_EXECUTABLE;
std::string AUTORCC_EXECUTABLE;
std::string SKIP_AUTOGEN;
std::string SKIP_AUTOMOC;
std::string SKIP_AUTOUIC;
std::string SKIP_AUTORCC;
std::string AUTOUIC_OPTIONS;
std::string AUTORCC_OPTIONS;
std::string qrc;
std::string ui;
};
cmQtAutoGenGlobalInitializer(
std::vector<std::unique_ptr<cmLocalGenerator>> const& localGenerators);
~cmQtAutoGenGlobalInitializer();
Keywords const& kw() const { return this->Keywords_; }
bool InitializeCustomTargets();
bool SetupCustomTargets();
private:
friend class cmQtAutoGenInitializer;
void GetOrCreateGlobalTarget(cmLocalGenerator* localGen,
std::string const& name,
std::string const& comment);
void AddToGlobalAutoGen(cmLocalGenerator* localGen,
std::string const& targetName);
void AddToGlobalAutoRcc(cmLocalGenerator* localGen,
std::string const& targetName);
cmQtAutoGen::CompilerFeaturesHandle GetCompilerFeatures(
std::string const& generator, std::string const& executable,
std::string& error);
std::vector<std::unique_ptr<cmQtAutoGenInitializer>> Initializers_;
std::map<cmLocalGenerator*, std::string> GlobalAutoGenTargets_;
std::map<cmLocalGenerator*, std::string> GlobalAutoRccTargets_;
std::unordered_map<std::string, cmQtAutoGen::CompilerFeaturesHandle>
CompilerFeatures_;
Keywords const Keywords_;
};