diff options
author | Denis Shienkov <denis.shienkov@gmail.com> | 2017-01-31 12:57:34 +0300 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2017-02-08 11:13:29 +0000 |
commit | f9555c3103b5da16b84a315b97826e3f2e2d1a38 (patch) | |
tree | 9df1f874e03fb8c8808c61f506bce890a7e812cb | |
parent | 152e5149e342befb47ba5ad47764be512dd17998 (diff) |
Replicate '--settings-dir' option to Visual Studio generator
Task-number: QBS-1077
Change-Id: Ib20d8d8242f8b51ba353968e39cedb8945a86331
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
8 files changed, 52 insertions, 17 deletions
diff --git a/src/app/qbs/commandlinefrontend.cpp b/src/app/qbs/commandlinefrontend.cpp index 0b712df1e..835b29536 100644 --- a/src/app/qbs/commandlinefrontend.cpp +++ b/src/app/qbs/commandlinefrontend.cpp @@ -508,7 +508,8 @@ void CommandLineFrontend::generate() generator->generate(m_projects, m_parser.buildConfigurations(), - m_parser.installOptions(QString())); + m_parser.installOptions(QString()), + m_parser.settingsDir()); } int CommandLineFrontend::runTarget() diff --git a/src/lib/corelib/generators/generator.cpp b/src/lib/corelib/generators/generator.cpp index 4f422ed0e..22abf5b6f 100644 --- a/src/lib/corelib/generators/generator.cpp +++ b/src/lib/corelib/generators/generator.cpp @@ -51,6 +51,7 @@ public: QList<Project> projects; QList<QVariantMap> buildConfigurations; InstallOptions installOptions; + QString qbsSettingsDir; }; ProjectGenerator::ProjectGenerator() @@ -77,7 +78,8 @@ static QString _configurationName(const QVariantMap &buildConfiguration) void ProjectGenerator::generate(const QList<Project> &projects, const QList<QVariantMap> &buildConfigurations, - const InstallOptions &installOptions) + const InstallOptions &installOptions, + const QString &qbsSettingsDir) { d->projects = projects; std::sort(d->projects.begin(), d->projects.end(), @@ -88,6 +90,7 @@ void ProjectGenerator::generate(const QList<Project> &projects, [](const QVariantMap &a, const QVariantMap &b) { return _configurationName(a) < _configurationName(b); }); d->installOptions = installOptions; + d->qbsSettingsDir = qbsSettingsDir; generate(); } @@ -225,4 +228,9 @@ QFileInfo ProjectGenerator::qbsExecutableFilePath() const return file; } +QString ProjectGenerator::qbsSettingsDir() const +{ + return d->qbsSettingsDir; +} + } // namespace qbs diff --git a/src/lib/corelib/generators/generator.h b/src/lib/corelib/generators/generator.h index 366627800..8cd77b37b 100644 --- a/src/lib/corelib/generators/generator.h +++ b/src/lib/corelib/generators/generator.h @@ -70,10 +70,12 @@ public: void generate(const QList<Project> &projects, const QList<QVariantMap> &buildConfigurations, - const InstallOptions &installOptions); + const InstallOptions &installOptions, + const QString &qbsSettingsDir); const GeneratableProject project() const; QFileInfo qbsExecutableFilePath() const; + QString qbsSettingsDir() const; private: QList<Project> projects() const; diff --git a/src/lib/corelib/generators/visualstudio/msbuildsharedsolutionpropertiesproject.cpp b/src/lib/corelib/generators/visualstudio/msbuildsharedsolutionpropertiesproject.cpp index 6c47007b2..0ec4b8366 100644 --- a/src/lib/corelib/generators/visualstudio/msbuildsharedsolutionpropertiesproject.cpp +++ b/src/lib/corelib/generators/visualstudio/msbuildsharedsolutionpropertiesproject.cpp @@ -39,9 +39,10 @@ namespace qbs { -QString qbsCommandLine(const GeneratableProject &project, - const QString &subCommand, - const Internal::VisualStudioVersionInfo &versionInfo) +static QString qbsCommandLine(const GeneratableProject &project, + const QString &subCommand, + const QString &qbsSettingsDir, + const Internal::VisualStudioVersionInfo &versionInfo) { auto addEnvironmentVariableArgument = [&](Internal::CommandLine &cl, const QString &var) { cl.appendRawArgument(QStringLiteral("\"$(%1)\"").arg(var)); @@ -51,11 +52,19 @@ QString qbsCommandLine(const GeneratableProject &project, if (subCommand == QStringLiteral("rebuild")) realSubCommand = QStringLiteral("build"); - // "path/to/qbs.exe" {build|clean} -f "path/to/project.qbs" -d "/build/directory/" + // "path/to/qbs.exe" {build|clean} + // --settings-dir "path/to/settings/directory/" + // -f "path/to/project.qbs" -d "/build/directory/" // -p product_name [[configuration key:value]...] Internal::CommandLine commandLine; commandLine.setProgram(QStringLiteral("\"$(QbsExecutablePath)\""), true); commandLine.appendArgument(realSubCommand); + + if (!qbsSettingsDir.isEmpty()) { + commandLine.appendArgument(QStringLiteral("--settings-dir")); + addEnvironmentVariableArgument(commandLine, QStringLiteral("QbsSettingsDir")); + } + commandLine.appendArgument(QStringLiteral("-f")); addEnvironmentVariableArgument(commandLine, QStringLiteral("QbsProjectFile")); commandLine.appendArgument(QStringLiteral("-d")); @@ -91,7 +100,8 @@ QString qbsCommandLine(const GeneratableProject &project, MSBuildSharedSolutionPropertiesProject::MSBuildSharedSolutionPropertiesProject( const Internal::VisualStudioVersionInfo &versionInfo, const GeneratableProject &project, - const QFileInfo &qbsExecutable) + const QFileInfo &qbsExecutable, + const QString &qbsSettingsDir) { setDefaultTargets(QStringLiteral("Build")); setToolsVersion(versionInfo.toolsVersion()); @@ -123,13 +133,17 @@ MSBuildSharedSolutionPropertiesProject::MSBuildSharedSolutionPropertiesProject( QStringLiteral("$(SolutionDir).")); group->appendProperty(QStringLiteral("QbsBuildCommandLine"), - qbsCommandLine(project, QStringLiteral("build"), versionInfo)); + qbsCommandLine(project, QStringLiteral("build"), + qbsSettingsDir, versionInfo)); group->appendProperty(QStringLiteral("QbsReBuildCommandLine"), - qbsCommandLine(project, QStringLiteral("rebuild"), versionInfo)); + qbsCommandLine(project, QStringLiteral("rebuild"), + qbsSettingsDir, versionInfo)); group->appendProperty(QStringLiteral("QbsCleanCommandLine"), - qbsCommandLine(project, QStringLiteral("clean"), versionInfo)); + qbsCommandLine(project, QStringLiteral("clean"), + qbsSettingsDir, versionInfo)); group->appendProperty(QStringLiteral("QbsGenerateCommandLine"), - qbsCommandLine(project, QStringLiteral("generate"), versionInfo)); + qbsCommandLine(project, QStringLiteral("generate"), + qbsSettingsDir, versionInfo)); } } // namespace qbs diff --git a/src/lib/corelib/generators/visualstudio/msbuildsharedsolutionpropertiesproject.h b/src/lib/corelib/generators/visualstudio/msbuildsharedsolutionpropertiesproject.h index 5b8b62750..f3848ce24 100644 --- a/src/lib/corelib/generators/visualstudio/msbuildsharedsolutionpropertiesproject.h +++ b/src/lib/corelib/generators/visualstudio/msbuildsharedsolutionpropertiesproject.h @@ -45,7 +45,7 @@ class MSBuildSharedSolutionPropertiesProject : public MSBuildProject public: MSBuildSharedSolutionPropertiesProject(const Internal::VisualStudioVersionInfo &versionInfo, const GeneratableProject &project, - const QFileInfo &qbsExecutable); + const QFileInfo &qbsExecutable, const QString &qbsSettingsDir); }; } // namespace qbs diff --git a/src/lib/corelib/generators/visualstudio/msbuildsolutionpropertiesproject.cpp b/src/lib/corelib/generators/visualstudio/msbuildsolutionpropertiesproject.cpp index 5cc1eb633..ed4fd6335 100644 --- a/src/lib/corelib/generators/visualstudio/msbuildsolutionpropertiesproject.cpp +++ b/src/lib/corelib/generators/visualstudio/msbuildsolutionpropertiesproject.cpp @@ -41,7 +41,8 @@ namespace qbs { MSBuildSolutionPropertiesProject::MSBuildSolutionPropertiesProject( const Internal::VisualStudioVersionInfo &versionInfo, const GeneratableProject &project, - const QFileInfo &qbsExecutable) + const QFileInfo &qbsExecutable, + const QString &qbsSettingsDir) { setDefaultTargets(QStringLiteral("Build")); setToolsVersion(versionInfo.toolsVersion()); @@ -57,6 +58,12 @@ MSBuildSolutionPropertiesProject::MSBuildSolutionPropertiesProject( group->appendProperty(QStringLiteral("QbsProjectDir"), Internal::PathUtils::toNativeSeparators(project.filePath().path(), win) + Internal::HostOsInfo::pathSeparator(win)); + + if (!qbsSettingsDir.isEmpty()) { + group->appendProperty(QStringLiteral("QbsSettingsDir"), + Internal::PathUtils::toNativeSeparators(qbsSettingsDir, win) + + Internal::HostOsInfo::pathSeparator(win) + QLatin1Char('.')); + } } } // namespace qbs diff --git a/src/lib/corelib/generators/visualstudio/msbuildsolutionpropertiesproject.h b/src/lib/corelib/generators/visualstudio/msbuildsolutionpropertiesproject.h index 6e70ed464..7da069343 100644 --- a/src/lib/corelib/generators/visualstudio/msbuildsolutionpropertiesproject.h +++ b/src/lib/corelib/generators/visualstudio/msbuildsolutionpropertiesproject.h @@ -47,7 +47,8 @@ class MSBuildSolutionPropertiesProject : public MSBuildProject public: MSBuildSolutionPropertiesProject(const Internal::VisualStudioVersionInfo &versionInfo, const GeneratableProject &project, - const QFileInfo &qbsExecutable); + const QFileInfo &qbsExecutable, + const QString &qbsSettingsDir); }; } // namespace qbs diff --git a/src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp b/src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp index dd2f66e05..8366f2d17 100644 --- a/src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp +++ b/src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp @@ -172,7 +172,8 @@ void VisualStudioGenerator::addPropertySheets(const GeneratableProject &project) d->propertySheetNames.append({ fileName, true }); d->msbuildProjects.insert(project.baseBuildDirectory().absoluteFilePath(fileName), QSharedPointer<MSBuildSolutionPropertiesProject>::create( - d->versionInfo, project, qbsExecutableFilePath())); + d->versionInfo, project, + qbsExecutableFilePath(), qbsSettingsDir())); } { @@ -180,7 +181,8 @@ void VisualStudioGenerator::addPropertySheets(const GeneratableProject &project) d->propertySheetNames.append({ fileName, false }); d->msbuildProjects.insert(project.baseBuildDirectory().absoluteFilePath(fileName), QSharedPointer<MSBuildSharedSolutionPropertiesProject>::create( - d->versionInfo, project, qbsExecutableFilePath())); + d->versionInfo, project, + qbsExecutableFilePath(), qbsSettingsDir())); } } |