#pragma once
#include "cmConfigure.h"
#include "cmCMakePresetsGraph.h"
#include "cmake.h"
#ifdef _MSC_VER
# pragma warning(disable : 4127)
# pragma warning(disable : 4512)
#endif
#include <memory>
#include <vector>
#include "QCMakePreset.h"
#include <QAtomicInt>
#include <QList>
#include <QMetaType>
#include <QObject>
#include <QProcessEnvironment>
#include <QString>
#include <QStringList>
#include <QTimer>
#include <QVariant>
struct QCMakeProperty
{
enum PropertyType
{
BOOL,
PATH,
FILEPATH,
STRING
};
QString Key;
QVariant Value;
QStringList Strings;
QString Help;
PropertyType Type;
bool Advanced;
bool operator==(QCMakeProperty const& other) const
{
return this->Key == other.Key;
}
bool operator<(QCMakeProperty const& other) const
{
return this->Key < other.Key;
}
};
using QCMakePropertyList = QList<QCMakeProperty>;
Q_DECLARE_METATYPE(QCMakeProperty)
Q_DECLARE_METATYPE(QCMakePropertyList)
Q_DECLARE_METATYPE(QProcessEnvironment)
class QCMake : public QObject
{
Q_OBJECT
public:
QCMake(QObject* p = nullptr);
~QCMake();
public slots:
void loadCache(QString const& dir);
void setSourceDirectory(QString const& dir);
void setBinaryDirectory(QString const& dir);
void setPreset(QString const& name, bool setBinary = true);
void setGenerator(QString const& generator);
void setPlatform(QString const& platform);
void setToolset(QString const& toolset);
void setEnvironment(QProcessEnvironment const& environment);
void configure();
void generate();
void open();
void setProperties(QCMakePropertyList const&);
void interrupt();
void deleteCache();
void reloadCache();
void setDebugOutput(bool);
bool getSuppressDevWarnings();
void setSuppressDevWarnings(bool value);
bool getSuppressDeprecatedWarnings();
void setSuppressDeprecatedWarnings(bool value);
bool getDevWarningsAsErrors();
void setDevWarningsAsErrors(bool value);
bool getDeprecatedWarningsAsErrors();
void setDeprecatedWarningsAsErrors(bool value);
void setWarnUninitializedMode(bool value);
void checkOpenPossible();
void loadPresets();
public:
QCMakePropertyList properties() const;
QString binaryDirectory() const;
QString relativeBinaryDirectory() const;
QString sourceDirectory() const;
QString generator() const;
QProcessEnvironment environment() const;
std::vector<cmake::GeneratorInfo> const& availableGenerators() const;
bool getDebugOutput() const;
signals:
void propertiesChanged(QCMakePropertyList const& vars);
void generatorChanged(QString const& gen);
void sourceDirChanged(QString const& dir);
void binaryDirChanged(QString const& dir);
void presetsChanged(QVector<QCMakePreset> const& presets);
void presetChanged(QString const& name);
void presetLoadError(QString const& dir, QString const& error);
void warnUninitializedModeChanged(bool value);
void progressChanged(QString const& msg, float percent);
void configureDone(int error);
void generateDone(int error);
void outputMessage(QString const& msg);
void errorMessage(QString const& msg);
void debugOutputChanged(bool);
void toolsetChanged(QString const& toolset);
void platformChanged(QString const& platform);
void openDone(bool successful);
void openPossible(bool possible);
protected:
std::unique_ptr<cmake> CMakeInstance;
bool interruptCallback();
void progressCallback(std::string const& msg, float percent);
void messageCallback(std::string const& msg, char const* title);
void stdoutCallback(std::string const& msg);
void stderrCallback(std::string const& msg);
void setUpEnvironment() const;
bool WarnUninitializedMode;
QString SourceDirectory;
QString BinaryDirectory;
QString MaybeRelativeBinaryDirectory;
QString Generator;
QString Platform;
QString Toolset;
std::vector<cmake::GeneratorInfo> AvailableGenerators;
cmCMakePresetsGraph CMakePresetsGraph;
QString PresetName;
QString CMakeExecutable;
QAtomicInt InterruptFlag;
QProcessEnvironment StartEnvironment;
QProcessEnvironment Environment;
};