diff options
author | Andrew Knight <andrew.knight@digia.com> | 2014-02-11 13:49:18 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-11 14:52:16 +0100 |
commit | b4fe9ce225869917c4e822f936596563d7593480 (patch) | |
tree | 016ea7839f84c8371fc78ecd2f77504c8e7bf454 /qmake | |
parent | 49df5fc3d22669e8c534fc9985e9f4e09f8b2f62 (diff) |
qmake: Provide feature for windeployqt
windeployqt is a tool that aids in the deployment of Qt libraries and
other files on Windows. This feature (CONFIG+=windeployqt) adds
automatic invocation of windeployqt for qmake projects as a post-link
action. For Visual Studio projects, windeployqt is added as a custom
target which runs after linking, automatically adding the output as
deployment items.
Task-number: QTBUG-35630
Change-Id: I4cdcb1a7f70cedccb4a4e17be5eb9f5de35a4d66
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'qmake')
-rw-r--r-- | qmake/generators/win32/msbuild_objectmodel.cpp | 40 | ||||
-rw-r--r-- | qmake/generators/win32/msbuild_objectmodel.h | 1 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_objectmodel.cpp | 6 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_objectmodel.h | 20 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_vcproj.cpp | 17 | ||||
-rw-r--r-- | qmake/generators/win32/msvc_vcproj.h | 1 |
6 files changed, 85 insertions, 0 deletions
diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp index 75d3c4fa9c..2eac5c1a55 100644 --- a/qmake/generators/win32/msbuild_objectmodel.cpp +++ b/qmake/generators/win32/msbuild_objectmodel.cpp @@ -774,6 +774,10 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProject &tool) write(xml, config.preLink); xml << closetag(); + + // windeployqt + if (!config.windeployqt.ExcludedFromBuild) + write(xml, config.windeployqt); } // The file filters are added in a separate file for MSBUILD. @@ -1720,6 +1724,42 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCDeploymentTool &tool) // SmartDevice deployment not supported in VS 2010 } +void VCXProjectWriter::write(XmlOutput &xml, const VCWinDeployQtTool &tool) +{ + const QString name = QStringLiteral("WinDeployQt_") + tool.config->Name; + xml << tag("Target") + << attrTag(_Name, name) + << attrTag("Condition", generateCondition(*tool.config)) + << attrTag("Inputs", "$(OutDir)\\$(TargetName).exe") + << attrTag("Outputs", tool.Record) + << tag(_Message) + << attrTag("Text", tool.CommandLine) + << closetag() + << tag("Exec") + << attrTag("Command", tool.CommandLine) + << closetag() + << closetag() + << tag("Target") + << attrTag(_Name, QStringLiteral("PopulateWinDeployQtItems_") + tool.config->Name) + << attrTag("Condition", generateCondition(*tool.config)) + << attrTag("AfterTargets", "Link") + << attrTag("DependsOnTargets", name) + << tag("ReadLinesFromFile") + << attrTag("File", tool.Record) + << tag("Output") + << attrTag("TaskParameter", "Lines") + << attrTag("ItemName", "DeploymentItems") + << closetag() + << closetag() + << tag(_ItemGroup) + << tag("None") + << attrTag("Include", "@(DeploymentItems)") + << attrTagT("DeploymentContent", _True) + << closetag() + << closetag() + << closetag(); +} + void VCXProjectWriter::write(XmlOutput &xml, const VCConfiguration &tool) { xml << tag("PropertyGroup") diff --git a/qmake/generators/win32/msbuild_objectmodel.h b/qmake/generators/win32/msbuild_objectmodel.h index 7fb83233f4..2f02e66eb9 100644 --- a/qmake/generators/win32/msbuild_objectmodel.h +++ b/qmake/generators/win32/msbuild_objectmodel.h @@ -174,6 +174,7 @@ public: void write(XmlOutput &, const VCResourceCompilerTool &); void write(XmlOutput &, const VCEventTool &); void write(XmlOutput &, const VCDeploymentTool &); + void write(XmlOutput &, const VCWinDeployQtTool &); void write(XmlOutput &, const VCConfiguration &); void write(XmlOutput &, VCFilter &); diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp index 3217500916..1a92b79a09 100644 --- a/qmake/generators/win32/msvc_objectmodel.cpp +++ b/qmake/generators/win32/msvc_objectmodel.cpp @@ -2794,6 +2794,12 @@ void VCProjectWriter::write(XmlOutput &xml, const VCDeploymentTool &tool) << closetag(tool.DeploymentTag); } +void VCProjectWriter::write(XmlOutput &xml, const VCWinDeployQtTool &tool) +{ + Q_UNUSED(xml); + Q_UNUSED(tool); +} + void VCProjectWriter::write(XmlOutput &xml, const VCConfiguration &tool) { xml << tag(_Configuration) diff --git a/qmake/generators/win32/msvc_objectmodel.h b/qmake/generators/win32/msvc_objectmodel.h index 7c51f6a67a..0aa5736d2a 100644 --- a/qmake/generators/win32/msvc_objectmodel.h +++ b/qmake/generators/win32/msvc_objectmodel.h @@ -860,6 +860,24 @@ public: ~VCPreLinkEventTool(){} }; +class VCWinDeployQtTool : public VCToolBase +{ +public: + VCWinDeployQtTool() {} + ~VCWinDeployQtTool() {} + +protected: + bool parseOption(const char *) { return false; } + +public: + // Variables + QString Record; + QString CommandLine; + bool ExcludedFromBuild; + + VCConfiguration * config; +}; + class VCConfiguration { public: @@ -900,6 +918,7 @@ public: VCDeploymentTool deployment; VCPreLinkEventTool preLink; VCResourceCompilerTool resource; + VCWinDeployQtTool windeployqt; }; struct VCFilterFile @@ -1156,6 +1175,7 @@ public: virtual void write(XmlOutput &, const VCResourceCompilerTool &); virtual void write(XmlOutput &, const VCEventTool &); virtual void write(XmlOutput &, const VCDeploymentTool &); + virtual void write(XmlOutput &, const VCWinDeployQtTool &); virtual void write(XmlOutput &, const VCConfiguration &); virtual void write(XmlOutput &, VCFilter &); diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index 829be89097..ce9dc6d9ec 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -1021,6 +1021,7 @@ void VcprojGenerator::initConfiguration() if ((!project->isHostBuild() && !project->isEmpty("CE_SDK") && !project->isEmpty("CE_ARCH")) || conf.WinRT) initDeploymentTool(); + initWinDeployQtTool(); initPreLinkEventTools(); if (!isDebug) @@ -1323,6 +1324,22 @@ void VcprojGenerator::initDeploymentTool() } } +void VcprojGenerator::initWinDeployQtTool() +{ + VCConfiguration &conf = vcProject.Configuration; + conf.windeployqt.ExcludedFromBuild = true; + if (project->isActiveConfig("windeployqt")) { + conf.windeployqt.Record = QStringLiteral("$(TargetName).windeployqt.$(Platform).$(Configuration)"); + conf.windeployqt.CommandLine = + MakefileGenerator::shellQuote(QDir::toNativeSeparators(project->first("QMAKE_WINDEPLOYQT").toQString())) + + QLatin1Char(' ') + project->values("WINDEPLOYQT_OPTIONS").join(QLatin1Char(' ')) + + QStringLiteral(" -list relative -dir \"$(MSBuildProjectDirectory)\" \"$(OutDir)\\$(TargetName).exe\" > ") + + MakefileGenerator::shellQuote(conf.windeployqt.Record); + conf.windeployqt.config = &vcProject.Configuration; + conf.windeployqt.ExcludedFromBuild = false; + } +} + void VcprojGenerator::initPreLinkEventTools() { VCConfiguration &conf = vcProject.Configuration; diff --git a/qmake/generators/win32/msvc_vcproj.h b/qmake/generators/win32/msvc_vcproj.h index d531085307..4a25d11766 100644 --- a/qmake/generators/win32/msvc_vcproj.h +++ b/qmake/generators/win32/msvc_vcproj.h @@ -109,6 +109,7 @@ protected: void initPreBuildEventTools(); void initPostBuildEventTools(); void initDeploymentTool(); + void initWinDeployQtTool(); void initPreLinkEventTools(); void initRootFiles(); void initSourceFiles(); |