aboutsummaryrefslogtreecommitdiffstats
path: root/src/app/qbs
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-01-09 13:17:46 +0100
committerJoerg Bornemann <joerg.bornemann@digia.com>2014-01-09 18:42:40 +0100
commit2fe25eb3f20ffb4e58cb559f2bcb9950c963290a (patch)
tree1dfc68a6c5c880d5df24e1951c212c92d1bb3ce5 /src/app/qbs
parent33a5f6e481fc8a12c37d6fdf6c2550b02705e0d1 (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.cpp50
-rw-r--r--src/app/qbs/commandlinefrontend.h2
-rw-r--r--src/app/qbs/parser/commandlineparser.cpp20
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);
}