forked from qt-creator/qt-creator
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:
@@ -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)
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
|
Reference in New Issue
Block a user