Allow the user to add custom parameters to meson

Don't use QtCreator's autogenerated native-file if the user passed a
custom one or a cross-file.

Change-Id: Ic1793df2578b6f5295cad88f0dc003666e5f16c1
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
BogDan Vatra
2021-01-02 20:14:56 +02:00
committed by BogDan Vatra
parent efa0f74645
commit 7a6bfbcfbe
6 changed files with 52 additions and 5 deletions

View File

@@ -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

View File

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

View File

@@ -83,6 +83,20 @@ Useful if build directory is corrupted or when rebuilding with a newer version o
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Parameters</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="parametersLineEdit"/>
</item>
</layout>
</item>
<item>
<widget class="QWidget" name="buildDirWidget" native="true"/>
</item>

View File

@@ -42,6 +42,7 @@
#include <projectexplorer/projectmacroexpander.h>
#include <utils/fileutils.h>
#include <utils/qtcprocess.h>
#include <QDir>
@@ -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 &params)
{
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;
}

View File

@@ -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 &parameters() const;
void setParameters(const QString &params);
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

View File

@@ -117,7 +117,8 @@ ProjectExplorer::Kit *MesonBuildSystem::MesonBuildSystem::kit()
QStringList MesonBuildSystem::configArgs(bool isSetup)
{
if (!isSetup)
const QString &params = 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());
});