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());
});