diff options
-rw-r--r-- | src/app/qbs/commandlinefrontend.cpp | 5 | ||||
-rw-r--r-- | src/lib/corelib/api/internaljobs.cpp | 3 | ||||
-rw-r--r-- | src/lib/corelib/language/tst_language.cpp | 8 | ||||
-rw-r--r-- | src/lib/corelib/tools/settings.cpp | 3 | ||||
-rw-r--r-- | src/lib/corelib/tools/settings.h | 2 | ||||
-rw-r--r-- | src/lib/corelib/tools/setupprojectparameters.cpp | 40 | ||||
-rw-r--r-- | src/lib/corelib/tools/setupprojectparameters.h | 9 | ||||
-rw-r--r-- | src/lib/corelib/tools/tst_tools.cpp | 2 | ||||
-rw-r--r-- | tests/auto/api/tst_api.cpp | 1 |
9 files changed, 48 insertions, 25 deletions
diff --git a/src/app/qbs/commandlinefrontend.cpp b/src/app/qbs/commandlinefrontend.cpp index 4bbde7961..e24ad8677 100644 --- a/src/app/qbs/commandlinefrontend.cpp +++ b/src/app/qbs/commandlinefrontend.cpp @@ -125,6 +125,7 @@ void CommandLineFrontend::start() params.setIgnoreDifferentProjectFilePath(m_parser.force()); params.setDryRun(m_parser.dryRun()); params.setLogElapsedTime(m_parser.logTime()); + params.setSettingsDirectory(m_settings->baseDirectoy()); if (!m_parser.buildBeforeInstalling()) params.setRestoreBehavior(SetupProjectParameters::RestoreOnly); foreach (const QVariantMap &buildConfig, m_parser.buildConfigurations()) { @@ -145,10 +146,6 @@ void CommandLineFrontend::start() params.setBuildVariant(buildVariant); params.setBuildRoot(buildDirectory(profileName)); params.setOverriddenValues(userConfig); - const ErrorInfo err = params.expandBuildConfiguration(m_settings); - if (err.hasError()) - throw err; - SetupProjectJob * const job = Project::setupProject(params, ConsoleLogger::instance().logSink(), this); connectJob(job); 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); diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp index b68097299..1490a9faf 100644 --- a/tests/auto/api/tst_api.cpp +++ b/tests/auto/api/tst_api.cpp @@ -604,7 +604,6 @@ qbs::SetupProjectParameters TestApi::defaultSetupParameters() const setupParams.setPluginPaths(prefs.pluginPaths(qbsRootPath + QLatin1String("/lib"))); setupParams.setTopLevelProfile(profileName); setupParams.setBuildVariant(QLatin1String("debug")); - setupParams.expandBuildConfiguration(settings.data()); return setupParams; } |