mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-03 20:29:56 -06:00
#pragma once is a widely supported compiler pragma, even though it is not part of the C++ standard. Many of the issues keeping #pragma once from being standardized (distributed filesystems, build farms, hard links, etc.) do not apply to CMake - it is easy to build CMake on a single machine. CMake also does not install any header files which can be consumed by other projects (though cmCPluginAPI.h has been deliberately omitted from this conversion in case anyone is still using it.) Finally, #pragma once has been required to build CMake since at least August 2017 (7f29bbe6enabled server mode unconditionally, which had been using #pragma once since September 2016 (b13d3e0d)). The fact that we now require C++11 filters out old compilers, and it is unlikely that there is a compiler which supports C++11 but does not support #pragma once.
184 lines
5.7 KiB
C++
184 lines
5.7 KiB
C++
/* 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 "cmake.h"
|
|
|
|
#ifdef _MSC_VER
|
|
# pragma warning(disable : 4127)
|
|
# pragma warning(disable : 4512)
|
|
#endif
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include <QAtomicInt>
|
|
#include <QList>
|
|
#include <QMetaType>
|
|
#include <QObject>
|
|
#include <QString>
|
|
#include <QStringList>
|
|
#include <QVariant>
|
|
|
|
/// struct to represent cmake properties in Qt
|
|
/// Value is of type String or Bool
|
|
struct QCMakeProperty
|
|
{
|
|
enum PropertyType
|
|
{
|
|
BOOL,
|
|
PATH,
|
|
FILEPATH,
|
|
STRING
|
|
};
|
|
QString Key;
|
|
QVariant Value;
|
|
QStringList Strings;
|
|
QString Help;
|
|
PropertyType Type;
|
|
bool Advanced;
|
|
bool operator==(const QCMakeProperty& other) const
|
|
{
|
|
return this->Key == other.Key;
|
|
}
|
|
bool operator<(const QCMakeProperty& other) const
|
|
{
|
|
return this->Key < other.Key;
|
|
}
|
|
};
|
|
|
|
// list of properties
|
|
using QCMakePropertyList = QList<QCMakeProperty>;
|
|
|
|
// allow QVariant to be a property or list of properties
|
|
Q_DECLARE_METATYPE(QCMakeProperty)
|
|
Q_DECLARE_METATYPE(QCMakePropertyList)
|
|
|
|
/// Qt API for CMake library.
|
|
/// Wrapper like class allows for easier integration with
|
|
/// Qt features such as, signal/slot connections, multi-threading, etc..
|
|
class QCMake : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
QCMake(QObject* p = nullptr);
|
|
~QCMake();
|
|
public slots:
|
|
/// load the cache file in a directory
|
|
void loadCache(const QString& dir);
|
|
/// set the source directory containing the source
|
|
void setSourceDirectory(const QString& dir);
|
|
/// set the binary directory to build in
|
|
void setBinaryDirectory(const QString& dir);
|
|
/// set the desired generator to use
|
|
void setGenerator(const QString& generator);
|
|
/// set the desired generator to use
|
|
void setPlatform(const QString& platform);
|
|
/// set the desired generator to use
|
|
void setToolset(const QString& toolset);
|
|
/// do the configure step
|
|
void configure();
|
|
/// generate the files
|
|
void generate();
|
|
/// open the project
|
|
void open();
|
|
/// set the property values
|
|
void setProperties(const QCMakePropertyList&);
|
|
/// interrupt the configure or generate process (if connecting, make a direct
|
|
/// connection)
|
|
void interrupt();
|
|
/// delete the cache in binary directory
|
|
void deleteCache();
|
|
/// reload the cache in binary directory
|
|
void reloadCache();
|
|
/// set whether to do debug output
|
|
void setDebugOutput(bool);
|
|
/// get whether to do suppress dev warnings
|
|
bool getSuppressDevWarnings();
|
|
/// set whether to do suppress dev warnings
|
|
void setSuppressDevWarnings(bool value);
|
|
/// get whether to do suppress deprecated warnings
|
|
bool getSuppressDeprecatedWarnings();
|
|
/// set whether to do suppress deprecated warnings
|
|
void setSuppressDeprecatedWarnings(bool value);
|
|
/// get whether to treat developer (author) warnings as errors
|
|
bool getDevWarningsAsErrors();
|
|
/// set whether to treat developer (author) warnings as errors
|
|
void setDevWarningsAsErrors(bool value);
|
|
/// get whether to treat deprecated warnings as errors
|
|
bool getDeprecatedWarningsAsErrors();
|
|
/// set whether to treat deprecated warnings as errors
|
|
void setDeprecatedWarningsAsErrors(bool value);
|
|
/// set whether to run cmake with warnings about uninitialized variables
|
|
void setWarnUninitializedMode(bool value);
|
|
/// check if project IDE open is possible and emit openPossible signal
|
|
void checkOpenPossible();
|
|
|
|
public:
|
|
/// get the list of cache properties
|
|
QCMakePropertyList properties() const;
|
|
/// get the current binary directory
|
|
QString binaryDirectory() const;
|
|
/// get the current source directory
|
|
QString sourceDirectory() const;
|
|
/// get the current generator
|
|
QString generator() const;
|
|
/// get the available generators
|
|
std::vector<cmake::GeneratorInfo> const& availableGenerators() const;
|
|
/// get whether to do debug output
|
|
bool getDebugOutput() const;
|
|
|
|
signals:
|
|
/// signal when properties change (during read from disk or configure
|
|
/// process)
|
|
void propertiesChanged(const QCMakePropertyList& vars);
|
|
/// signal when the generator changes
|
|
void generatorChanged(const QString& gen);
|
|
/// signal when the source directory changes (binary directory already
|
|
/// containing a CMakeCache.txt file)
|
|
void sourceDirChanged(const QString& dir);
|
|
/// signal when the binary directory changes
|
|
void binaryDirChanged(const QString& dir);
|
|
/// signal for progress events
|
|
void progressChanged(const QString& msg, float percent);
|
|
/// signal when configure is done
|
|
void configureDone(int error);
|
|
/// signal when generate is done
|
|
void generateDone(int error);
|
|
/// signal when there is an output message
|
|
void outputMessage(const QString& msg);
|
|
/// signal when there is an error message
|
|
void errorMessage(const QString& msg);
|
|
/// signal when debug output changes
|
|
void debugOutputChanged(bool);
|
|
/// signal when the toolset changes
|
|
void toolsetChanged(const QString& toolset);
|
|
/// signal when the platform changes
|
|
void platformChanged(const QString& platform);
|
|
/// signal when open is done
|
|
void openDone(bool successful);
|
|
/// signal when open is done
|
|
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, const char* title);
|
|
void stdoutCallback(std::string const& msg);
|
|
void stderrCallback(std::string const& msg);
|
|
|
|
bool WarnUninitializedMode;
|
|
QString SourceDirectory;
|
|
QString BinaryDirectory;
|
|
QString Generator;
|
|
QString Platform;
|
|
QString Toolset;
|
|
std::vector<cmake::GeneratorInfo> AvailableGenerators;
|
|
QString CMakeExecutable;
|
|
QAtomicInt InterruptFlag;
|
|
};
|