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 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 @@ -249,7 +249,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 +266,39 @@ return 1; } +QStringList CMakeBuilder::supportedGenerators() +{ + QStringList generatorNames; + + 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"; + + return generatorNames; +} + +QString CMakeBuilder::defaultGenerator() +{ + const QStringList generatorNames = supportedGenerators(); + + 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 @@ -40,13 +40,6 @@ QString fullName() const override; QIcon icon() const override; - void apply() override; - 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,55 +40,18 @@ 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); + foreach(const QString& generator, CMakeBuilder::supportedGenerators()) + m_prefsUi->kcfg_generator->addItem(generator); } CMakeBuilderPreferences::~CMakeBuilderPreferences() { delete m_prefsUi; } -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(); -} - -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() ) {