QbsPM: Store unexpanded values in build configuration

Expanded values are stored permanently, so the next time the project is
opened the variable usage is gone.

Change-Id: I9787b343e9856e12e296271674b3b8827041e477
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Orgad Shaneh
2016-10-23 06:01:41 +03:00
committed by Orgad Shaneh
parent 69555ec851
commit 9ac8572b29
3 changed files with 53 additions and 24 deletions

View File

@@ -123,7 +123,7 @@ QVariantMap QbsBuildConfiguration::qbsConfiguration() const
QVariantMap config; QVariantMap config;
QbsBuildStep *qbsBs = qbsStep(); QbsBuildStep *qbsBs = qbsStep();
if (qbsBs) if (qbsBs)
config = qbsBs->qbsConfiguration(); config = qbsBs->qbsConfiguration(QbsBuildStep::ExpandVariables);
return config; return config;
} }

View File

@@ -92,7 +92,26 @@ private:
Ui::QbsBuildStepConfigWidget *m_ui; Ui::QbsBuildStepConfigWidget *m_ui;
QList<QPair<QString, QString> > m_propertyCache; class Property
{
public:
Property() = default;
Property(const QString &n, const QString &v, const QString &e) :
name(n), value(v), effectiveValue(e)
{}
bool operator==(const Property &other) const
{
return name == other.name
&& value == other.value
&& effectiveValue == other.effectiveValue;
}
QString name;
QString value;
QString effectiveValue;
};
QList<Property> m_propertyCache;
QbsBuildStep *m_step; QbsBuildStep *m_step;
QString m_summary; QString m_summary;
bool m_ignoreChange; bool m_ignoreChange;
@@ -114,7 +133,7 @@ QbsBuildStep::QbsBuildStep(ProjectExplorer::BuildStepList *bsl, const QbsBuildSt
ProjectExplorer::BuildStep(bsl, Core::Id(Constants::QBS_BUILDSTEP_ID)), ProjectExplorer::BuildStep(bsl, Core::Id(Constants::QBS_BUILDSTEP_ID)),
m_qbsBuildOptions(other->m_qbsBuildOptions), m_job(0), m_parser(0), m_parsingProject(false) m_qbsBuildOptions(other->m_qbsBuildOptions), m_job(0), m_parser(0), m_parsingProject(false)
{ {
setQbsConfiguration(other->qbsConfiguration()); setQbsConfiguration(other->qbsConfiguration(PreserveVariables));
} }
QbsBuildStep::~QbsBuildStep() QbsBuildStep::~QbsBuildStep()
@@ -186,10 +205,15 @@ void QbsBuildStep::cancel()
m_job->cancel(); m_job->cancel();
} }
QVariantMap QbsBuildStep::qbsConfiguration() const QVariantMap QbsBuildStep::qbsConfiguration(VariableHandling variableHandling) const
{ {
QVariantMap config = m_qbsConfiguration; QVariantMap config = m_qbsConfiguration;
config.insert(QLatin1String(Constants::QBS_FORCE_PROBES_KEY), m_forceProbes); config.insert(QLatin1String(Constants::QBS_FORCE_PROBES_KEY), m_forceProbes);
if (variableHandling == ExpandVariables) {
const Utils::MacroExpander *expander = Utils::globalMacroExpander();
for (auto it = config.begin(), end = config.end(); it != end; ++it)
it.value() = expander->expand(it.value().toString());
}
return config; return config;
} }
@@ -368,12 +392,12 @@ void QbsBuildStep::createTaskAndOutput(ProjectExplorer::Task::TaskType type, con
QString QbsBuildStep::buildVariant() const QString QbsBuildStep::buildVariant() const
{ {
return qbsConfiguration().value(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY)).toString(); return qbsConfiguration(PreserveVariables).value(Constants::QBS_CONFIG_VARIANT_KEY).toString();
} }
bool QbsBuildStep::isQmlDebuggingEnabled() const bool QbsBuildStep::isQmlDebuggingEnabled() const
{ {
QVariantMap data = qbsConfiguration(); QVariantMap data = qbsConfiguration(PreserveVariables);
return data.value(QLatin1String(Constants::QBS_CONFIG_DECLARATIVE_DEBUG_KEY), false).toBool() return data.value(QLatin1String(Constants::QBS_CONFIG_DECLARATIVE_DEBUG_KEY), false).toBool()
|| data.value(QLatin1String(Constants::QBS_CONFIG_QUICK_DEBUG_KEY), false).toBool(); || data.value(QLatin1String(Constants::QBS_CONFIG_QUICK_DEBUG_KEY), false).toBool();
} }
@@ -391,7 +415,7 @@ void QbsBuildStep::setBuildVariant(const QString &variant)
QString QbsBuildStep::profile() const QString QbsBuildStep::profile() const
{ {
return qbsConfiguration().value(QLatin1String(Constants::QBS_CONFIG_PROFILE_KEY)).toString(); return qbsConfiguration(PreserveVariables).value(Constants::QBS_CONFIG_PROFILE_KEY).toString();
} }
void QbsBuildStep::setKeepGoing(bool kg) void QbsBuildStep::setKeepGoing(bool kg)
@@ -566,7 +590,7 @@ void QbsBuildStepConfigWidget::updateState()
m_ui->installCheckBox->setChecked(m_step->install()); m_ui->installCheckBox->setChecked(m_step->install());
m_ui->cleanInstallRootCheckBox->setChecked(m_step->cleanInstallRoot()); m_ui->cleanInstallRootCheckBox->setChecked(m_step->cleanInstallRoot());
m_ui->forceProbesCheckBox->setChecked(m_step->forceProbes()); m_ui->forceProbesCheckBox->setChecked(m_step->forceProbes());
updatePropertyEdit(m_step->qbsConfiguration()); updatePropertyEdit(m_step->qbsConfiguration(QbsBuildStep::PreserveVariables));
m_ui->qmlDebuggingLibraryCheckBox->setChecked(m_step->isQmlDebuggingEnabled()); m_ui->qmlDebuggingLibraryCheckBox->setChecked(m_step->isQmlDebuggingEnabled());
} }
@@ -578,8 +602,8 @@ void QbsBuildStepConfigWidget::updateState()
QString command = QbsBuildConfiguration::equivalentCommandLine(m_step); QString command = QbsBuildConfiguration::equivalentCommandLine(m_step);
for (int i = 0; i < m_propertyCache.count(); ++i) { for (int i = 0; i < m_propertyCache.count(); ++i) {
command += QLatin1Char(' ') + m_propertyCache.at(i).first command += QLatin1Char(' ') + m_propertyCache.at(i).name
+ QLatin1Char(':') + m_propertyCache.at(i).second; + QLatin1Char(':') + m_propertyCache.at(i).effectiveValue;
} }
if (m_step->isQmlDebuggingEnabled()) if (m_step->isQmlDebuggingEnabled())
@@ -683,7 +707,7 @@ void QbsBuildStepConfigWidget::changeForceProbes(bool forceProbes)
void QbsBuildStepConfigWidget::applyCachedProperties() void QbsBuildStepConfigWidget::applyCachedProperties()
{ {
QVariantMap data; QVariantMap data;
QVariantMap tmp = m_step->qbsConfiguration(); const QVariantMap tmp = m_step->qbsConfiguration(QbsBuildStep::PreserveVariables);
// Insert values set up with special UIs: // Insert values set up with special UIs:
data.insert(QLatin1String(Constants::QBS_CONFIG_PROFILE_KEY), data.insert(QLatin1String(Constants::QBS_CONFIG_PROFILE_KEY),
@@ -697,8 +721,10 @@ void QbsBuildStepConfigWidget::applyCachedProperties()
data.insert(QLatin1String(Constants::QBS_CONFIG_QUICK_DEBUG_KEY), data.insert(QLatin1String(Constants::QBS_CONFIG_QUICK_DEBUG_KEY),
tmp.value(QLatin1String(Constants::QBS_CONFIG_QUICK_DEBUG_KEY))); tmp.value(QLatin1String(Constants::QBS_CONFIG_QUICK_DEBUG_KEY)));
for (int i = 0; i < m_propertyCache.count(); ++i) for (int i = 0; i < m_propertyCache.count(); ++i) {
data.insert(m_propertyCache.at(i).first, m_propertyCache.at(i).second); const Property &property = m_propertyCache.at(i);
data.insert(property.name, property.value);
}
m_ignoreChange = true; m_ignoreChange = true;
m_step->setQbsConfiguration(data); m_step->setQbsConfiguration(data);
@@ -707,7 +733,7 @@ void QbsBuildStepConfigWidget::applyCachedProperties()
void QbsBuildStepConfigWidget::linkQmlDebuggingLibraryChecked(bool checked) void QbsBuildStepConfigWidget::linkQmlDebuggingLibraryChecked(bool checked)
{ {
QVariantMap data = m_step->qbsConfiguration(); QVariantMap data = m_step->qbsConfiguration(QbsBuildStep::PreserveVariables);
if (checked) { if (checked) {
data.insert(QLatin1String(Constants::QBS_CONFIG_DECLARATIVE_DEBUG_KEY), checked); data.insert(QLatin1String(Constants::QBS_CONFIG_DECLARATIVE_DEBUG_KEY), checked);
data.insert(QLatin1String(Constants::QBS_CONFIG_QUICK_DEBUG_KEY), checked); data.insert(QLatin1String(Constants::QBS_CONFIG_QUICK_DEBUG_KEY), checked);
@@ -732,17 +758,14 @@ bool QbsBuildStepConfigWidget::validateProperties(Utils::FancyLineEdit *edit, QS
return false; return false;
} }
QList<QPair<QString, QString> > properties; QList<Property> properties;
Utils::MacroExpander *expander = Utils::globalMacroExpander(); const Utils::MacroExpander *expander = Utils::globalMacroExpander();
foreach (const QString &rawArg, argList) { foreach (const QString &rawArg, argList) {
const QString arg = expander->expand(rawArg); int pos = rawArg.indexOf(QLatin1Char(':'));
int pos = arg.indexOf(QLatin1Char(':'));
QString key;
QString value;
if (pos > 0) { if (pos > 0) {
key = arg.left(pos); const QString rawValue = rawArg.mid(pos + 1);
value = arg.mid(pos + 1); Property property(rawArg.left(pos), rawValue, expander->expand(rawValue));
properties.append(qMakePair(key, value)); properties.append(property);
} else { } else {
if (errorMessage) if (errorMessage)
*errorMessage = tr("No \":\" found in property definition."); *errorMessage = tr("No \":\" found in property definition.");

View File

@@ -45,6 +45,12 @@ class QbsBuildStep : public ProjectExplorer::BuildStep
Q_OBJECT Q_OBJECT
public: public:
enum VariableHandling
{
PreserveVariables,
ExpandVariables
};
explicit QbsBuildStep(ProjectExplorer::BuildStepList *bsl); explicit QbsBuildStep(ProjectExplorer::BuildStepList *bsl);
QbsBuildStep(ProjectExplorer::BuildStepList *bsl, const QbsBuildStep *other); QbsBuildStep(ProjectExplorer::BuildStepList *bsl, const QbsBuildStep *other);
~QbsBuildStep() override; ~QbsBuildStep() override;
@@ -58,7 +64,7 @@ public:
bool runInGuiThread() const override; bool runInGuiThread() const override;
void cancel() override; void cancel() override;
QVariantMap qbsConfiguration() const; QVariantMap qbsConfiguration(VariableHandling variableHandling) const;
void setQbsConfiguration(const QVariantMap &config); void setQbsConfiguration(const QVariantMap &config);
bool keepGoing() const; bool keepGoing() const;