CMakePM: Apply Kit CMake configuration to Initial Configuration

When the user changes or adds new CMake Kit parameters, the changes
are reflected in the Initial Configuration.

Change-Id: Icca1c76749c772e946ff250f94b7965cf7cf9ee8
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Cristian Adam
2022-02-01 16:37:52 +01:00
parent 201f91b867
commit 924862093e
3 changed files with 49 additions and 8 deletions

View File

@@ -765,12 +765,27 @@ void CMakeBuildSettingsWidget::updateFromKit()
const Kit *k = m_buildConfiguration->kit(); const Kit *k = m_buildConfiguration->kit();
const CMakeConfig config = CMakeConfigurationKitAspect::configuration(k); const CMakeConfig config = CMakeConfigurationKitAspect::configuration(k);
// First the key value parameters
ConfigModel::KitConfiguration configHash; ConfigModel::KitConfiguration configHash;
for (const CMakeConfigItem &i : config) for (const CMakeConfigItem &i : config)
configHash.insert(QString::fromUtf8(i.key), configHash.insert(QString::fromUtf8(i.key), i);
qMakePair(QString::fromUtf8(i.value), i.expandedValue(k)));
m_configModel->setConfigurationFromKit(configHash); m_configModel->setConfigurationFromKit(configHash);
// Then the additional parameters
const QStringList additionalKitCMake = ProcessArgs::splitArgs(
CMakeConfigurationKitAspect::additionalConfiguration(k));
const QStringList additionalInitialCMake = ProcessArgs::splitArgs(
m_buildConfiguration->aspect<InitialCMakeArgumentsAspect>()->value());
QStringList mergedArgumentList;
std::set_union(additionalInitialCMake.begin(),
additionalInitialCMake.end(),
additionalKitCMake.begin(),
additionalKitCMake.end(),
std::back_inserter(mergedArgumentList));
m_buildConfiguration->aspect<InitialCMakeArgumentsAspect>()->setValue(
ProcessArgs::joinArgs(mergedArgumentList));
} }
void CMakeBuildSettingsWidget::updateConfigurationStateIndex(int index) void CMakeBuildSettingsWidget::updateConfigurationStateIndex(int index)

View File

@@ -96,9 +96,9 @@ void ConfigModel::appendConfiguration(const QString &key,
internalItem.isUserNew = true; internalItem.isUserNew = true;
if (m_kitConfiguration.contains(key)) if (m_kitConfiguration.contains(key))
internalItem.kitValue = isInitial ? m_kitConfiguration.value(key).first internalItem.kitValue = QString::fromUtf8(
: m_kitConfiguration.value(key).second; isInitial ? m_kitConfiguration.value(key).value
: m_macroExpander->expand(m_kitConfiguration.value(key).value));
m_configuration.append(internalItem); m_configuration.append(internalItem);
setConfiguration(m_configuration); setConfiguration(m_configuration);
} }
@@ -111,12 +111,38 @@ void ConfigModel::setConfiguration(const QList<DataItem> &config)
void ConfigModel::setConfigurationFromKit(const KitConfiguration &kitConfig) void ConfigModel::setConfigurationFromKit(const KitConfiguration &kitConfig)
{ {
m_kitConfiguration = kitConfig; m_kitConfiguration = kitConfig;
QHash<QString, InternalDataItem> initialConfig;
// Update the kit values for initial configuration keys
for (InternalDataItem &i : m_configuration) { for (InternalDataItem &i : m_configuration) {
if (!i.isInitial)
continue;
if (m_kitConfiguration.contains(i.key)) if (m_kitConfiguration.contains(i.key))
i.kitValue = i.isInitial ? m_kitConfiguration.value(i.key).first i.kitValue = QString::fromUtf8(m_kitConfiguration.value(i.key).value);
: m_kitConfiguration.value(i.key).second; initialConfig.insert(i.key, i);
} }
// Add new initial configuration kit keys
for (const auto &ki : kitConfig) {
if (!initialConfig.contains(QString::fromUtf8(ki.key))) {
InternalDataItem i((DataItem(ki)));
i.isUserNew = true;
i.isInitial = true;
i.newValue = i.value;
i.kitValue = i.value;
m_configuration.append(i);
}
}
// Remove kit values when the kit's keys are removed
for (const auto &i : initialConfig) {
if (!kitConfig.contains(i.key)) {
auto existing = std::find(m_configuration.begin(), m_configuration.end(), i);
if (existing != m_configuration.end())
existing->kitValue.clear();
}
}
setConfiguration(m_configuration); setConfiguration(m_configuration);
} }

View File

@@ -146,7 +146,7 @@ public:
void setInitialParametersConfiguration(const CMakeConfig &config); void setInitialParametersConfiguration(const CMakeConfig &config);
void setConfiguration(const QList<DataItem> &config); void setConfiguration(const QList<DataItem> &config);
using KitConfiguration = QHash<QString, QPair<QString,QString>>; using KitConfiguration = QHash<QString, CMakeConfigItem>;
void setConfigurationFromKit(const KitConfiguration &kitConfig); void setConfigurationFromKit(const KitConfiguration &kitConfig);
void flush(); void flush();