diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-04-11 11:12:53 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2017-04-14 07:37:35 +0000 |
commit | 1c64ab90e3d85c3b85a2c38ebde964a14a210131 (patch) | |
tree | ab64e81a05a1f3ba4f94b1c23b86f7c130b7883f /src/app/qbs | |
parent | fb954a094b0a95b2f462b68943ff5eb7c8adcd97 (diff) |
Command line parser: Refactor build config setup
Move the code to the private class, because a follow-up
patch will need it there.
Change-Id: I4ea414245b1ced305b3304006fad1f0798d99acc
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Diffstat (limited to 'src/app/qbs')
-rw-r--r-- | src/app/qbs/parser/commandlineparser.cpp | 118 |
1 files changed, 63 insertions, 55 deletions
diff --git a/src/app/qbs/parser/commandlineparser.cpp b/src/app/qbs/parser/commandlineparser.cpp index ff42d1bab..a29124f07 100644 --- a/src/app/qbs/parser/commandlineparser.cpp +++ b/src/app/qbs/parser/commandlineparser.cpp @@ -86,6 +86,7 @@ public: void setupProgress(); void setupLogLevel(); void setupBuildOptions(); + void setupBuildConfigurations(); bool checkForExistingBuildConfiguration(const QList<QVariantMap> &buildConfigs, const QString &configurationName); bool withNonDefaultProducts() const; @@ -101,6 +102,7 @@ public: QString projectFilePath; QString projectBuildDirectory; BuildOptions buildOptions; + QList<QVariantMap> buildConfigurations; CommandLineOptionPool optionPool; CommandPool commandPool; bool showProgress; @@ -290,61 +292,7 @@ static QString getBuildConfigurationName(const QVariantMap &buildConfig) QList<QVariantMap> CommandLineParser::buildConfigurations() const { - // first: configuration name, second: properties. - // Empty configuration name used for global properties. - typedef std::pair<QString, QVariantMap> PropertyListItem; - QList<PropertyListItem> propertiesPerConfiguration; - - const QString configurationNameKey = QLatin1String("qbs.configurationName"); - QString currentConfigurationName; - QVariantMap currentProperties; - foreach (const QString &arg, d->command->additionalArguments()) { - const int sepPos = arg.indexOf(QLatin1Char(':')); - if (sepPos == -1) { // New build configuration found. - propertiesPerConfiguration << std::make_pair(currentConfigurationName, - currentProperties); - currentConfigurationName = arg; - currentProperties.clear(); - continue; - } - const QString property = d->propertyName(arg.left(sepPos)); - if (property.isEmpty()) { - qbsWarning() << Tr::tr("Ignoring empty property."); - } else if (property == configurationNameKey) { - qbsWarning() << Tr::tr("Refusing to overwrite special property '%1'.") - .arg(configurationNameKey); - } else { - const QString rawString = arg.mid(sepPos + 1); - currentProperties.insert(property, representationToSettingsValue(rawString)); - } - } - propertiesPerConfiguration << std::make_pair(currentConfigurationName, currentProperties); - - if (propertiesPerConfiguration.count() == 1) // No configuration name specified on command line. - propertiesPerConfiguration << PropertyListItem(QStringLiteral("default"), QVariantMap()); - - const QVariantMap globalProperties = propertiesPerConfiguration.takeFirst().second; - QList<QVariantMap> buildConfigs; - foreach (const PropertyListItem &item, propertiesPerConfiguration) { - QVariantMap properties = item.second; - for (QVariantMap::ConstIterator globalPropIt = globalProperties.constBegin(); - globalPropIt != globalProperties.constEnd(); ++globalPropIt) { - if (!properties.contains(globalPropIt.key())) - properties.insert(globalPropIt.key(), globalPropIt.value()); - } - - const QString configurationName = item.first; - if (d->checkForExistingBuildConfiguration(buildConfigs, configurationName)) { - qbsWarning() << Tr::tr("Ignoring redundant request to build for configuration '%1'.") - .arg(configurationName); - continue; - } - - properties.insert(configurationNameKey, configurationName); - buildConfigs << properties; - } - - return buildConfigs; + return d->buildConfigurations; } bool CommandLineParser::parseCommandLine(const QStringList &args) @@ -397,6 +345,7 @@ void CommandLineParser::CommandLineParserPrivate::doParse() setupProjectFile(); setupBuildDirectory(); + setupBuildConfigurations(); setupProgress(); setupLogLevel(); setupBuildOptions(); @@ -545,6 +494,65 @@ void CommandLineParser::CommandLineParserPrivate::setupBuildOptions() buildOptions.setRemoveExistingInstallation(optionPool.removeFirstoption()->enabled()); } +void CommandLineParser::CommandLineParserPrivate::setupBuildConfigurations() +{ + // first: configuration name, second: properties. + // Empty configuration name used for global properties. + typedef std::pair<QString, QVariantMap> PropertyListItem; + QList<PropertyListItem> propertiesPerConfiguration; + + const QString configurationNameKey = QLatin1String("qbs.configurationName"); + QString currentConfigurationName; + QVariantMap currentProperties; + foreach (const QString &arg, command->additionalArguments()) { + const int sepPos = arg.indexOf(QLatin1Char(':')); + if (sepPos == -1) { // New build configuration found. + propertiesPerConfiguration << std::make_pair(currentConfigurationName, + currentProperties); + currentConfigurationName = arg; + currentProperties.clear(); + continue; + } + const QString property = propertyName(arg.left(sepPos)); + if (property.isEmpty()) { + qbsWarning() << Tr::tr("Ignoring empty property."); + } else if (property == configurationNameKey) { + qbsWarning() << Tr::tr("Refusing to overwrite special property '%1'.") + .arg(configurationNameKey); + } else { + const QString rawString = arg.mid(sepPos + 1); + currentProperties.insert(property, representationToSettingsValue(rawString)); + } + } + propertiesPerConfiguration << std::make_pair(currentConfigurationName, currentProperties); + + if (propertiesPerConfiguration.count() == 1) // No configuration name specified on command line. + propertiesPerConfiguration << PropertyListItem(QStringLiteral("default"), QVariantMap()); + + const QVariantMap globalProperties = propertiesPerConfiguration.takeFirst().second; + QList<QVariantMap> buildConfigs; + foreach (const PropertyListItem &item, propertiesPerConfiguration) { + QVariantMap properties = item.second; + for (QVariantMap::ConstIterator globalPropIt = globalProperties.constBegin(); + globalPropIt != globalProperties.constEnd(); ++globalPropIt) { + if (!properties.contains(globalPropIt.key())) + properties.insert(globalPropIt.key(), globalPropIt.value()); + } + + const QString configurationName = item.first; + if (checkForExistingBuildConfiguration(buildConfigs, configurationName)) { + qbsWarning() << Tr::tr("Ignoring redundant request to build for configuration '%1'.") + .arg(configurationName); + continue; + } + + properties.insert(configurationNameKey, configurationName); + buildConfigs << properties; + } + + buildConfigurations = buildConfigs; +} + void CommandLineParser::CommandLineParserPrivate::setupProgress() { const ShowProgressOption * const option = optionPool.showProgressOption(); |