/*============================================================================ CMake - Cross Platform Makefile Generator Copyright 2000-2009 Kitware, Inc., Insight Software Consortium Distributed under the OSI-approved BSD License (the "License"); see accompanying file Copyright.txt for details. 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. ============================================================================*/ #ifndef __QCMake_h #define __QCMake_h #ifdef _MSC_VER #pragma warning ( disable : 4127 ) #pragma warning ( disable : 4512 ) #endif #include <QObject> #include <QString> #include <QVariant> #include <QList> #include <QStringList> #include <QMetaType> #include <QAtomicInt> class cmake; /// 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 typedef QList<QCMakeProperty> QCMakePropertyList; // 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=0); ~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); /// do the configure step void configure(); /// generate the files void generate(); /// 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); /// 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); /// set whether to run cmake with warnings about unused variables void setWarnUnusedMode(bool value); 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 QStringList 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); protected: cmake* CMakeInstance; static bool interruptCallback(void*); static void progressCallback(const char* msg, float percent, void* cd); static void errorCallback(const char* msg, const char* title, bool&, void* cd); bool SuppressDevWarnings; bool WarnUninitializedMode; bool WarnUnusedMode; bool WarnUnusedAllMode; QString SourceDirectory; QString BinaryDirectory; QString Generator; QStringList AvailableGenerators; QString CMakeExecutable; QAtomicInt InterruptFlag; }; #endif // __QCMake_h