CMake: Pass CMakeBuildConfig to the settings widget

... instead of the build system. Less indirections overall.

Change-Id: I59b2fd4508b24a72357426439cac7fbd563e05bf
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
hjk
2023-07-07 16:27:46 +02:00
parent b9cf021b8e
commit dbdd6a0701
5 changed files with 99 additions and 109 deletions

View File

@@ -31,7 +31,7 @@ BuildDirParameters::BuildDirParameters(CMakeBuildSystem *buildSystem)
expander = bc->macroExpander(); expander = bc->macroExpander();
const QStringList expandedArguments = Utils::transform(buildSystem->initialCMakeArguments(), const QStringList expandedArguments = Utils::transform(bc->initialCMakeArguments.allValues(),
[this](const QString &s) { [this](const QString &s) {
return expander->expand(s); return expander->expand(s);
}); });

View File

@@ -101,7 +101,7 @@ namespace Internal {
class CMakeBuildSettingsWidget : public NamedWidget class CMakeBuildSettingsWidget : public NamedWidget
{ {
public: public:
CMakeBuildSettingsWidget(CMakeBuildSystem *bc); explicit CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc);
void setError(const QString &message); void setError(const QString &message);
void setWarning(const QString &message); void setWarning(const QString &message);
@@ -129,7 +129,7 @@ private:
void updateConfigureDetailsWidgetsSummary( void updateConfigureDetailsWidgetsSummary(
const QStringList &configurationArguments = QStringList()); const QStringList &configurationArguments = QStringList());
CMakeBuildSystem *m_buildSystem; CMakeBuildConfiguration *m_buildConfig;
QTreeView *m_configView; QTreeView *m_configView;
ConfigModel *m_configModel; ConfigModel *m_configModel;
CategorySortFilterModel *m_configFilterModel; CategorySortFilterModel *m_configFilterModel;
@@ -166,15 +166,14 @@ static QModelIndex mapToSource(const QAbstractItemView *view, const QModelIndex
return result; return result;
} }
CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) : CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) :
NamedWidget(Tr::tr("CMake")), NamedWidget(Tr::tr("CMake")),
m_buildSystem(bs), m_buildConfig(bc),
m_configModel(new ConfigModel(this)), m_configModel(new ConfigModel(this)),
m_configFilterModel(new CategorySortFilterModel(this)), m_configFilterModel(new CategorySortFilterModel(this)),
m_configTextFilterModel(new CategorySortFilterModel(this)) m_configTextFilterModel(new CategorySortFilterModel(this))
{ {
QTC_ASSERT(bs, return); QTC_ASSERT(m_buildConfig, return);
CMakeBuildConfiguration *bc = bs->cmakeBuildConfiguration();
m_configureDetailsWidget = new DetailsWidget; m_configureDetailsWidget = new DetailsWidget;
@@ -189,10 +188,11 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
m_configModel->flush(); // clear out config cache...; m_configModel->flush(); // clear out config cache...;
}); });
connect(&bc->buildTypeAspect, &BaseAspect::changed, this, [this, bc] { connect(&m_buildConfig->buildTypeAspect, &BaseAspect::changed, this, [this] {
if (!m_buildSystem->isMultiConfig()) { if (!m_buildConfig->cmakeBuildSystem()->isMultiConfig()) {
CMakeConfig config; CMakeConfig config;
config << CMakeConfigItem("CMAKE_BUILD_TYPE", bc->buildTypeAspect().toUtf8()); config << CMakeConfigItem("CMAKE_BUILD_TYPE",
m_buildConfig->buildTypeAspect().toUtf8());
m_configModel->setBatchEditConfiguration(config); m_configModel->setBatchEditConfiguration(config);
} }
@@ -360,10 +360,12 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
}.attachTo(this); }.attachTo(this);
updateAdvancedCheckBox(); updateAdvancedCheckBox();
setError(m_buildSystem->error());
setWarning(m_buildSystem->warning());
connect(m_buildSystem, &BuildSystem::parsingStarted, this, [this] { CMakeBuildSystem *bs = m_buildConfig->cmakeBuildSystem();
setError(bs->error());
setWarning(bs->warning());
connect(bs, &BuildSystem::parsingStarted, this, [this] {
updateButtonState(); updateButtonState();
m_configView->setEnabled(false); m_configView->setEnabled(false);
m_showProgressTimer.start(); m_showProgressTimer.start();
@@ -371,28 +373,26 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
m_configModel->setMacroExpander(bc->macroExpander()); m_configModel->setMacroExpander(bc->macroExpander());
if (m_buildSystem->isParsing()) if (bs->isParsing())
m_showProgressTimer.start(); m_showProgressTimer.start();
else { else {
m_configModel->setConfiguration(m_buildSystem->configurationFromCMake()); m_configModel->setConfiguration(bs->configurationFromCMake());
m_configModel->setInitialParametersConfiguration( m_configModel->setInitialParametersConfiguration(
m_buildSystem->initialCMakeConfiguration()); m_buildConfig->initialCMakeArguments.cmakeConfiguration());
} }
connect(m_buildSystem, &BuildSystem::parsingFinished, this, [this] { connect(bs, &BuildSystem::parsingFinished, this, [this, bs] {
const CMakeConfig config = m_buildSystem->configurationFromCMake(); const CMakeConfig config = bs->configurationFromCMake();
auto qmlDebugAspect = m_buildSystem->buildConfiguration() const TriState qmlDebugSetting = m_buildConfig->qmlDebugging.value();
->aspect<QtSupport::QmlDebuggingAspect>();
const TriState qmlDebugSetting = qmlDebugAspect->value();
bool qmlDebugConfig = CMakeBuildConfiguration::hasQmlDebugging(config); bool qmlDebugConfig = CMakeBuildConfiguration::hasQmlDebugging(config);
if ((qmlDebugSetting == TriState::Enabled && !qmlDebugConfig) if ((qmlDebugSetting == TriState::Enabled && !qmlDebugConfig)
|| (qmlDebugSetting == TriState::Disabled && qmlDebugConfig)) { || (qmlDebugSetting == TriState::Disabled && qmlDebugConfig)) {
qmlDebugAspect->setValue(TriState::Default); m_buildConfig->qmlDebugging.setValue(TriState::Default);
} }
m_configModel->setConfiguration(config); m_configModel->setConfiguration(config);
m_configModel->setInitialParametersConfiguration( m_configModel->setInitialParametersConfiguration(
m_buildSystem->initialCMakeConfiguration()); m_buildConfig->initialCMakeArguments.cmakeConfiguration());
m_buildSystem->filterConfigArgumentsFromAdditionalCMakeArguments(); m_buildConfig->filterConfigArgumentsFromAdditionalCMakeArguments();
updateFromKit(); updateFromKit();
m_configView->setEnabled(true); m_configView->setEnabled(true);
updateButtonState(); updateButtonState();
@@ -401,11 +401,11 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
updateConfigurationStateSelection(); updateConfigurationStateSelection();
}); });
connect(m_buildSystem, &CMakeBuildSystem::configurationCleared, this, [this] { connect(bs, &CMakeBuildSystem::configurationCleared, this, [this] {
updateConfigurationStateSelection(); updateConfigurationStateSelection();
}); });
connect(m_buildSystem, &CMakeBuildSystem::errorOccurred, this, [this] { connect(bs, &CMakeBuildSystem::errorOccurred, this, [this] {
m_showProgressTimer.stop(); m_showProgressTimer.stop();
m_progressIndicator->hide(); m_progressIndicator->hide();
updateConfigurationStateSelection(); updateConfigurationStateSelection();
@@ -416,10 +416,8 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
connect(m_configModel, &QAbstractItemModel::modelReset, connect(m_configModel, &QAbstractItemModel::modelReset,
this, &CMakeBuildSettingsWidget::updateButtonState); this, &CMakeBuildSettingsWidget::updateButtonState);
connect(m_buildSystem->cmakeBuildConfiguration(), connect(m_buildConfig, &CMakeBuildConfiguration::signingFlagsChanged,
&CMakeBuildConfiguration::signingFlagsChanged, this, &CMakeBuildSettingsWidget::updateButtonState);
this,
&CMakeBuildSettingsWidget::updateButtonState);
connect(m_showAdvancedCheckBox, &QCheckBox::stateChanged, connect(m_showAdvancedCheckBox, &QCheckBox::stateChanged,
this, &CMakeBuildSettingsWidget::updateAdvancedCheckBox); this, &CMakeBuildSettingsWidget::updateAdvancedCheckBox);
@@ -436,15 +434,15 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
connect(m_resetButton, &QPushButton::clicked, this, [this] { connect(m_resetButton, &QPushButton::clicked, this, [this] {
m_configModel->resetAllChanges(isInitialConfiguration()); m_configModel->resetAllChanges(isInitialConfiguration());
}); });
connect(m_reconfigureButton, &QPushButton::clicked, this, [this] { connect(m_reconfigureButton, &QPushButton::clicked, this, [this, bs] {
if (!m_buildSystem->isParsing()) { if (!bs->isParsing()) {
if (isInitialConfiguration()) { if (isInitialConfiguration()) {
reconfigureWithInitialParameters(); reconfigureWithInitialParameters();
} else { } else {
m_buildSystem->runCMakeWithExtraArguments(); bs->runCMakeWithExtraArguments();
} }
} else { } else {
m_buildSystem->stopCMakeRun(); bs->stopCMakeRun();
m_reconfigureButton->setEnabled(false); m_reconfigureButton->setEnabled(false);
} }
}); });
@@ -481,16 +479,16 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
connect(m_batchEditButton, &QAbstractButton::clicked, connect(m_batchEditButton, &QAbstractButton::clicked,
this, &CMakeBuildSettingsWidget::batchEditConfiguration); this, &CMakeBuildSettingsWidget::batchEditConfiguration);
connect(m_buildSystem, &CMakeBuildSystem::errorOccurred, connect(bs, &CMakeBuildSystem::errorOccurred,
this, &CMakeBuildSettingsWidget::setError); this, &CMakeBuildSettingsWidget::setError);
connect(m_buildSystem, &CMakeBuildSystem::warningOccurred, connect(bs, &CMakeBuildSystem::warningOccurred,
this, &CMakeBuildSettingsWidget::setWarning); this, &CMakeBuildSettingsWidget::setWarning);
connect(m_buildSystem, &CMakeBuildSystem::configurationChanged, connect(bs, &CMakeBuildSystem::configurationChanged,
m_configModel, &ConfigModel::setBatchEditConfiguration); m_configModel, &ConfigModel::setBatchEditConfiguration);
updateFromKit(); updateFromKit();
connect(m_buildSystem->target(), &Target::kitChanged, connect(m_buildConfig->target(), &Target::kitChanged,
this, &CMakeBuildSettingsWidget::updateFromKit); this, &CMakeBuildSettingsWidget::updateFromKit);
connect(bc, &CMakeBuildConfiguration::enabledChanged, this, [this, bc] { connect(bc, &CMakeBuildConfiguration::enabledChanged, this, [this, bc] {
if (bc->isEnabled()) if (bc->isEnabled())
@@ -500,7 +498,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
updateInitialCMakeArguments(); updateInitialCMakeArguments();
}); });
connect(m_buildSystem->target()->project(), &Project::aboutToSaveSettings, this, [this] { connect(m_buildConfig->target()->project(), &Project::aboutToSaveSettings, this, [this] {
updateInitialCMakeArguments(); updateInitialCMakeArguments();
}); });
@@ -508,12 +506,12 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
&Utils::BaseAspect::labelLinkActivated, &Utils::BaseAspect::labelLinkActivated,
this, this,
[this](const QString &) { [this](const QString &) {
const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildSystem->kit()); const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildConfig->kit());
CMakeTool::openCMakeHelpUrl(tool, "%1/manual/cmake.1.html#options"); CMakeTool::openCMakeHelpUrl(tool, "%1/manual/cmake.1.html#options");
}); });
connect(&bc->additionalCMakeOptions, connect(&bc->additionalCMakeOptions,
&Utils::BaseAspect::labelLinkActivated, this, [this](const QString &) { &Utils::BaseAspect::labelLinkActivated, this, [this](const QString &) {
const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildSystem->kit()); const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildConfig->kit());
CMakeTool::openCMakeHelpUrl(tool, "%1/manual/cmake.1.html#options"); CMakeTool::openCMakeHelpUrl(tool, "%1/manual/cmake.1.html#options");
}); });
@@ -541,14 +539,14 @@ void CMakeBuildSettingsWidget::batchEditConfiguration()
"&lt;type&gt; can have one of the following values: FILEPATH, PATH, BOOL, INTERNAL, or STRING.<br/>" "&lt;type&gt; can have one of the following values: FILEPATH, PATH, BOOL, INTERNAL, or STRING.<br/>"
"To unset a variable, use -U&lt;variable&gt;.<br/>")); "To unset a variable, use -U&lt;variable&gt;.<br/>"));
connect(label, &QLabel::linkActivated, this, [this](const QString &) { connect(label, &QLabel::linkActivated, this, [this](const QString &) {
const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildSystem->target()->kit()); const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildConfig->target()->kit());
CMakeTool::openCMakeHelpUrl(tool, "%1/manual/cmake-variables.7.html"); CMakeTool::openCMakeHelpUrl(tool, "%1/manual/cmake-variables.7.html");
}); });
editor->setMinimumSize(800, 200); editor->setMinimumSize(800, 200);
auto chooser = new Utils::VariableChooser(dialog); auto chooser = new Utils::VariableChooser(dialog);
chooser->addSupportedWidget(editor); chooser->addSupportedWidget(editor);
chooser->addMacroExpanderProvider([this] { return m_buildSystem->buildConfiguration()->macroExpander(); }); chooser->addMacroExpanderProvider([this] { return m_buildConfig->macroExpander(); });
auto buttons = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel); auto buttons = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
@@ -559,7 +557,7 @@ void CMakeBuildSettingsWidget::batchEditConfiguration()
connect(buttons, &QDialogButtonBox::accepted, dialog, &QDialog::accept); connect(buttons, &QDialogButtonBox::accepted, dialog, &QDialog::accept);
connect(buttons, &QDialogButtonBox::rejected, dialog, &QDialog::reject); connect(buttons, &QDialogButtonBox::rejected, dialog, &QDialog::reject);
connect(dialog, &QDialog::accepted, this, [=]{ connect(dialog, &QDialog::accepted, this, [=]{
const auto expander = m_buildSystem->buildConfiguration()->macroExpander(); const auto expander = m_buildConfig->macroExpander();
const QStringList lines = editor->toPlainText().split('\n', Qt::SkipEmptyParts); const QStringList lines = editor->toPlainText().split('\n', Qt::SkipEmptyParts);
const QStringList expandedLines = Utils::transform(lines, const QStringList expandedLines = Utils::transform(lines,
@@ -577,7 +575,7 @@ void CMakeBuildSettingsWidget::batchEditConfiguration()
}); });
editor->setPlainText( editor->setPlainText(
m_buildSystem->configurationChangesArguments(isInitialConfiguration()) m_buildConfig->cmakeBuildSystem()->configurationChangesArguments(isInitialConfiguration())
.join('\n')); .join('\n'));
dialog->show(); dialog->show();
@@ -598,19 +596,19 @@ void CMakeBuildSettingsWidget::reconfigureWithInitialParameters()
if (reply != QMessageBox::Yes) if (reply != QMessageBox::Yes)
return; return;
m_buildSystem->clearCMakeCache(); m_buildConfig->cmakeBuildSystem()->clearCMakeCache();
updateInitialCMakeArguments(); updateInitialCMakeArguments();
if (ProjectExplorerPlugin::saveModifiedFiles()) if (ProjectExplorerPlugin::saveModifiedFiles())
m_buildSystem->runCMake(); m_buildConfig->cmakeBuildSystem()->runCMake();
} }
void CMakeBuildSettingsWidget::updateInitialCMakeArguments() void CMakeBuildSettingsWidget::updateInitialCMakeArguments()
{ {
CMakeConfig initialList = m_buildSystem->initialCMakeConfiguration(); CMakeConfig initialList = m_buildConfig->initialCMakeArguments.cmakeConfiguration();
for (const CMakeConfigItem &ci : m_buildSystem->configurationChanges()) { for (const CMakeConfigItem &ci : m_buildConfig->cmakeBuildSystem()->configurationChanges()) {
if (!ci.isInitial) if (!ci.isInitial)
continue; continue;
auto it = std::find_if(initialList.begin(), auto it = std::find_if(initialList.begin(),
@@ -627,19 +625,18 @@ void CMakeBuildSettingsWidget::updateInitialCMakeArguments()
} }
} }
auto bc = m_buildSystem->cmakeBuildConfiguration(); m_buildConfig->initialCMakeArguments.setCMakeConfiguration(initialList);
bc->initialCMakeArguments.setCMakeConfiguration(initialList);
// value() will contain only the unknown arguments (the non -D/-U arguments) // value() will contain only the unknown arguments (the non -D/-U arguments)
// As the user would expect to have e.g. "--preset" from "Initial Configuration" // As the user would expect to have e.g. "--preset" from "Initial Configuration"
// to "Current Configuration" as additional parameters // to "Current Configuration" as additional parameters
m_buildSystem->setAdditionalCMakeArguments(ProcessArgs::splitArgs( m_buildConfig->cmakeBuildSystem()->setAdditionalCMakeArguments(ProcessArgs::splitArgs(
bc->initialCMakeArguments(), HostOsInfo::hostOs())); m_buildConfig->initialCMakeArguments(), HostOsInfo::hostOs()));
} }
void CMakeBuildSettingsWidget::kitCMakeConfiguration() void CMakeBuildSettingsWidget::kitCMakeConfiguration()
{ {
m_buildSystem->kit()->blockNotification(); m_buildConfig->kit()->blockNotification();
auto dialog = new QDialog(this); auto dialog = new QDialog(this);
dialog->setWindowTitle(Tr::tr("Kit CMake Configuration")); dialog->setWindowTitle(Tr::tr("Kit CMake Configuration"));
@@ -647,7 +644,7 @@ void CMakeBuildSettingsWidget::kitCMakeConfiguration()
dialog->setModal(true); dialog->setModal(true);
dialog->setSizeGripEnabled(true); dialog->setSizeGripEnabled(true);
connect(dialog, &QDialog::finished, this, [this] { connect(dialog, &QDialog::finished, this, [this] {
m_buildSystem->kit()->unblockNotification(); m_buildConfig->kit()->unblockNotification();
}); });
CMakeKitAspect kitAspect; CMakeKitAspect kitAspect;
@@ -655,13 +652,13 @@ void CMakeBuildSettingsWidget::kitCMakeConfiguration()
CMakeConfigurationKitAspect configurationKitAspect; CMakeConfigurationKitAspect configurationKitAspect;
Layouting::Grid grid; Layouting::Grid grid;
KitAspectWidget *widget = kitAspect.createConfigWidget(m_buildSystem->kit()); KitAspectWidget *widget = kitAspect.createConfigWidget(m_buildConfig->kit());
widget->setParent(dialog); widget->setParent(dialog);
widget->addToLayoutWithLabel(grid, dialog); widget->addToLayoutWithLabel(grid, dialog);
widget = generatorAspect.createConfigWidget(m_buildSystem->kit()); widget = generatorAspect.createConfigWidget(m_buildConfig->kit());
widget->setParent(dialog); widget->setParent(dialog);
widget->addToLayoutWithLabel(grid, dialog); widget->addToLayoutWithLabel(grid, dialog);
widget = configurationKitAspect.createConfigWidget(m_buildSystem->kit()); widget = configurationKitAspect.createConfigWidget(m_buildConfig->kit());
widget->setParent(dialog); widget->setParent(dialog);
widget->addToLayoutWithLabel(grid, dialog); widget->addToLayoutWithLabel(grid, dialog);
grid.attachTo(dialog); grid.attachTo(dialog);
@@ -687,13 +684,12 @@ void CMakeBuildSettingsWidget::updateConfigureDetailsWidgetsSummary(
ProjectExplorer::ProcessParameters params; ProjectExplorer::ProcessParameters params;
CommandLine cmd; CommandLine cmd;
const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildSystem->kit()); const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildConfig->kit());
cmd.setExecutable(tool ? tool->cmakeExecutable() : "cmake"); cmd.setExecutable(tool ? tool->cmakeExecutable() : "cmake");
const BuildConfiguration *bc = m_buildSystem->buildConfiguration(); const FilePath buildDirectory = m_buildConfig ? m_buildConfig->buildDirectory() : ".";
const FilePath buildDirectory = bc ? bc->buildDirectory() : ".";
cmd.addArgs({"-S", m_buildSystem->projectDirectory().path()}); cmd.addArgs({"-S", m_buildConfig->project()->projectDirectory().path()});
cmd.addArgs({"-B", buildDirectory.path()}); cmd.addArgs({"-B", buildDirectory.path()});
cmd.addArgs(configurationArguments); cmd.addArgs(configurationArguments);
@@ -704,7 +700,7 @@ void CMakeBuildSettingsWidget::updateConfigureDetailsWidgetsSummary(
void CMakeBuildSettingsWidget::setError(const QString &message) void CMakeBuildSettingsWidget::setError(const QString &message)
{ {
m_buildSystem->buildConfiguration()->buildDirectoryAspect()->setProblem(message); m_buildConfig->buildDirectoryAspect()->setProblem(message);
} }
void CMakeBuildSettingsWidget::setWarning(const QString &message) void CMakeBuildSettingsWidget::setWarning(const QString &message)
@@ -716,7 +712,7 @@ void CMakeBuildSettingsWidget::setWarning(const QString &message)
void CMakeBuildSettingsWidget::updateButtonState() void CMakeBuildSettingsWidget::updateButtonState()
{ {
const bool isParsing = m_buildSystem->isParsing(); const bool isParsing = m_buildConfig->cmakeBuildSystem()->isParsing();
// Update extra data in buildconfiguration // Update extra data in buildconfiguration
const QList<ConfigModel::DataItem> changes = m_configModel->configurationForCMake(); const QList<ConfigModel::DataItem> changes = m_configModel->configurationForCMake();
@@ -757,12 +753,11 @@ void CMakeBuildSettingsWidget::updateButtonState()
const bool isInitial = isInitialConfiguration(); const bool isInitial = isInitialConfiguration();
m_resetButton->setEnabled(m_configModel->hasChanges(isInitial) && !isParsing); m_resetButton->setEnabled(m_configModel->hasChanges(isInitial) && !isParsing);
CMakeBuildConfiguration *bc = m_buildSystem->cmakeBuildConfiguration(); m_buildConfig->initialCMakeArguments.setVisible(isInitialConfiguration());
bc->initialCMakeArguments.setVisible(isInitialConfiguration()); m_buildConfig->additionalCMakeOptions.setVisible(!isInitialConfiguration());
bc->additionalCMakeOptions.setVisible(!isInitialConfiguration());
bc->initialCMakeArguments.setEnabled(!isParsing); m_buildConfig->initialCMakeArguments.setEnabled(!isParsing);
bc->additionalCMakeOptions.setEnabled(!isParsing); m_buildConfig->additionalCMakeOptions.setEnabled(!isParsing);
// Update label and text boldness of the reconfigure button // Update label and text boldness of the reconfigure button
QFont reconfigureButtonFont = m_reconfigureButton->font(); QFont reconfigureButtonFont = m_reconfigureButton->font();
@@ -781,11 +776,11 @@ void CMakeBuildSettingsWidget::updateButtonState()
} }
m_reconfigureButton->setFont(reconfigureButtonFont); m_reconfigureButton->setFont(reconfigureButtonFont);
m_buildSystem->setConfigurationChanges(configChanges); m_buildConfig->cmakeBuildSystem()->setConfigurationChanges(configChanges);
// Update the tooltip with the changes // Update the tooltip with the changes
const QStringList configurationArguments = m_buildSystem->configurationChangesArguments( const QStringList configurationArguments =
isInitialConfiguration()); m_buildConfig->cmakeBuildSystem()->configurationChangesArguments(isInitialConfiguration());
m_reconfigureButton->setToolTip(configurationArguments.join('\n')); m_reconfigureButton->setToolTip(configurationArguments.join('\n'));
updateConfigureDetailsWidgetsSummary(configurationArguments); updateConfigureDetailsWidgetsSummary(configurationArguments);
} }
@@ -805,7 +800,7 @@ void CMakeBuildSettingsWidget::updateAdvancedCheckBox()
void CMakeBuildSettingsWidget::updateFromKit() void CMakeBuildSettingsWidget::updateFromKit()
{ {
const Kit *k = m_buildSystem->kit(); const Kit *k = m_buildConfig->kit();
CMakeConfig config = CMakeConfigurationKitAspect::configuration(k); CMakeConfig config = CMakeConfigurationKitAspect::configuration(k);
config.append(CMakeGeneratorKitAspect::generatorCMakeConfig(k)); config.append(CMakeGeneratorKitAspect::generatorCMakeConfig(k));
@@ -820,9 +815,8 @@ void CMakeBuildSettingsWidget::updateFromKit()
// Then the additional parameters // Then the additional parameters
const QStringList additionalKitCMake = ProcessArgs::splitArgs( const QStringList additionalKitCMake = ProcessArgs::splitArgs(
CMakeConfigurationKitAspect::additionalConfiguration(k), HostOsInfo::hostOs()); CMakeConfigurationKitAspect::additionalConfiguration(k), HostOsInfo::hostOs());
const QStringList additionalInitialCMake = ProcessArgs::splitArgs( const QStringList additionalInitialCMake =
m_buildSystem->cmakeBuildConfiguration()->initialCMakeArguments(), ProcessArgs::splitArgs(m_buildConfig->initialCMakeArguments(), HostOsInfo::hostOs());
HostOsInfo::hostOs());
QStringList mergedArgumentList; QStringList mergedArgumentList;
std::set_union(additionalInitialCMake.begin(), std::set_union(additionalInitialCMake.begin(),
@@ -830,8 +824,7 @@ void CMakeBuildSettingsWidget::updateFromKit()
additionalKitCMake.begin(), additionalKitCMake.begin(),
additionalKitCMake.end(), additionalKitCMake.end(),
std::back_inserter(mergedArgumentList)); std::back_inserter(mergedArgumentList));
m_buildSystem->cmakeBuildConfiguration()->initialCMakeArguments m_buildConfig->initialCMakeArguments.setValue(ProcessArgs::joinArgs(mergedArgumentList));
.setValue(ProcessArgs::joinArgs(mergedArgumentList));
} }
void CMakeBuildSettingsWidget::updateConfigurationStateIndex(int index) void CMakeBuildSettingsWidget::updateConfigurationStateIndex(int index)
@@ -850,13 +843,12 @@ void CMakeBuildSettingsWidget::updateConfigurationStateIndex(int index)
CMakeConfig CMakeBuildSettingsWidget::getQmlDebugCxxFlags() CMakeConfig CMakeBuildSettingsWidget::getQmlDebugCxxFlags()
{ {
const auto aspect = m_buildSystem->buildConfiguration()->aspect<QtSupport::QmlDebuggingAspect>(); const TriState qmlDebuggingState = m_buildConfig->qmlDebugging.value();
const TriState qmlDebuggingState = aspect->value();
if (qmlDebuggingState == TriState::Default) // don't touch anything if (qmlDebuggingState == TriState::Default) // don't touch anything
return {}; return {};
const bool enable = aspect->value() == TriState::Enabled; const bool enable = m_buildConfig->qmlDebugging.value() == TriState::Enabled;
const CMakeConfig configList = m_buildSystem->configurationFromCMake(); const CMakeConfig configList = m_buildConfig->cmakeBuildSystem()->configurationFromCMake();
const QByteArrayList cxxFlagsPrev{"CMAKE_CXX_FLAGS", const QByteArrayList cxxFlagsPrev{"CMAKE_CXX_FLAGS",
"CMAKE_CXX_FLAGS_DEBUG", "CMAKE_CXX_FLAGS_DEBUG",
"CMAKE_CXX_FLAGS_RELWITHDEBINFO", "CMAKE_CXX_FLAGS_RELWITHDEBINFO",
@@ -867,7 +859,7 @@ CMakeConfig CMakeBuildSettingsWidget::getQmlDebugCxxFlags()
CMakeConfig changedConfig; CMakeConfig changedConfig;
if (enable) { if (enable) {
const FilePath cmakeCache = m_buildSystem->cmakeBuildConfiguration()->buildDirectory().pathAppended("CMakeCache.txt"); const FilePath cmakeCache = m_buildConfig->buildDirectory().pathAppended("CMakeCache.txt");
// Only modify the CMAKE_CXX_FLAGS variable if the project was previously configured // Only modify the CMAKE_CXX_FLAGS variable if the project was previously configured
// otherwise CMAKE_CXX_FLAGS_INIT will take care of setting the qmlDebug define // otherwise CMAKE_CXX_FLAGS_INIT will take care of setting the qmlDebug define
@@ -903,10 +895,10 @@ CMakeConfig CMakeBuildSettingsWidget::getQmlDebugCxxFlags()
CMakeConfig CMakeBuildSettingsWidget::getSigningFlagsChanges() CMakeConfig CMakeBuildSettingsWidget::getSigningFlagsChanges()
{ {
const CMakeConfig flags = m_buildSystem->cmakeBuildConfiguration()->signingFlags(); const CMakeConfig flags = m_buildConfig->signingFlags();
if (flags.isEmpty()) if (flags.isEmpty())
return {}; return {};
const CMakeConfig configList = m_buildSystem->configurationFromCMake(); const CMakeConfig configList = m_buildConfig->cmakeBuildSystem()->configurationFromCMake();
if (configList.isEmpty()) { if (configList.isEmpty()) {
// we don't have any configuration --> initial configuration takes care of this itself // we don't have any configuration --> initial configuration takes care of this itself
return {}; return {};
@@ -950,8 +942,7 @@ void CMakeBuildSettingsWidget::updateSelection()
void CMakeBuildSettingsWidget::updateConfigurationStateSelection() void CMakeBuildSettingsWidget::updateConfigurationStateSelection()
{ {
const bool hasReplyFile const bool hasReplyFile
= FileApiParser::scanForCMakeReplyFile( = FileApiParser::scanForCMakeReplyFile(m_buildConfig->buildDirectory()).exists();
m_buildSystem->buildConfiguration()->buildDirectory()).exists();
const int switchToIndex = hasReplyFile ? 1 : 0; const int switchToIndex = hasReplyFile ? 1 : 0;
if (m_configurationStates->currentIndex() != switchToIndex) if (m_configurationStates->currentIndex() != switchToIndex)
@@ -1029,7 +1020,7 @@ bool CMakeBuildSettingsWidget::eventFilter(QObject *target, QEvent *event)
connect(help, &QAction::triggered, this, [=] { connect(help, &QAction::triggered, this, [=] {
const CMakeConfigItem item = ConfigModel::dataItemFromIndex(idx).toCMakeConfigItem(); const CMakeConfigItem item = ConfigModel::dataItemFromIndex(idx).toCMakeConfigItem();
const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildSystem->target()->kit()); const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildConfig->target()->kit());
const QString linkUrl = "%1/variable/" + QString::fromUtf8(item.key) + ".html"; const QString linkUrl = "%1/variable/" + QString::fromUtf8(item.key) + ".html";
CMakeTool::openCMakeHelpUrl(tool, linkUrl); CMakeTool::openCMakeHelpUrl(tool, linkUrl);
}); });
@@ -1082,8 +1073,7 @@ bool CMakeBuildSettingsWidget::eventFilter(QObject *target, QEvent *event)
const QStringList variableList const QStringList variableList
= Utils::transform(validIndexes, [this](const QModelIndex &index) { = Utils::transform(validIndexes, [this](const QModelIndex &index) {
return ConfigModel::dataItemFromIndex(index).toCMakeConfigItem().toArgument( return ConfigModel::dataItemFromIndex(index).toCMakeConfigItem().toArgument(
isInitialConfiguration() ? nullptr isInitialConfiguration() ? nullptr : m_buildConfig->macroExpander());
: m_buildSystem->buildConfiguration()->macroExpander());
}); });
setClipboardAndSelection(variableList.join('\n')); setClipboardAndSelection(variableList.join('\n'));
@@ -1660,11 +1650,6 @@ QStringList CMakeBuildSystem::configurationChangesArguments(bool initialParamete
return Utils::transform(filteredInitials, &CMakeConfigItem::toArgument); return Utils::transform(filteredInitials, &CMakeConfigItem::toArgument);
} }
QStringList CMakeBuildSystem::initialCMakeArguments() const
{
return cmakeBuildConfiguration()->initialCMakeArguments.allValues();
}
CMakeConfig CMakeBuildSystem::initialCMakeConfiguration() const CMakeConfig CMakeBuildSystem::initialCMakeConfiguration() const
{ {
return cmakeBuildConfiguration()->initialCMakeArguments.cmakeConfiguration(); return cmakeBuildConfiguration()->initialCMakeArguments.cmakeConfiguration();
@@ -1729,19 +1714,18 @@ void CMakeBuildSystem::setAdditionalCMakeArguments(const QStringList &args)
.setValue(ProcessArgs::joinArgs(nonEmptyAdditionalArguments)); .setValue(ProcessArgs::joinArgs(nonEmptyAdditionalArguments));
} }
void CMakeBuildSystem::filterConfigArgumentsFromAdditionalCMakeArguments() void CMakeBuildConfiguration::filterConfigArgumentsFromAdditionalCMakeArguments()
{ {
// On iOS the %{Ios:DevelopmentTeam:Flag} evalues to something like // On iOS the %{Ios:DevelopmentTeam:Flag} evalues to something like
// -DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM:STRING=MAGICSTRING // -DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM:STRING=MAGICSTRING
// which is already part of the CMake variables and should not be also // which is already part of the CMake variables and should not be also
// in the addtional CMake options // in the addtional CMake options
const QStringList arguments = ProcessArgs::splitArgs( const QStringList arguments = ProcessArgs::splitArgs(additionalCMakeOptions(),
cmakeBuildConfiguration()->additionalCMakeOptions(),
HostOsInfo::hostOs()); HostOsInfo::hostOs());
QStringList unknownOptions; QStringList unknownOptions;
const CMakeConfig config = CMakeConfig::fromArguments(arguments, unknownOptions); const CMakeConfig config = CMakeConfig::fromArguments(arguments, unknownOptions);
cmakeBuildConfiguration()->additionalCMakeOptions.setValue(ProcessArgs::joinArgs(unknownOptions)); additionalCMakeOptions.setValue(ProcessArgs::joinArgs(unknownOptions));
} }
void CMakeBuildSystem::setError(const QString &message) void CMakeBuildSystem::setError(const QString &message)
@@ -1781,7 +1765,7 @@ QString CMakeBuildSystem::warning() const
NamedWidget *CMakeBuildConfiguration::createConfigWidget() NamedWidget *CMakeBuildConfiguration::createConfigWidget()
{ {
return new CMakeBuildSettingsWidget(m_buildSystem); return new CMakeBuildSettingsWidget(this);
} }
CMakeConfig CMakeBuildConfiguration::signingFlags() const CMakeConfig CMakeBuildConfiguration::signingFlags() const
@@ -1789,7 +1773,7 @@ CMakeConfig CMakeBuildConfiguration::signingFlags() const
return {}; return {};
} }
void CMakeBuildConfiguration::setInitialBuildAndCleanSteps(const ProjectExplorer::Target *target) void CMakeBuildConfiguration::setInitialBuildAndCleanSteps(const Target *target)
{ {
const CMakeConfigItem presetItem = CMakeConfigurationKitAspect::cmakePresetConfigItem( const CMakeConfigItem presetItem = CMakeConfigurationKitAspect::cmakePresetConfigItem(
target->kit()); target->kit());
@@ -2036,6 +2020,11 @@ BuildSystem *CMakeBuildConfiguration::buildSystem() const
return m_buildSystem; return m_buildSystem;
} }
CMakeBuildSystem *CMakeBuildConfiguration::cmakeBuildSystem() const
{
return m_buildSystem;
}
void CMakeBuildConfiguration::addToEnvironment(Utils::Environment &env) const void CMakeBuildConfiguration::addToEnvironment(Utils::Environment &env) const
{ {
const CMakeTool *tool = CMakeKitAspect::cmakeTool(kit()); const CMakeTool *tool = CMakeKitAspect::cmakeTool(kit());

View File

@@ -71,6 +71,7 @@ public:
void addToEnvironment(Utils::Environment &env) const override; void addToEnvironment(Utils::Environment &env) const override;
Utils::Environment configureEnvironment() const; Utils::Environment configureEnvironment() const;
Internal::CMakeBuildSystem *cmakeBuildSystem() const;
ProjectExplorer::BuildDirectoryAspect buildDir{this}; ProjectExplorer::BuildDirectoryAspect buildDir{this};
Internal::InitialCMakeArgumentsAspect initialCMakeArguments{this}; Internal::InitialCMakeArgumentsAspect initialCMakeArguments{this};
@@ -97,6 +98,7 @@ private:
void setInitialBuildAndCleanSteps(const ProjectExplorer::Target *target); void setInitialBuildAndCleanSteps(const ProjectExplorer::Target *target);
void setBuildPresetToBuildSteps(const ProjectExplorer::Target *target); void setBuildPresetToBuildSteps(const ProjectExplorer::Target *target);
void filterConfigArgumentsFromAdditionalCMakeArguments();
Internal::CMakeBuildSystem *m_buildSystem = nullptr; Internal::CMakeBuildSystem *m_buildSystem = nullptr;

View File

@@ -1572,7 +1572,8 @@ void CMakeBuildSystem::updateQmlJSCodeModel(const QStringList &extraHeaderPaths,
void CMakeBuildSystem::updateInitialCMakeExpandableVars() void CMakeBuildSystem::updateInitialCMakeExpandableVars()
{ {
const CMakeConfig &cm = configurationFromCMake(); const CMakeConfig &cm = configurationFromCMake();
const CMakeConfig &initialConfig = initialCMakeConfiguration(); const CMakeConfig &initialConfig =
cmakeBuildConfiguration()->initialCMakeArguments.cmakeConfiguration();
CMakeConfig config; CMakeConfig config;
@@ -1733,7 +1734,8 @@ void CMakeBuildSystem::runGenerator(Id id)
QList<CMakeConfigItem> configItems = Utils::filtered(m_configurationChanges.toList(), QList<CMakeConfigItem> configItems = Utils::filtered(m_configurationChanges.toList(),
itemFilter); itemFilter);
const QList<CMakeConfigItem> initialConfigItems const QList<CMakeConfigItem> initialConfigItems
= Utils::filtered(initialCMakeConfiguration().toList(), itemFilter); = Utils::filtered(cmakeBuildConfiguration()->initialCMakeArguments.cmakeConfiguration().toList(),
itemFilter);
for (const CMakeConfigItem &item : std::as_const(initialConfigItems)) { for (const CMakeConfigItem &item : std::as_const(initialConfigItems)) {
if (!Utils::contains(configItems, [&item](const CMakeConfigItem &existingItem) { if (!Utils::contains(configItems, [&item](const CMakeConfigItem &existingItem) {
return existingItem.key == item.key; return existingItem.key == item.key;

View File

@@ -109,14 +109,9 @@ public:
QStringList configurationChangesArguments(bool initialParameters = false) const; QStringList configurationChangesArguments(bool initialParameters = false) const;
QStringList initialCMakeArguments() const;
CMakeConfig initialCMakeConfiguration() const;
QStringList additionalCMakeArguments() const; QStringList additionalCMakeArguments() const;
void setAdditionalCMakeArguments(const QStringList &args); void setAdditionalCMakeArguments(const QStringList &args);
void filterConfigArgumentsFromAdditionalCMakeArguments();
void setConfigurationFromCMake(const CMakeConfig &config); void setConfigurationFromCMake(const CMakeConfig &config);
void setConfigurationChanges(const CMakeConfig &config); void setConfigurationChanges(const CMakeConfig &config);
@@ -132,6 +127,8 @@ signals:
void warningOccurred(const QString &message); void warningOccurred(const QString &message);
private: private:
CMakeConfig initialCMakeConfiguration() const;
QList<QPair<Utils::Id, QString>> generators() const override; QList<QPair<Utils::Id, QString>> generators() const override;
void runGenerator(Utils::Id id) override; void runGenerator(Utils::Id id) override;
ProjectExplorer::ExtraCompiler *findExtraCompiler( ProjectExplorer::ExtraCompiler *findExtraCompiler(