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() ) {