summaryrefslogtreecommitdiffstats
path: root/qmake
diff options
context:
space:
mode:
authorAndrew Knight <andrew.knight@digia.com>2014-02-11 13:49:18 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-11 14:52:16 +0100
commitb4fe9ce225869917c4e822f936596563d7593480 (patch)
tree016ea7839f84c8371fc78ecd2f77504c8e7bf454 /qmake
parent49df5fc3d22669e8c534fc9985e9f4e09f8b2f62 (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.cpp40
-rw-r--r--qmake/generators/win32/msbuild_objectmodel.h1
-rw-r--r--qmake/generators/win32/msvc_objectmodel.cpp6
-rw-r--r--qmake/generators/win32/msvc_objectmodel.h20
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp17
-rw-r--r--qmake/generators/win32/msvc_vcproj.h1
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();