diff --git a/src/plugins/cmakeprojectmanager/builddirparameters.cpp b/src/plugins/cmakeprojectmanager/builddirparameters.cpp index 8b7680340a0..a4068c06b4d 100644 --- a/src/plugins/cmakeprojectmanager/builddirparameters.cpp +++ b/src/plugins/cmakeprojectmanager/builddirparameters.cpp @@ -31,7 +31,7 @@ BuildDirParameters::BuildDirParameters(CMakeBuildSystem *buildSystem) expander = bc->macroExpander(); - const QStringList expandedArguments = Utils::transform(buildSystem->initialCMakeArguments(), + const QStringList expandedArguments = Utils::transform(bc->initialCMakeArguments.allValues(), [this](const QString &s) { return expander->expand(s); }); diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index b48e9df71bf..2444d5a4623 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -101,7 +101,7 @@ namespace Internal { class CMakeBuildSettingsWidget : public NamedWidget { public: - CMakeBuildSettingsWidget(CMakeBuildSystem *bc); + explicit CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc); void setError(const QString &message); void setWarning(const QString &message); @@ -129,7 +129,7 @@ private: void updateConfigureDetailsWidgetsSummary( const QStringList &configurationArguments = QStringList()); - CMakeBuildSystem *m_buildSystem; + CMakeBuildConfiguration *m_buildConfig; QTreeView *m_configView; ConfigModel *m_configModel; CategorySortFilterModel *m_configFilterModel; @@ -166,15 +166,14 @@ static QModelIndex mapToSource(const QAbstractItemView *view, const QModelIndex return result; } -CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) : +CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) : NamedWidget(Tr::tr("CMake")), - m_buildSystem(bs), + m_buildConfig(bc), m_configModel(new ConfigModel(this)), m_configFilterModel(new CategorySortFilterModel(this)), m_configTextFilterModel(new CategorySortFilterModel(this)) { - QTC_ASSERT(bs, return); - CMakeBuildConfiguration *bc = bs->cmakeBuildConfiguration(); + QTC_ASSERT(m_buildConfig, return); m_configureDetailsWidget = new DetailsWidget; @@ -189,10 +188,11 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) : m_configModel->flush(); // clear out config cache...; }); - connect(&bc->buildTypeAspect, &BaseAspect::changed, this, [this, bc] { - if (!m_buildSystem->isMultiConfig()) { + connect(&m_buildConfig->buildTypeAspect, &BaseAspect::changed, this, [this] { + if (!m_buildConfig->cmakeBuildSystem()->isMultiConfig()) { CMakeConfig config; - config << CMakeConfigItem("CMAKE_BUILD_TYPE", bc->buildTypeAspect().toUtf8()); + config << CMakeConfigItem("CMAKE_BUILD_TYPE", + m_buildConfig->buildTypeAspect().toUtf8()); m_configModel->setBatchEditConfiguration(config); } @@ -360,10 +360,12 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) : }.attachTo(this); 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(); m_configView->setEnabled(false); m_showProgressTimer.start(); @@ -371,28 +373,26 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) : m_configModel->setMacroExpander(bc->macroExpander()); - if (m_buildSystem->isParsing()) + if (bs->isParsing()) m_showProgressTimer.start(); else { - m_configModel->setConfiguration(m_buildSystem->configurationFromCMake()); + m_configModel->setConfiguration(bs->configurationFromCMake()); m_configModel->setInitialParametersConfiguration( - m_buildSystem->initialCMakeConfiguration()); + m_buildConfig->initialCMakeArguments.cmakeConfiguration()); } - connect(m_buildSystem, &BuildSystem::parsingFinished, this, [this] { - const CMakeConfig config = m_buildSystem->configurationFromCMake(); - auto qmlDebugAspect = m_buildSystem->buildConfiguration() - ->aspect(); - const TriState qmlDebugSetting = qmlDebugAspect->value(); + connect(bs, &BuildSystem::parsingFinished, this, [this, bs] { + const CMakeConfig config = bs->configurationFromCMake(); + const TriState qmlDebugSetting = m_buildConfig->qmlDebugging.value(); bool qmlDebugConfig = CMakeBuildConfiguration::hasQmlDebugging(config); if ((qmlDebugSetting == TriState::Enabled && !qmlDebugConfig) || (qmlDebugSetting == TriState::Disabled && qmlDebugConfig)) { - qmlDebugAspect->setValue(TriState::Default); + m_buildConfig->qmlDebugging.setValue(TriState::Default); } m_configModel->setConfiguration(config); m_configModel->setInitialParametersConfiguration( - m_buildSystem->initialCMakeConfiguration()); - m_buildSystem->filterConfigArgumentsFromAdditionalCMakeArguments(); + m_buildConfig->initialCMakeArguments.cmakeConfiguration()); + m_buildConfig->filterConfigArgumentsFromAdditionalCMakeArguments(); updateFromKit(); m_configView->setEnabled(true); updateButtonState(); @@ -401,11 +401,11 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) : updateConfigurationStateSelection(); }); - connect(m_buildSystem, &CMakeBuildSystem::configurationCleared, this, [this] { + connect(bs, &CMakeBuildSystem::configurationCleared, this, [this] { updateConfigurationStateSelection(); }); - connect(m_buildSystem, &CMakeBuildSystem::errorOccurred, this, [this] { + connect(bs, &CMakeBuildSystem::errorOccurred, this, [this] { m_showProgressTimer.stop(); m_progressIndicator->hide(); updateConfigurationStateSelection(); @@ -416,10 +416,8 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) : connect(m_configModel, &QAbstractItemModel::modelReset, this, &CMakeBuildSettingsWidget::updateButtonState); - connect(m_buildSystem->cmakeBuildConfiguration(), - &CMakeBuildConfiguration::signingFlagsChanged, - this, - &CMakeBuildSettingsWidget::updateButtonState); + connect(m_buildConfig, &CMakeBuildConfiguration::signingFlagsChanged, + this, &CMakeBuildSettingsWidget::updateButtonState); connect(m_showAdvancedCheckBox, &QCheckBox::stateChanged, this, &CMakeBuildSettingsWidget::updateAdvancedCheckBox); @@ -436,15 +434,15 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) : connect(m_resetButton, &QPushButton::clicked, this, [this] { m_configModel->resetAllChanges(isInitialConfiguration()); }); - connect(m_reconfigureButton, &QPushButton::clicked, this, [this] { - if (!m_buildSystem->isParsing()) { + connect(m_reconfigureButton, &QPushButton::clicked, this, [this, bs] { + if (!bs->isParsing()) { if (isInitialConfiguration()) { reconfigureWithInitialParameters(); } else { - m_buildSystem->runCMakeWithExtraArguments(); + bs->runCMakeWithExtraArguments(); } } else { - m_buildSystem->stopCMakeRun(); + bs->stopCMakeRun(); m_reconfigureButton->setEnabled(false); } }); @@ -481,16 +479,16 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) : connect(m_batchEditButton, &QAbstractButton::clicked, this, &CMakeBuildSettingsWidget::batchEditConfiguration); - connect(m_buildSystem, &CMakeBuildSystem::errorOccurred, + connect(bs, &CMakeBuildSystem::errorOccurred, this, &CMakeBuildSettingsWidget::setError); - connect(m_buildSystem, &CMakeBuildSystem::warningOccurred, + connect(bs, &CMakeBuildSystem::warningOccurred, this, &CMakeBuildSettingsWidget::setWarning); - connect(m_buildSystem, &CMakeBuildSystem::configurationChanged, + connect(bs, &CMakeBuildSystem::configurationChanged, m_configModel, &ConfigModel::setBatchEditConfiguration); updateFromKit(); - connect(m_buildSystem->target(), &Target::kitChanged, + connect(m_buildConfig->target(), &Target::kitChanged, this, &CMakeBuildSettingsWidget::updateFromKit); connect(bc, &CMakeBuildConfiguration::enabledChanged, this, [this, bc] { if (bc->isEnabled()) @@ -500,7 +498,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) : updateInitialCMakeArguments(); }); - connect(m_buildSystem->target()->project(), &Project::aboutToSaveSettings, this, [this] { + connect(m_buildConfig->target()->project(), &Project::aboutToSaveSettings, this, [this] { updateInitialCMakeArguments(); }); @@ -508,12 +506,12 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) : &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"); }); connect(&bc->additionalCMakeOptions, &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"); }); @@ -541,14 +539,14 @@ void CMakeBuildSettingsWidget::batchEditConfiguration() "<type> can have one of the following values: FILEPATH, PATH, BOOL, INTERNAL, or STRING.
" "To unset a variable, use -U<variable>.
")); 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"); }); editor->setMinimumSize(800, 200); auto chooser = new Utils::VariableChooser(dialog); 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); @@ -559,7 +557,7 @@ void CMakeBuildSettingsWidget::batchEditConfiguration() connect(buttons, &QDialogButtonBox::accepted, dialog, &QDialog::accept); connect(buttons, &QDialogButtonBox::rejected, dialog, &QDialog::reject); 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 expandedLines = Utils::transform(lines, @@ -577,7 +575,7 @@ void CMakeBuildSettingsWidget::batchEditConfiguration() }); editor->setPlainText( - m_buildSystem->configurationChangesArguments(isInitialConfiguration()) + m_buildConfig->cmakeBuildSystem()->configurationChangesArguments(isInitialConfiguration()) .join('\n')); dialog->show(); @@ -598,19 +596,19 @@ void CMakeBuildSettingsWidget::reconfigureWithInitialParameters() if (reply != QMessageBox::Yes) return; - m_buildSystem->clearCMakeCache(); + m_buildConfig->cmakeBuildSystem()->clearCMakeCache(); updateInitialCMakeArguments(); if (ProjectExplorerPlugin::saveModifiedFiles()) - m_buildSystem->runCMake(); + m_buildConfig->cmakeBuildSystem()->runCMake(); } 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) continue; auto it = std::find_if(initialList.begin(), @@ -627,19 +625,18 @@ void CMakeBuildSettingsWidget::updateInitialCMakeArguments() } } - auto bc = m_buildSystem->cmakeBuildConfiguration(); - bc->initialCMakeArguments.setCMakeConfiguration(initialList); + m_buildConfig->initialCMakeArguments.setCMakeConfiguration(initialList); // 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" // to "Current Configuration" as additional parameters - m_buildSystem->setAdditionalCMakeArguments(ProcessArgs::splitArgs( - bc->initialCMakeArguments(), HostOsInfo::hostOs())); + m_buildConfig->cmakeBuildSystem()->setAdditionalCMakeArguments(ProcessArgs::splitArgs( + m_buildConfig->initialCMakeArguments(), HostOsInfo::hostOs())); } void CMakeBuildSettingsWidget::kitCMakeConfiguration() { - m_buildSystem->kit()->blockNotification(); + m_buildConfig->kit()->blockNotification(); auto dialog = new QDialog(this); dialog->setWindowTitle(Tr::tr("Kit CMake Configuration")); @@ -647,7 +644,7 @@ void CMakeBuildSettingsWidget::kitCMakeConfiguration() dialog->setModal(true); dialog->setSizeGripEnabled(true); connect(dialog, &QDialog::finished, this, [this] { - m_buildSystem->kit()->unblockNotification(); + m_buildConfig->kit()->unblockNotification(); }); CMakeKitAspect kitAspect; @@ -655,13 +652,13 @@ void CMakeBuildSettingsWidget::kitCMakeConfiguration() CMakeConfigurationKitAspect configurationKitAspect; Layouting::Grid grid; - KitAspectWidget *widget = kitAspect.createConfigWidget(m_buildSystem->kit()); + KitAspectWidget *widget = kitAspect.createConfigWidget(m_buildConfig->kit()); widget->setParent(dialog); widget->addToLayoutWithLabel(grid, dialog); - widget = generatorAspect.createConfigWidget(m_buildSystem->kit()); + widget = generatorAspect.createConfigWidget(m_buildConfig->kit()); widget->setParent(dialog); widget->addToLayoutWithLabel(grid, dialog); - widget = configurationKitAspect.createConfigWidget(m_buildSystem->kit()); + widget = configurationKitAspect.createConfigWidget(m_buildConfig->kit()); widget->setParent(dialog); widget->addToLayoutWithLabel(grid, dialog); grid.attachTo(dialog); @@ -687,13 +684,12 @@ void CMakeBuildSettingsWidget::updateConfigureDetailsWidgetsSummary( ProjectExplorer::ProcessParameters params; CommandLine cmd; - const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildSystem->kit()); + const CMakeTool *tool = CMakeKitAspect::cmakeTool(m_buildConfig->kit()); cmd.setExecutable(tool ? tool->cmakeExecutable() : "cmake"); - const BuildConfiguration *bc = m_buildSystem->buildConfiguration(); - const FilePath buildDirectory = bc ? bc->buildDirectory() : "."; + const FilePath buildDirectory = m_buildConfig ? m_buildConfig->buildDirectory() : "."; - cmd.addArgs({"-S", m_buildSystem->projectDirectory().path()}); + cmd.addArgs({"-S", m_buildConfig->project()->projectDirectory().path()}); cmd.addArgs({"-B", buildDirectory.path()}); cmd.addArgs(configurationArguments); @@ -704,7 +700,7 @@ void CMakeBuildSettingsWidget::updateConfigureDetailsWidgetsSummary( void CMakeBuildSettingsWidget::setError(const QString &message) { - m_buildSystem->buildConfiguration()->buildDirectoryAspect()->setProblem(message); + m_buildConfig->buildDirectoryAspect()->setProblem(message); } void CMakeBuildSettingsWidget::setWarning(const QString &message) @@ -716,7 +712,7 @@ void CMakeBuildSettingsWidget::setWarning(const QString &message) void CMakeBuildSettingsWidget::updateButtonState() { - const bool isParsing = m_buildSystem->isParsing(); + const bool isParsing = m_buildConfig->cmakeBuildSystem()->isParsing(); // Update extra data in buildconfiguration const QList changes = m_configModel->configurationForCMake(); @@ -757,12 +753,11 @@ void CMakeBuildSettingsWidget::updateButtonState() const bool isInitial = isInitialConfiguration(); m_resetButton->setEnabled(m_configModel->hasChanges(isInitial) && !isParsing); - CMakeBuildConfiguration *bc = m_buildSystem->cmakeBuildConfiguration(); - bc->initialCMakeArguments.setVisible(isInitialConfiguration()); - bc->additionalCMakeOptions.setVisible(!isInitialConfiguration()); + m_buildConfig->initialCMakeArguments.setVisible(isInitialConfiguration()); + m_buildConfig->additionalCMakeOptions.setVisible(!isInitialConfiguration()); - bc->initialCMakeArguments.setEnabled(!isParsing); - bc->additionalCMakeOptions.setEnabled(!isParsing); + m_buildConfig->initialCMakeArguments.setEnabled(!isParsing); + m_buildConfig->additionalCMakeOptions.setEnabled(!isParsing); // Update label and text boldness of the reconfigure button QFont reconfigureButtonFont = m_reconfigureButton->font(); @@ -781,11 +776,11 @@ void CMakeBuildSettingsWidget::updateButtonState() } m_reconfigureButton->setFont(reconfigureButtonFont); - m_buildSystem->setConfigurationChanges(configChanges); + m_buildConfig->cmakeBuildSystem()->setConfigurationChanges(configChanges); // Update the tooltip with the changes - const QStringList configurationArguments = m_buildSystem->configurationChangesArguments( - isInitialConfiguration()); + const QStringList configurationArguments = + m_buildConfig->cmakeBuildSystem()->configurationChangesArguments(isInitialConfiguration()); m_reconfigureButton->setToolTip(configurationArguments.join('\n')); updateConfigureDetailsWidgetsSummary(configurationArguments); } @@ -805,7 +800,7 @@ void CMakeBuildSettingsWidget::updateAdvancedCheckBox() void CMakeBuildSettingsWidget::updateFromKit() { - const Kit *k = m_buildSystem->kit(); + const Kit *k = m_buildConfig->kit(); CMakeConfig config = CMakeConfigurationKitAspect::configuration(k); config.append(CMakeGeneratorKitAspect::generatorCMakeConfig(k)); @@ -820,9 +815,8 @@ void CMakeBuildSettingsWidget::updateFromKit() // Then the additional parameters const QStringList additionalKitCMake = ProcessArgs::splitArgs( CMakeConfigurationKitAspect::additionalConfiguration(k), HostOsInfo::hostOs()); - const QStringList additionalInitialCMake = ProcessArgs::splitArgs( - m_buildSystem->cmakeBuildConfiguration()->initialCMakeArguments(), - HostOsInfo::hostOs()); + const QStringList additionalInitialCMake = + ProcessArgs::splitArgs(m_buildConfig->initialCMakeArguments(), HostOsInfo::hostOs()); QStringList mergedArgumentList; std::set_union(additionalInitialCMake.begin(), @@ -830,8 +824,7 @@ void CMakeBuildSettingsWidget::updateFromKit() additionalKitCMake.begin(), additionalKitCMake.end(), std::back_inserter(mergedArgumentList)); - m_buildSystem->cmakeBuildConfiguration()->initialCMakeArguments - .setValue(ProcessArgs::joinArgs(mergedArgumentList)); + m_buildConfig->initialCMakeArguments.setValue(ProcessArgs::joinArgs(mergedArgumentList)); } void CMakeBuildSettingsWidget::updateConfigurationStateIndex(int index) @@ -850,13 +843,12 @@ void CMakeBuildSettingsWidget::updateConfigurationStateIndex(int index) CMakeConfig CMakeBuildSettingsWidget::getQmlDebugCxxFlags() { - const auto aspect = m_buildSystem->buildConfiguration()->aspect(); - const TriState qmlDebuggingState = aspect->value(); + const TriState qmlDebuggingState = m_buildConfig->qmlDebugging.value(); if (qmlDebuggingState == TriState::Default) // don't touch anything 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", "CMAKE_CXX_FLAGS_DEBUG", "CMAKE_CXX_FLAGS_RELWITHDEBINFO", @@ -867,7 +859,7 @@ CMakeConfig CMakeBuildSettingsWidget::getQmlDebugCxxFlags() CMakeConfig changedConfig; 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 // otherwise CMAKE_CXX_FLAGS_INIT will take care of setting the qmlDebug define @@ -903,10 +895,10 @@ CMakeConfig CMakeBuildSettingsWidget::getQmlDebugCxxFlags() CMakeConfig CMakeBuildSettingsWidget::getSigningFlagsChanges() { - const CMakeConfig flags = m_buildSystem->cmakeBuildConfiguration()->signingFlags(); + const CMakeConfig flags = m_buildConfig->signingFlags(); if (flags.isEmpty()) return {}; - const CMakeConfig configList = m_buildSystem->configurationFromCMake(); + const CMakeConfig configList = m_buildConfig->cmakeBuildSystem()->configurationFromCMake(); if (configList.isEmpty()) { // we don't have any configuration --> initial configuration takes care of this itself return {}; @@ -950,8 +942,7 @@ void CMakeBuildSettingsWidget::updateSelection() void CMakeBuildSettingsWidget::updateConfigurationStateSelection() { const bool hasReplyFile - = FileApiParser::scanForCMakeReplyFile( - m_buildSystem->buildConfiguration()->buildDirectory()).exists(); + = FileApiParser::scanForCMakeReplyFile(m_buildConfig->buildDirectory()).exists(); const int switchToIndex = hasReplyFile ? 1 : 0; if (m_configurationStates->currentIndex() != switchToIndex) @@ -1029,7 +1020,7 @@ bool CMakeBuildSettingsWidget::eventFilter(QObject *target, QEvent *event) connect(help, &QAction::triggered, this, [=] { 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"; CMakeTool::openCMakeHelpUrl(tool, linkUrl); }); @@ -1082,8 +1073,7 @@ bool CMakeBuildSettingsWidget::eventFilter(QObject *target, QEvent *event) const QStringList variableList = Utils::transform(validIndexes, [this](const QModelIndex &index) { return ConfigModel::dataItemFromIndex(index).toCMakeConfigItem().toArgument( - isInitialConfiguration() ? nullptr - : m_buildSystem->buildConfiguration()->macroExpander()); + isInitialConfiguration() ? nullptr : m_buildConfig->macroExpander()); }); setClipboardAndSelection(variableList.join('\n')); @@ -1660,11 +1650,6 @@ QStringList CMakeBuildSystem::configurationChangesArguments(bool initialParamete return Utils::transform(filteredInitials, &CMakeConfigItem::toArgument); } -QStringList CMakeBuildSystem::initialCMakeArguments() const -{ - return cmakeBuildConfiguration()->initialCMakeArguments.allValues(); -} - CMakeConfig CMakeBuildSystem::initialCMakeConfiguration() const { return cmakeBuildConfiguration()->initialCMakeArguments.cmakeConfiguration(); @@ -1729,19 +1714,18 @@ void CMakeBuildSystem::setAdditionalCMakeArguments(const QStringList &args) .setValue(ProcessArgs::joinArgs(nonEmptyAdditionalArguments)); } -void CMakeBuildSystem::filterConfigArgumentsFromAdditionalCMakeArguments() +void CMakeBuildConfiguration::filterConfigArgumentsFromAdditionalCMakeArguments() { // On iOS the %{Ios:DevelopmentTeam:Flag} evalues to something like // -DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM:STRING=MAGICSTRING // which is already part of the CMake variables and should not be also // in the addtional CMake options - const QStringList arguments = ProcessArgs::splitArgs( - cmakeBuildConfiguration()->additionalCMakeOptions(), - HostOsInfo::hostOs()); + const QStringList arguments = ProcessArgs::splitArgs(additionalCMakeOptions(), + HostOsInfo::hostOs()); QStringList 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) @@ -1781,7 +1765,7 @@ QString CMakeBuildSystem::warning() const NamedWidget *CMakeBuildConfiguration::createConfigWidget() { - return new CMakeBuildSettingsWidget(m_buildSystem); + return new CMakeBuildSettingsWidget(this); } CMakeConfig CMakeBuildConfiguration::signingFlags() const @@ -1789,7 +1773,7 @@ CMakeConfig CMakeBuildConfiguration::signingFlags() const return {}; } -void CMakeBuildConfiguration::setInitialBuildAndCleanSteps(const ProjectExplorer::Target *target) +void CMakeBuildConfiguration::setInitialBuildAndCleanSteps(const Target *target) { const CMakeConfigItem presetItem = CMakeConfigurationKitAspect::cmakePresetConfigItem( target->kit()); @@ -2036,6 +2020,11 @@ BuildSystem *CMakeBuildConfiguration::buildSystem() const return m_buildSystem; } +CMakeBuildSystem *CMakeBuildConfiguration::cmakeBuildSystem() const +{ + return m_buildSystem; +} + void CMakeBuildConfiguration::addToEnvironment(Utils::Environment &env) const { const CMakeTool *tool = CMakeKitAspect::cmakeTool(kit()); diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index 182738c639a..e383408ec45 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -71,6 +71,7 @@ public: void addToEnvironment(Utils::Environment &env) const override; Utils::Environment configureEnvironment() const; + Internal::CMakeBuildSystem *cmakeBuildSystem() const; ProjectExplorer::BuildDirectoryAspect buildDir{this}; Internal::InitialCMakeArgumentsAspect initialCMakeArguments{this}; @@ -97,6 +98,7 @@ private: void setInitialBuildAndCleanSteps(const ProjectExplorer::Target *target); void setBuildPresetToBuildSteps(const ProjectExplorer::Target *target); + void filterConfigArgumentsFromAdditionalCMakeArguments(); Internal::CMakeBuildSystem *m_buildSystem = nullptr; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index 7041aaa3ef1..f6f56c76d75 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -1572,7 +1572,8 @@ void CMakeBuildSystem::updateQmlJSCodeModel(const QStringList &extraHeaderPaths, void CMakeBuildSystem::updateInitialCMakeExpandableVars() { const CMakeConfig &cm = configurationFromCMake(); - const CMakeConfig &initialConfig = initialCMakeConfiguration(); + const CMakeConfig &initialConfig = + cmakeBuildConfiguration()->initialCMakeArguments.cmakeConfiguration(); CMakeConfig config; @@ -1733,7 +1734,8 @@ void CMakeBuildSystem::runGenerator(Id id) QList configItems = Utils::filtered(m_configurationChanges.toList(), itemFilter); const QList initialConfigItems - = Utils::filtered(initialCMakeConfiguration().toList(), itemFilter); + = Utils::filtered(cmakeBuildConfiguration()->initialCMakeArguments.cmakeConfiguration().toList(), + itemFilter); for (const CMakeConfigItem &item : std::as_const(initialConfigItems)) { if (!Utils::contains(configItems, [&item](const CMakeConfigItem &existingItem) { return existingItem.key == item.key; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h index 4770b4d84bc..12629227762 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h @@ -109,14 +109,9 @@ public: QStringList configurationChangesArguments(bool initialParameters = false) const; - QStringList initialCMakeArguments() const; - CMakeConfig initialCMakeConfiguration() const; - QStringList additionalCMakeArguments() const; void setAdditionalCMakeArguments(const QStringList &args); - void filterConfigArgumentsFromAdditionalCMakeArguments(); - void setConfigurationFromCMake(const CMakeConfig &config); void setConfigurationChanges(const CMakeConfig &config); @@ -132,6 +127,8 @@ signals: void warningOccurred(const QString &message); private: + CMakeConfig initialCMakeConfiguration() const; + QList> generators() const override; void runGenerator(Utils::Id id) override; ProjectExplorer::ExtraCompiler *findExtraCompiler(