diff --git a/projectbuilders/cmakebuilder/cmakebuilder.h b/projectbuilders/cmakebuilder/cmakebuilder.h
--- a/projectbuilders/cmakebuilder/cmakebuilder.h
+++ b/projectbuilders/cmakebuilder/cmakebuilder.h
@@ -60,6 +60,9 @@
// bool updateConfig( KDevelop::IProject* project );
+ static const QStringList & supportedGenerators();
+ static QString defaultGenerator();
+
int configPages() const override;
KDevelop::ConfigPage* configPage(int number, QWidget* parent) override;
diff --git a/projectbuilders/cmakebuilder/cmakebuilder.cpp b/projectbuilders/cmakebuilder/cmakebuilder.cpp
--- a/projectbuilders/cmakebuilder/cmakebuilder.cpp
+++ b/projectbuilders/cmakebuilder/cmakebuilder.cpp
@@ -73,13 +73,26 @@
QString m_error;
};
+static QStringList generatorNames;
+
CMakeBuilder::CMakeBuilder(QObject *parent, const QVariantList &)
: KDevelop::IPlugin("kdevcmakebuilder", parent)
{
KDEV_USE_EXTENSION_INTERFACE( KDevelop::IProjectBuilder )
addBuilder("Makefile", QStringList("Unix Makefiles") << "NMake Makefiles", core()->pluginController()->pluginForExtension("org.kdevelop.IMakeBuilder"));
addBuilder("build.ninja", QStringList("Ninja"), core()->pluginController()->pluginForExtension("org.kdevelop.IProjectBuilder", "KDevNinjaBuilder"));
+
+ bool hasNinja = KDevelop::ICore::self()->pluginController()->pluginForExtension("org.kdevelop.IProjectBuilder", "KDevNinjaBuilder");
+ if (hasNinja)
+ generatorNames << "Ninja";
+
+#ifdef Q_OS_WIN
+ // Visual Studio solution is the standard generator under windows, but we dont want to use
+ // the VS IDE, so we need nmake makefiles
+ generatorNames << "NMake Makefiles";
+#endif
+ generatorNames << "Unix Makefiles";
}
CMakeBuilder::~CMakeBuilder()
@@ -249,7 +262,7 @@
}
//It means that it still has to be generated, so use the builder for
//the generator we use
- return m_buildersForGenerator[CMakeBuilderSettings::self()->generator()];
+ return m_buildersForGenerator[defaultGenerator()];
}
QList< KDevelop::IProjectBuilder* > CMakeBuilder::additionalBuilderPlugins( KDevelop::IProject* project ) const
@@ -266,6 +279,24 @@
return 1;
}
+const QStringList & CMakeBuilder::supportedGenerators()
+{
+ return generatorNames;
+}
+
+QString CMakeBuilder::defaultGenerator()
+{
+ QString defGen = generatorNames.value(CMakeBuilderSettings::self()->generator());
+ if (defGen.isEmpty())
+ {
+ qWarning() << "Couldn't find builder with index " << CMakeBuilderSettings::self()->generator()
+ << ", defaulting to 0";
+ CMakeBuilderSettings::self()->setGenerator(0);
+ defGen = generatorNames.at(0);
+ }
+ return defGen;
+}
+
KDevelop::ConfigPage* CMakeBuilder::configPage(int number, QWidget* parent)
{
if (number == 0) {
diff --git a/projectbuilders/cmakebuilder/cmakebuilderconfig.kcfg b/projectbuilders/cmakebuilder/cmakebuilderconfig.kcfg
--- a/projectbuilders/cmakebuilder/cmakebuilderconfig.kcfg
+++ b/projectbuilders/cmakebuilder/cmakebuilderconfig.kcfg
@@ -8,8 +8,8 @@
-
- Unix Makefiles
+
+ 0
diff --git a/projectbuilders/cmakebuilder/cmakebuilderpreferences.h b/projectbuilders/cmakebuilder/cmakebuilderpreferences.h
--- a/projectbuilders/cmakebuilder/cmakebuilderpreferences.h
+++ b/projectbuilders/cmakebuilder/cmakebuilderpreferences.h
@@ -44,9 +44,6 @@
void reset() override;
void defaults() override;
-public slots:
- void generatorChanged(const QString& generator);
-
private:
Ui::CMakeBuilderPreferences* m_prefsUi;
};
diff --git a/projectbuilders/cmakebuilder/cmakebuilderpreferences.cpp b/projectbuilders/cmakebuilder/cmakebuilderpreferences.cpp
--- a/projectbuilders/cmakebuilder/cmakebuilderpreferences.cpp
+++ b/projectbuilders/cmakebuilder/cmakebuilderpreferences.cpp
@@ -26,6 +26,7 @@
#include
#include "ui_cmakebuilderpreferences.h"
+#include "cmakebuilder.h"
#include "cmakebuilderconfig.h"
#include "cmakeutils.h"
@@ -39,21 +40,11 @@
l->addWidget( w );
#ifdef Q_OS_WIN
- // Visual Studio solution is the standard generator under windows, but we dont want to use
- // the VS IDE, so we need nmake makefiles
- m_prefsUi->kcfg_generator->addItem("NMake Makefiles");
- static_cast(CMakeBuilderSettings::self()->findItem("generator"))->setDefaultValue("NMake Makefiles");
-
m_prefsUi->kcfg_cmakeExe->setFilter("*.exe");
-#else
- m_prefsUi->kcfg_generator->addItem("Unix Makefiles");
#endif
- bool hasNinja = KDevelop::ICore::self()->pluginController()->pluginForExtension("org.kdevelop.IProjectBuilder", "KDevNinjaBuilder");
- if(hasNinja)
- m_prefsUi->kcfg_generator->addItem("Ninja");
-
- connect(m_prefsUi->kcfg_generator, static_cast(&QComboBox::currentIndexChanged), this, &CMakeBuilderPreferences::generatorChanged);
+ for(const QString & g : CMakeBuilder::supportedGenerators())
+ m_prefsUi->kcfg_generator->addItem(g);
}
CMakeBuilderPreferences::~CMakeBuilderPreferences()
@@ -63,31 +54,20 @@
void CMakeBuilderPreferences::defaults()
{
- m_prefsUi->kcfg_generator->setCurrentIndex(0);
KDevelop::ConfigPage::defaults();
}
void CMakeBuilderPreferences::apply()
{
- CMakeBuilderSettings::setGenerator(m_prefsUi->kcfg_generator->currentText());
- KDevelop::ConfigPage::apply();
CMakeBuilderSettings::self()->save();
+ KDevelop::ConfigPage::apply();
}
void CMakeBuilderPreferences::reset()
{
- int idx = m_prefsUi->kcfg_generator->findText(CMakeBuilderSettings::self()->generator());
- m_prefsUi->kcfg_generator->setCurrentIndex(idx);
KDevelop::ConfigPage::reset();
}
-void CMakeBuilderPreferences::generatorChanged(const QString& generator)
-{
- if (CMakeBuilderSettings::self()->generator() != generator) {
- emit changed();
- }
-}
-
QString CMakeBuilderPreferences::name() const
{
return i18n("CMake");
diff --git a/projectbuilders/cmakebuilder/cmakebuilderpreferences.ui b/projectbuilders/cmakebuilder/cmakebuilderpreferences.ui
--- a/projectbuilders/cmakebuilder/cmakebuilderpreferences.ui
+++ b/projectbuilders/cmakebuilder/cmakebuilderpreferences.ui
@@ -31,7 +31,7 @@
-
- Generator:
+ Default generator:
diff --git a/projectbuilders/cmakebuilder/cmakejob.cpp b/projectbuilders/cmakebuilder/cmakejob.cpp
--- a/projectbuilders/cmakebuilder/cmakejob.cpp
+++ b/projectbuilders/cmakebuilder/cmakejob.cpp
@@ -23,6 +23,7 @@
#include "cmakejob.h"
#include
+#include
#include
#include
@@ -107,7 +108,7 @@
QDir builddir(CMake::currentBuildDir( m_project ).toLocalFile());
if(!builddir.exists() || builddir.count()==2) {
CMakeBuilderSettings::self()->load();
- args << QString("-G") << CMakeBuilderSettings::self()->generator();
+ args << QString("-G") << CMakeBuilder::defaultGenerator();
}
QString cmakeargs = CMake::currentExtraArguments( m_project );
if( !cmakeargs.isEmpty() ) {