diff --git a/src/plugins/mesonprojectmanager/mesonpluginconstants.h b/src/plugins/mesonprojectmanager/mesonpluginconstants.h index 4329ae987d3..7aff7a7b245 100644 --- a/src/plugins/mesonprojectmanager/mesonpluginconstants.h +++ b/src/plugins/mesonprojectmanager/mesonpluginconstants.h @@ -35,6 +35,7 @@ const char ID[] = "MesonProjectManager.MesonProject"; namespace BuildConfiguration { const char BUILD_TYPE_KEY[] = "MesonProjectManager.BuildConfig.Type"; +const char PARAMETERS_KEY[] = "MesonProjectManager.BuildConfig.Parameters"; } // Settings page diff --git a/src/plugins/mesonprojectmanager/project/buildoptions/mesonbuildsettingswidget.cpp b/src/plugins/mesonprojectmanager/project/buildoptions/mesonbuildsettingswidget.cpp index 57cd625081e..cd5f4d48011 100644 --- a/src/plugins/mesonprojectmanager/project/buildoptions/mesonbuildsettingswidget.cpp +++ b/src/plugins/mesonprojectmanager/project/buildoptions/mesonbuildsettingswidget.cpp @@ -55,6 +55,7 @@ MesonBuildSettingsWidget::MesonBuildSettingsWidget(MesonBuildConfiguration *buil auto buildDirAspect = buildCfg->buildDirectoryAspect(); buildDirAspect->addToLayout(buildDirWBuilder); + ui->parametersLineEdit->setText(buildCfg->parameters()); ui->optionsFilterLineEdit->setFiltering(true); ui->optionsTreeView->sortByColumn(0, Qt::AscendingOrder); @@ -137,6 +138,9 @@ MesonBuildSettingsWidget::MesonBuildSettingsWidget(MesonBuildConfiguration *buil m_showProgressTimer.start(); bs->wipe(); }); + connect(ui->parametersLineEdit, &QLineEdit::editingFinished, this, [this, buildCfg] { + buildCfg->setParameters(ui->parametersLineEdit->text()); + }); bs->triggerParsing(); } diff --git a/src/plugins/mesonprojectmanager/project/buildoptions/mesonbuildsettingswidget.ui b/src/plugins/mesonprojectmanager/project/buildoptions/mesonbuildsettingswidget.ui index bedfa074fed..214101daaae 100644 --- a/src/plugins/mesonprojectmanager/project/buildoptions/mesonbuildsettingswidget.ui +++ b/src/plugins/mesonprojectmanager/project/buildoptions/mesonbuildsettingswidget.ui @@ -83,6 +83,20 @@ Useful if build directory is corrupted or when rebuilding with a newer version o 0 + + + + + + Parameters + + + + + + + + diff --git a/src/plugins/mesonprojectmanager/project/mesonbuildconfiguration.cpp b/src/plugins/mesonprojectmanager/project/mesonbuildconfiguration.cpp index 4334e431dc3..9159c7de657 100644 --- a/src/plugins/mesonprojectmanager/project/mesonbuildconfiguration.cpp +++ b/src/plugins/mesonprojectmanager/project/mesonbuildconfiguration.cpp @@ -42,6 +42,7 @@ #include #include +#include #include @@ -117,10 +118,27 @@ void MesonBuildConfiguration::build(const QString &target) mesonBuildStep->setBuildTarget(originalBuildTarget); } +QStringList MesonBuildConfiguration::mesonConfigArgs() +{ + return Utils::QtcProcess::splitArgs(m_parameters) + QStringList{QString("-Dbuildtype=%1").arg(mesonBuildTypeName(m_buildType))}; +} + +const QString &MesonBuildConfiguration::parameters() const +{ + return m_parameters; +} + +void MesonBuildConfiguration::setParameters(const QString ¶ms) +{ + m_parameters = params; + emit parametersChanged(); +} + QVariantMap MesonBuildConfiguration::toMap() const { auto data = ProjectExplorer::BuildConfiguration::toMap(); data[Constants::BuildConfiguration::BUILD_TYPE_KEY] = mesonBuildTypeName(m_buildType); + data[Constants::BuildConfiguration::PARAMETERS_KEY] = m_parameters; return data; } @@ -130,6 +148,7 @@ bool MesonBuildConfiguration::fromMap(const QVariantMap &map) m_buildSystem = new MesonBuildSystem{this}; m_buildType = mesonBuildType( map.value(Constants::BuildConfiguration::BUILD_TYPE_KEY).toString()); + m_parameters = map.value(Constants::BuildConfiguration::PARAMETERS_KEY).toString(); return res; } diff --git a/src/plugins/mesonprojectmanager/project/mesonbuildconfiguration.h b/src/plugins/mesonprojectmanager/project/mesonbuildconfiguration.h index 3b1f9075cd8..509d0bea090 100644 --- a/src/plugins/mesonprojectmanager/project/mesonbuildconfiguration.h +++ b/src/plugins/mesonprojectmanager/project/mesonbuildconfiguration.h @@ -107,10 +107,13 @@ public: ProjectExplorer::BuildSystem *buildSystem() const final; void build(const QString &target); - QStringList mesonConfigArgs() - { - return {QString("-Dbuildtype=%1").arg(mesonBuildTypeName(m_buildType))}; - } + QStringList mesonConfigArgs(); + + const QString ¶meters() const; + void setParameters(const QString ¶ms); + +signals: + void parametersChanged(); private: QVariantMap toMap() const override; @@ -118,6 +121,7 @@ private: MesonBuildType m_buildType; ProjectExplorer::NamedWidget *createConfigWidget() final; MesonBuildSystem *m_buildSystem = nullptr; + QString m_parameters; }; class MesonBuildConfigurationFactory final : public ProjectExplorer::BuildConfigurationFactory diff --git a/src/plugins/mesonprojectmanager/project/mesonbuildsystem.cpp b/src/plugins/mesonprojectmanager/project/mesonbuildsystem.cpp index b56d96aa870..3506e935389 100644 --- a/src/plugins/mesonprojectmanager/project/mesonbuildsystem.cpp +++ b/src/plugins/mesonprojectmanager/project/mesonbuildsystem.cpp @@ -117,7 +117,8 @@ ProjectExplorer::Kit *MesonBuildSystem::MesonBuildSystem::kit() QStringList MesonBuildSystem::configArgs(bool isSetup) { - if (!isSetup) + const QString ¶ms = mesonBuildConfiguration()->parameters(); + if (!isSetup || params.contains("--cross-file") || params.contains("--native-file")) return m_pendingConfigArgs + mesonBuildConfiguration()->mesonConfigArgs(); else { return QStringList{ @@ -179,6 +180,10 @@ void MesonBuildSystem::init() updateKit(kit()); this->triggerParsing(); }); + connect(mesonBuildConfiguration(), &MesonBuildConfiguration::parametersChanged, this, [this]() { + updateKit(kit()); + wipe(); + }); connect(mesonBuildConfiguration(), &MesonBuildConfiguration::environmentChanged, this, [this]() { m_parser.setEnvironment(buildConfiguration()->environment()); });