diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2014-01-09 13:17:46 +0100 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-01-09 18:42:40 +0100 |
commit | 2fe25eb3f20ffb4e58cb559f2bcb9950c963290a (patch) | |
tree | 1dfc68a6c5c880d5df24e1951c212c92d1bb3ce5 /src/app/qbs | |
parent | 33a5f6e481fc8a12c37d6fdf6c2550b02705e0d1 (diff) |
Introduce per-profile preferences.
Individual profiles can now override global preferences. The look-up up
of a preference key for a given profile happens in this order: Profile
preferencess -> Base profile preferences (recursively) -> Global
preferences. Search stops when the key has been found.
Change-Id: Ia343acc67d326cb11dc8663651a7dbe8e46a7c74
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/app/qbs')
-rw-r--r-- | src/app/qbs/commandlinefrontend.cpp | 50 | ||||
-rw-r--r-- | src/app/qbs/commandlinefrontend.h | 2 | ||||
-rw-r--r-- | src/app/qbs/parser/commandlineparser.cpp | 20 |
3 files changed, 48 insertions, 24 deletions
diff --git a/src/app/qbs/commandlinefrontend.cpp b/src/app/qbs/commandlinefrontend.cpp index 6e04223f4..7189a202b 100644 --- a/src/app/qbs/commandlinefrontend.cpp +++ b/src/app/qbs/commandlinefrontend.cpp @@ -31,6 +31,7 @@ #include "application.h" #include "consoleprogressobserver.h" #include "status.h" +#include "parser/commandlineoption.h" #include "../shared/logging/consolelogger.h" #include <qbs.h> @@ -121,9 +122,6 @@ void CommandLineFrontend::start() + QLatin1String("/../")); SetupProjectParameters params; params.setProjectFilePath(m_parser.projectFilePath()); - params.setBuildRoot(m_parser.projectBuildDirectory()); - params.setSearchPaths(Preferences(m_settings).searchPaths(qbsRootPath)); - params.setPluginPaths(Preferences(m_settings).pluginPaths(qbsRootPath)); params.setIgnoreDifferentProjectFilePath(m_parser.force()); params.setDryRun(m_parser.dryRun()); params.setLogElapsedTime(m_parser.logTime()); @@ -134,11 +132,19 @@ void CommandLineFrontend::start() QVariantMap userConfig = buildConfig; QString buildVariantKey = QLatin1String("qbs.buildVariant"); baseConfig.insert(buildVariantKey, userConfig.take(buildVariantKey)); + QString profileName; const QVariantMap::Iterator it = userConfig.find(QLatin1String("qbs.profile")); if (it != userConfig.end()) { + profileName = it.value().toString(); baseConfig.insert(it.key(), it.value()); userConfig.erase(it); } + if (profileName.isEmpty()) + profileName = m_settings->defaultProfile(); + const Preferences prefs(m_settings, profileName); + params.setSearchPaths(prefs.searchPaths(qbsRootPath)); + params.setPluginPaths(prefs.pluginPaths(qbsRootPath)); + params.setBuildRoot(buildDirectory(profileName)); params.setBuildConfiguration(baseConfig); params.setOverriddenValues(userConfig); const ErrorInfo err = params.expandBuildConfiguration(m_settings); @@ -389,15 +395,49 @@ int CommandLineFrontend::runShell() return runEnvironment.runShell(); } +BuildOptions CommandLineFrontend::buildOptions(const Project &project) const +{ + BuildOptions options = m_parser.buildOptions(); + if (options.maxJobCount() <= 0) { + const QVariantMap qbsProperties + = project.projectConfiguration().value(QLatin1String("qbs")).toMap(); + const QString profileName = qbsProperties.value(QLatin1String("profile")).toString(); + QBS_CHECK(!profileName.isEmpty()); + options.setMaxJobCount(Preferences(m_settings, profileName).jobs()); + } + return options; +} + +QString CommandLineFrontend::buildDirectory(const QString &profileName) const +{ + QString buildDir = m_parser.projectBuildDirectory(); + if (buildDir.isEmpty()) { + buildDir = Preferences(m_settings, profileName).defaultBuildDirectory(); + if (buildDir.isEmpty()) { + qbsDebug() << "No project build directory given; using current directory."; + buildDir = QDir::currentPath(); + } else { + qbsDebug() << "No project build directory given; using directory from preferences."; + } + } + + QDir projectDir(QFileInfo(m_parser.projectFilePath()).path()); + buildDir.replace(BuildDirectoryOption::magicProjectString(), projectDir.dirName()); + if (!QFileInfo(buildDir).isAbsolute()) + buildDir = QDir::currentPath() + QLatin1Char('/') + buildDir; + buildDir = QDir::cleanPath(buildDir); + return buildDir; +} + void CommandLineFrontend::build() { if (m_parser.products().isEmpty()) { foreach (const Project &project, m_projects) - m_buildJobs << project.buildAllProducts(m_parser.buildOptions(), this); + m_buildJobs << project.buildAllProducts(buildOptions(project), this); } else { const ProductMap &products = productsToUse(); for (ProductMap::ConstIterator it = products.begin(); it != products.end(); ++it) - m_buildJobs << it.key().buildSomeProducts(it.value(), m_parser.buildOptions(), this); + m_buildJobs << it.key().buildSomeProducts(it.value(), buildOptions(it.key()), this); } connectBuildJobs(); diff --git a/src/app/qbs/commandlinefrontend.h b/src/app/qbs/commandlinefrontend.h index ba95792fd..75091aad7 100644 --- a/src/app/qbs/commandlinefrontend.h +++ b/src/app/qbs/commandlinefrontend.h @@ -86,6 +86,8 @@ private: void connectJob(AbstractJob *job); void checkForExactlyOneProduct(); void install(); + BuildOptions buildOptions(const Project &project) const; + QString buildDirectory(const QString &profileName) const; const CommandLineParser &m_parser; Settings * const m_settings; diff --git a/src/app/qbs/parser/commandlineparser.cpp b/src/app/qbs/parser/commandlineparser.cpp index 235e4a4da..69f56e7dd 100644 --- a/src/app/qbs/parser/commandlineparser.cpp +++ b/src/app/qbs/parser/commandlineparser.cpp @@ -474,23 +474,6 @@ void CommandLineParser::CommandLineParserPrivate::setupProjectFile() void CommandLineParser::CommandLineParserPrivate::setupBuildDirectory() { projectBuildDirectory = optionPool.buildDirectoryOption()->projectBuildDirectory(); - if (projectBuildDirectory.isEmpty()) { - projectBuildDirectory = Preferences(settings).defaultBuildDirectory(); - if (projectBuildDirectory.isEmpty()) { - qbsDebug() << "No project build directory given; using current directory."; - projectBuildDirectory = QDir::currentPath(); - } else { - qbsDebug() << "No project build directory given; using directory from preferences."; - } - } - - QDir dir(QFileInfo(projectFilePath).path()); - projectBuildDirectory.replace(optionPool.buildDirectoryOption()->magicProjectString(), - dir.dirName()); - - if (!QFileInfo(projectBuildDirectory).isAbsolute()) - projectBuildDirectory = QDir::currentPath() + QLatin1Char('/') + projectBuildDirectory; - projectBuildDirectory = QDir::cleanPath(projectBuildDirectory); } void CommandLineParser::CommandLineParserPrivate::setupBuildOptions() @@ -506,8 +489,7 @@ void CommandLineParser::CommandLineParserPrivate::setupBuildOptions() buildOptions.setKeepGoing(optionPool.keepGoingOption()->enabled()); buildOptions.setForceTimestampCheck(optionPool.forceTimestampCheckOption()->enabled()); const JobsOption * jobsOption = optionPool.jobsOption(); - buildOptions.setMaxJobCount(jobsOption->jobCount() > 0 - ? jobsOption->jobCount() : Preferences(settings).jobs()); + buildOptions.setMaxJobCount(jobsOption->jobCount()); buildOptions.setLogElapsedTime(logTime); } |