CMake/Source/QtDialog/QCMake.h

164 lines
5.2 KiB
C
Raw Normal View History

/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
2007-11-02 18:55:57 +03:00
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
2007-11-02 18:55:57 +03:00
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
2007-11-02 18:50:17 +03:00
#ifndef QCMake_h
#define QCMake_h
#ifdef _MSC_VER
#pragma warning ( disable : 4127 )
#pragma warning ( disable : 4512 )
#endif
2007-11-02 18:50:17 +03:00
#include <vector>
2007-11-02 18:50:17 +03:00
#include <QObject>
#include <QString>
#include <QVariant>
2007-11-02 18:50:17 +03:00
#include <QList>
#include <QStringList>
2007-11-02 18:50:17 +03:00
#include <QMetaType>
#include <QAtomicInt>
2007-11-02 18:50:17 +03:00
#include "cmake.h"
2007-11-02 18:50:17 +03:00
/// struct to represent cmake properties in Qt
/// Value is of type String or Bool
struct QCMakeProperty
2007-11-02 18:50:17 +03:00
{
enum PropertyType { BOOL, PATH, FILEPATH, STRING };
QString Key;
QVariant Value;
QStringList Strings;
2007-11-02 18:50:17 +03:00
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;
}
2007-11-02 18:50:17 +03:00
};
// list of properties
typedef QList<QCMakeProperty> QCMakePropertyList;
// allow QVariant to be a property or list of properties
Q_DECLARE_METATYPE(QCMakeProperty)
Q_DECLARE_METATYPE(QCMakePropertyList)
2007-11-02 18:50:17 +03:00
/// Qt API for CMake library.
/// Wrapper like class allows for easier integration with
/// Qt features such as, signal/slot connections, multi-threading, etc..
2007-11-02 18:50:17 +03:00
class QCMake : public QObject
{
Q_OBJECT
public:
QCMake(QObject* p=0);
~QCMake();
public slots:
/// load the cache file in a directory
2007-11-02 18:50:17 +03:00
void loadCache(const QString& dir);
/// set the source directory containing the source
2007-11-02 18:50:17 +03:00
void setSourceDirectory(const QString& dir);
/// set the binary directory to build in
2007-11-02 18:50:17 +03:00
void setBinaryDirectory(const QString& dir);
/// set the desired generator to use
2007-11-02 18:50:17 +03:00
void setGenerator(const QString& generator);
/// set the desired generator to use
void setToolset(const QString& toolset);
/// do the configure step
2007-11-02 18:50:17 +03:00
void configure();
/// generate the files
2007-11-02 18:50:17 +03:00
void generate();
/// set the property values
void setProperties(const QCMakePropertyList&);
/// interrupt the configure or generate process (if connecting, make a direct connection)
2007-11-02 18:50:17 +03:00
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);
/// set whether to do suppress dev warnings
void setSuppressDevWarnings(bool value);
/// set whether to run cmake with warnings about uninitialized variables
void setWarnUninitializedMode(bool value);
2010-08-25 20:43:02 +04:00
/// set whether to run cmake with warnings about unused variables
void setWarnUnusedMode(bool value);
2007-11-02 18:50:17 +03:00
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;
2007-11-02 18:50:17 +03:00
signals:
/// signal when properties change (during read from disk or configure process)
void propertiesChanged(const QCMakePropertyList& vars);
/// signal when the generator changes
2007-11-02 18:50:17 +03:00
void generatorChanged(const QString& gen);
/// signal when the source directory changes (binary directory already
/// containing a CMakeCache.txt file)
2007-11-02 18:50:17 +03:00
void sourceDirChanged(const QString& dir);
/// signal when the binary directory changes
void binaryDirChanged(const QString& dir);
/// signal for progress events
2007-11-02 18:50:17 +03:00
void progressChanged(const QString& msg, float percent);
/// signal when configure is done
2007-11-02 18:50:17 +03:00
void configureDone(int error);
/// signal when generate is done
2007-11-02 18:50:17 +03:00
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);
2007-11-02 18:50:17 +03:00
protected:
cmake* CMakeInstance;
static bool interruptCallback(void*);
2007-11-02 18:50:17 +03:00
static void progressCallback(const char* msg, float percent, void* cd);
static void messageCallback(const char* msg, const char* title,
bool&, void* cd);
static void stdoutCallback(const char* msg, size_t len, void* cd);
static void stderrCallback(const char* msg, size_t len, void* cd);
bool SuppressDevWarnings;
bool WarnUninitializedMode;
2010-08-25 20:43:02 +04:00
bool WarnUnusedMode;
bool WarnUnusedAllMode;
2007-11-02 18:50:17 +03:00
QString SourceDirectory;
QString BinaryDirectory;
QString Generator;
QString Toolset;
std::vector<cmake::GeneratorInfo> AvailableGenerators;
2007-11-02 18:50:17 +03:00
QString CMakeExecutable;
QAtomicInt InterruptFlag;
2007-11-02 18:50:17 +03:00
};
#endif // QCMake_h
2007-11-02 18:50:17 +03:00