aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-05-26 10:44:18 +0200
committerJoerg Bornemann <joerg.bornemann@digia.com>2014-05-26 18:15:11 +0200
commit0f0d90485e591eb74e3f5b773e849aadba480088 (patch)
treefcf29ff8207a1b2951c3a58091dde67016a8f097 /src/lib
parent875f9ba4e7631a3c66e1edfc54f6b4ed6a42b841 (diff)
Add the settings directory to the project setup parameters.
This way, the settings become available for use in the qbs library, which means it can, for instance, expand the build configuration itself instead of putting this burden onto the API callers. Change-Id: I09e6067990ac2b7c2238951f9759fe52dc51b6f9 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/corelib/api/internaljobs.cpp3
-rw-r--r--src/lib/corelib/language/tst_language.cpp8
-rw-r--r--src/lib/corelib/tools/settings.cpp3
-rw-r--r--src/lib/corelib/tools/settings.h2
-rw-r--r--src/lib/corelib/tools/setupprojectparameters.cpp40
-rw-r--r--src/lib/corelib/tools/setupprojectparameters.h9
-rw-r--r--src/lib/corelib/tools/tst_tools.cpp2
7 files changed, 47 insertions, 20 deletions
diff --git a/src/lib/corelib/api/internaljobs.cpp b/src/lib/corelib/api/internaljobs.cpp
index 2899bbc6c..cf56f1b8a 100644
--- a/src/lib/corelib/api/internaljobs.cpp
+++ b/src/lib/corelib/api/internaljobs.cpp
@@ -229,6 +229,9 @@ TopLevelProjectPtr InternalSetupProjectJob::project() const
void InternalSetupProjectJob::start()
{
try {
+ const ErrorInfo err = m_parameters.expandBuildConfiguration();
+ if (err.hasError())
+ throw err;
execute();
} catch (const ErrorInfo &error) {
m_project.clear();
diff --git a/src/lib/corelib/language/tst_language.cpp b/src/lib/corelib/language/tst_language.cpp
index 56876bb32..422d77a2f 100644
--- a/src/lib/corelib/language/tst_language.cpp
+++ b/src/lib/corelib/language/tst_language.cpp
@@ -143,8 +143,7 @@ void TestLanguage::initTestCase()
<< QLatin1String(SRCDIR "/../../../share/qbs"));
defaultParameters.setTopLevelProfile("qbs_autotests");
defaultParameters.setBuildVariant("debug");
- Settings settings((QString()));
- defaultParameters.expandBuildConfiguration(&settings);
+ defaultParameters.expandBuildConfiguration();
QVERIFY(QFileInfo(m_wildcardsTestDirPath).isAbsolute());
}
@@ -821,8 +820,7 @@ void TestLanguage::jsImportUsedInMultipleScopes()
SetupProjectParameters params = defaultParameters;
params.setProjectFilePath(testProject("jsimportsinmultiplescopes.qbs"));
params.setBuildVariant(buildVariant);
- Settings settings((QString()));
- params.expandBuildConfiguration(&settings);
+ params.expandBuildConfiguration();
TopLevelProjectPtr project = loader->loadProject(params);
QVERIFY(project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
@@ -1042,7 +1040,7 @@ void TestLanguage::profileValuesAndOverriddenValues()
overriddenValues.insert("dummy.cFlags", "OVERRIDDEN");
parameters.setOverriddenValues(overriddenValues);
parameters.setProjectFilePath(testProject("profilevaluesandoverriddenvalues.qbs"));
- parameters.expandBuildConfiguration(&settings);
+ parameters.expandBuildConfiguration();
project = loader->loadProject(parameters);
QVERIFY(project);
QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
diff --git a/src/lib/corelib/tools/settings.cpp b/src/lib/corelib/tools/settings.cpp
index 617fa2137..8fc86d465 100644
--- a/src/lib/corelib/tools/settings.cpp
+++ b/src/lib/corelib/tools/settings.cpp
@@ -53,7 +53,8 @@ static QSettings *createQSettings(const QString &baseDir)
: new QSettings(baseDir + QLatin1String("/qbs.conf"), format());
}
-Settings::Settings(const QString &baseDir) : m_settings(createQSettings(baseDir))
+Settings::Settings(const QString &baseDir)
+ : m_settings(createQSettings(baseDir)), m_baseDir(baseDir)
{
// Actual qbs settings are stored transparently within a group, because QSettings
// can see non-qbs fallback settings e.g. from QtProject that we're not interested in.
diff --git a/src/lib/corelib/tools/settings.h b/src/lib/corelib/tools/settings.h
index 9741c2bf0..622ed5b5f 100644
--- a/src/lib/corelib/tools/settings.h
+++ b/src/lib/corelib/tools/settings.h
@@ -59,6 +59,7 @@ public:
QStringList profiles() const;
QString fileName() const;
+ QString baseDirectoy() const { return m_baseDir; }
private:
QString internalRepresentation(const QString &externalKey) const;
@@ -67,6 +68,7 @@ private:
void checkStatus();
QSettings * const m_settings;
+ const QString m_baseDir;
};
} // namespace qbs
diff --git a/src/lib/corelib/tools/setupprojectparameters.cpp b/src/lib/corelib/tools/setupprojectparameters.cpp
index 71c62504c..8a31c92e9 100644
--- a/src/lib/corelib/tools/setupprojectparameters.cpp
+++ b/src/lib/corelib/tools/setupprojectparameters.cpp
@@ -60,6 +60,7 @@ public:
QString buildRoot;
QStringList searchPaths;
QStringList pluginPaths;
+ QString settingsBaseDir;
QVariantMap overriddenValues;
QVariantMap buildConfiguration;
mutable QVariantMap buildConfigurationTree;
@@ -204,6 +205,24 @@ void SetupProjectParameters::setPluginPaths(const QStringList &pluginPaths)
}
/*!
+ * \brief The base directory for qbs settings.
+ * This value is used to locate profiles and preferences.
+ */
+QString SetupProjectParameters::settingsDirectory() const
+{
+ return d->settingsBaseDir;
+}
+
+/*!
+ * \brief Sets the base directory for qbs settings.
+ * \param settingsBaseDir Will be used to locate profiles and preferences.
+ */
+void SetupProjectParameters::setSettingsDirectory(const QString &settingsBaseDir)
+{
+ d->settingsBaseDir = settingsBaseDir;
+}
+
+/*!
* Returns the overridden values of the build configuration.
*/
QVariantMap SetupProjectParameters::overriddenValues() const
@@ -269,15 +288,16 @@ QVariantMap SetupProjectParameters::buildConfigurationTree() const
}
-static QVariantMap expandedBuildConfigurationInternal(Settings *settings,
+static QVariantMap expandedBuildConfigurationInternal(const QString &settingsBaseDir,
const QString &profileName, const QString &buildVariant)
{
+ Settings settings(settingsBaseDir);
QVariantMap buildConfig;
// (1) Values from profile, if given.
if (!profileName.isEmpty()) {
ErrorInfo err;
- const Profile profile(profileName, settings);
+ const Profile profile(profileName, &settings);
const QStringList profileKeys = profile.allKeys(Profile::KeySelectionRecursive, &err);
if (err.hasError())
throw err;
@@ -302,11 +322,11 @@ static QVariantMap expandedBuildConfigurationInternal(Settings *settings,
return buildConfig;
}
-QVariantMap SetupProjectParameters::expandedBuildConfiguration(Settings *settings,
+QVariantMap SetupProjectParameters::expandedBuildConfiguration(const QString &settingsBaseDir,
const QString &profileName, const QString &buildVariant, ErrorInfo *errorInfo)
{
try {
- return expandedBuildConfigurationInternal(settings, profileName, buildVariant);
+ return expandedBuildConfigurationInternal(settingsBaseDir, profileName, buildVariant);
} catch (const ErrorInfo &err) {
if (errorInfo)
*errorInfo = err;
@@ -316,20 +336,20 @@ QVariantMap SetupProjectParameters::expandedBuildConfiguration(Settings *setting
/*!
- * \brief Expands the build configuration based on the given settings.
+ * \brief Expands the build configuration.
*
- * Expansion is the process by which the build configuration is completed based on the given
- * settings. E.g. the information configured in a profile is filled into the build
+ * Expansion is the process by which the build configuration is completed based on the settings
+ * in \c settingsDirectory(). E.g. the information configured in a profile is filled into the build
* configuration by this step.
*
* This method returns an Error. The list of entries in this error will be empty is the
* expansion was successful.
*/
-ErrorInfo SetupProjectParameters::expandBuildConfiguration(Settings *settings)
+ErrorInfo SetupProjectParameters::expandBuildConfiguration()
{
ErrorInfo err;
- QVariantMap expandedConfig
- = expandedBuildConfiguration(settings, topLevelProfile(), buildVariant(), &err);
+ QVariantMap expandedConfig = expandedBuildConfiguration(d->settingsBaseDir, topLevelProfile(),
+ buildVariant(), &err);
if (err.hasError())
return err;
if (d->buildConfiguration != expandedConfig) {
diff --git a/src/lib/corelib/tools/setupprojectparameters.h b/src/lib/corelib/tools/setupprojectparameters.h
index 01da55664..ced16ab72 100644
--- a/src/lib/corelib/tools/setupprojectparameters.h
+++ b/src/lib/corelib/tools/setupprojectparameters.h
@@ -72,13 +72,16 @@ public:
QStringList pluginPaths() const;
void setPluginPaths(const QStringList &pluginPaths);
+ QString settingsDirectory() const;
+ void setSettingsDirectory(const QString &settingsBaseDir);
+
QVariantMap overriddenValues() const;
void setOverriddenValues(const QVariantMap &values);
QVariantMap overriddenValuesTree() const;
- static QVariantMap expandedBuildConfiguration(Settings *settings, const QString &profileName,
- const QString &buildVariant, ErrorInfo *errorInfo = 0);
- ErrorInfo expandBuildConfiguration(Settings *settings);
+ static QVariantMap expandedBuildConfiguration(const QString &settingsBaseDir,
+ const QString &profileName, const QString &buildVariant, ErrorInfo *errorInfo = 0);
+ ErrorInfo expandBuildConfiguration();
QVariantMap buildConfiguration() const;
QVariantMap buildConfigurationTree() const;
diff --git a/src/lib/corelib/tools/tst_tools.cpp b/src/lib/corelib/tools/tst_tools.cpp
index e29997c82..c8b1f6cce 100644
--- a/src/lib/corelib/tools/tst_tools.cpp
+++ b/src/lib/corelib/tools/tst_tools.cpp
@@ -140,7 +140,7 @@ void TestTools::testBuildConfigMerging()
params.setTopLevelProfile(profile.name());
params.setBuildVariant(QLatin1String("debug"));
params.setOverriddenValues(overrideMap);
- const ErrorInfo error = params.expandBuildConfiguration(&settings);
+ const ErrorInfo error = params.expandBuildConfiguration();
QVERIFY2(!error.hasError(), qPrintable(error.toString()));
const QVariantMap finalMap = params.finalBuildConfigurationTree();
QCOMPARE(finalMap.count(), 3);