| <?xml version="1.0" encoding="utf-8"?>  | 
| <!--  | 
| /****************************************************************************  | 
| **  | 
| ** Copyright (C) 2020 The Qt Company Ltd.  | 
| ** Contact: https://www.qt.io/licensing/  | 
| **  | 
| ** This file is part of the Qt VS Tools.  | 
| **  | 
| ** $QT_BEGIN_LICENSE:GPL-EXCEPT$  | 
| ** Commercial License Usage  | 
| ** Licensees holding valid commercial Qt licenses may use this file in  | 
| ** accordance with the commercial license agreement provided with the  | 
| ** Software or, alternatively, in accordance with the terms contained in  | 
| ** a written agreement between you and The Qt Company. For licensing terms  | 
| ** and conditions see https://www.qt.io/terms-conditions. For further  | 
| ** information use the contact form at https://www.qt.io/contact-us.  | 
| **  | 
| ** GNU General Public License Usage  | 
| ** Alternatively, this file may be used under the terms of the GNU  | 
| ** General Public License version 3 as published by the Free Software  | 
| ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT  | 
| ** included in the packaging of this file. Please review the following  | 
| ** information to ensure the GNU General Public License requirements will  | 
| ** be met: https://www.gnu.org/licenses/gpl-3.0.html.  | 
| **  | 
| ** $QT_END_LICENSE$  | 
| **  | 
| ****************************************************************************/  | 
| -->  | 
|   | 
| <!--  | 
| ///////////////////////////////////////////////////////////////////////////////////////////////////  | 
| // Deployment of Qt dependencies  | 
| // -->  | 
| <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  | 
|   | 
|   <!--  | 
|   /////////////////////////////////////////////////////////////////////////////////////////////////  | 
|   // Setup property page  | 
|   // -->  | 
|   <ItemGroup>  | 
|     <PropertyPageSchema  | 
|       Include="$(MSBuildThisFileDirectory)qtdeploy.xml" />  | 
|   </ItemGroup>  | 
|   | 
|   <!--  | 
|   /////////////////////////////////////////////////////////////////////////////////////////////////  | 
|   // Default deploy log location  | 
|   // -->  | 
|   <PropertyGroup>  | 
|     <QtDeployLog Condition="'$(QtDeployLog)' == ''">$(IntDir)windeployqt.log</QtDeployLog>  | 
|   </PropertyGroup>  | 
|   | 
|   <!--  | 
|   /////////////////////////////////////////////////////////////////////////////////////////////////  | 
|   // Schedule QtDeploy target to run after Link  | 
|   // -->  | 
|   <PropertyGroup Condition="'$(QtDeploy)' == 'true' AND '$(ApplicationType)' != 'Linux'">  | 
|     <BuildLinkTargets>$(BuildLinkTargets);QtDeploy</BuildLinkTargets>  | 
|   </PropertyGroup>  | 
|   | 
|   <!--  | 
|   /////////////////////////////////////////////////////////////////////////////////////////////////  | 
|   // Deploy Qt files  | 
|   // -->  | 
|   <Target Name="QtDeploy"  | 
|     AfterTargets="Link"  | 
|     Inputs="$(TargetPath)" Outputs="$(QtDeployLog)"  | 
|     Condition="'$(QtDeploy)' == 'true' AND '$(ApplicationType)' != 'Linux'">  | 
|   | 
|     <ItemGroup>  | 
|       <QtDeploy Include="$(TargetPath)"/>  | 
|     </ItemGroup>  | 
|   | 
|     <!--  | 
|     ///////////////////////////////////////////////////////////////////////////////////////////////  | 
|     // Convert string lists in source item properties to lists of items  | 
|     // -->  | 
|     <Flatten Items="@(QtDeploy)"  | 
|       Metadata="QtDeployFiles;  | 
|                 QtDeployDir;  | 
|                 QtDeployLibDir;  | 
|                 QtDeployPluginDir;  | 
|                 QtDeployDebugRelease;  | 
|                 QtDeployPdb;  | 
|                 QtDeployForce;  | 
|                 QtDeployNoPatchQt;  | 
|                 QtDeployNoPlugins;  | 
|                 QtDeployNoLibraries;  | 
|                 QtDeployQmlDir;  | 
|                 QtDeployQmlImport;  | 
|                 QtDeployNoQuickImport;  | 
|                 QtDeployNoTranslations;  | 
|                 QtDeployNoSystemD3dCompiler;  | 
|                 QtDeployNoVirtualKeyboard;  | 
|                 QtDeployCompilerRuntime;  | 
|                 QtDeployWebkit2;  | 
|                 QtDeployAngle;  | 
|                 QtDeployNoOpenglSw;  | 
|                 QtDeployIncludeModules;  | 
|                 QtDeployExcludeModules;  | 
|                 QtDeployVerbose">  | 
|       <Output  | 
|         TaskParameter="Result" ItemName="Options" />  | 
|     </Flatten>  | 
|   | 
|     <ItemGroup>  | 
|       <!--  | 
|       /////////////////////////////////////////////////////////////////////////////////////////////  | 
|       // Remove quotes from all paths  | 
|       // -->  | 
|       <Options>  | 
|         <Value Condition="( '%(Name)' == 'QtDeployFiles'  | 
|                          OR '%(Name)' == 'QtDeployDir'  | 
|                          OR '%(Name)' == 'QtDeployLibDir'  | 
|                          OR '%(Name)' == 'QtDeployPluginDir'  | 
|                          OR '%(Name)' == 'QtDeployQmlDir'  | 
|                          OR '%(Name)' == 'QtDeployQmlImport' )"  | 
|           >$([System.String]::Copy('%(Value)').Replace('"', ''))</Value>  | 
|       </Options>  | 
|       <!--  | 
|         ///////////////////////////////////////////////////////////////////////////////////////////  | 
|         // Escape trailing back-slash in paths  | 
|         // -->  | 
|       <Options>  | 
|         <Value Condition="( '%(Name)' == 'QtDeployFiles'  | 
|                          OR '%(Name)' == 'QtDeployDir'  | 
|                          OR '%(Name)' == 'QtDeployLibDir'  | 
|                          OR '%(Name)' == 'QtDeployPluginDir'  | 
|                          OR '%(Name)' == 'QtDeployQmlDir'  | 
|                          OR '%(Name)' == 'QtDeployQmlImport' )  | 
|                         AND $([System.String]::Copy('%(Value)').Contains(' '))  | 
|                         AND $([System.String]::Copy('%(Value)').EndsWith('\'))"  | 
|           >%(Value)\</Value>  | 
|       </Options>  | 
|       <!--  | 
|         ///////////////////////////////////////////////////////////////////////////////////////////  | 
|         // Add quotes to paths containing spaces  | 
|         // -->  | 
|       <Options>  | 
|         <Value Condition="( '%(Name)' == 'QtDeployFiles'  | 
|                          OR '%(Name)' == 'QtDeployDir'  | 
|                          OR '%(Name)' == 'QtDeployLibDir'  | 
|                          OR '%(Name)' == 'QtDeployPluginDir'  | 
|                          OR '%(Name)' == 'QtDeployQmlDir'  | 
|                          OR '%(Name)' == 'QtDeployQmlImport' )  | 
|                         AND $([System.String]::Copy('%(Value)').Contains(' '))"  | 
|           >"%(Value)"</Value>  | 
|       </Options>  | 
|       <!--  | 
|       /////////////////////////////////////////////////////////////////////////////////////////////  | 
|       // Generate tool command line arguments  | 
|       // -->  | 
|       <Options>  | 
|         <!-- [files]                  Binaries or directory containing the binary. -->  | 
|         <PosArg Condition="'%(Name)' == 'QtDeployFiles'">%(Value)</PosArg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -dir <directory>         Use directory instead of binary directory. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployDir'">--dir %(Value)</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -libdir <path>           Copy libraries to path. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployLibDir'">--libdir %(Value)</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -plugindir <path>        Copy plugins to path. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployPluginDir'">--plugindir %(Value)</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -debug                   Assume debug binaries.  | 
|              -release                 Assume release binaries.-->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployDebugRelease' AND '%(Value)' == 'debug'"  | 
|                >--debug</Arg>  | 
|         <Arg Condition="'%(Name)' == 'QtDeployDebugRelease' AND '%(Value)' == 'release'"  | 
|                >--release</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -pdb                     Deploy .pdb files (MSVC). -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployPdb' AND '%(Value)' == 'true'"  | 
|                >--pdb</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -force                   Force updating files. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployForce' AND '%(Value)' == 'true'"  | 
|                >--force</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -no-patchqt              Do not patch the Qt5Core library. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployNoPatchQt' AND '%(Value)' == 'true'"  | 
|                >--no-patchqt</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -no-plugins              Skip plugin deployment. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployNoPlugins' AND '%(Value)' == 'true'"  | 
|                >--no-plugins</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -no-libraries            Skip library deployment. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployNoLibraries' AND '%(Value)' == 'true'"  | 
|                >--no-libraries</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -qmldir <directory>      Scan for QML-imports starting from directory. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployQmlDir'">--qmldir %(Value)</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -qmlimport <directory>   Add the given path to the QML module search  | 
|                                       locations. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployQmlImport'">--qmlimport %(Value)</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -no-quick-import         Skip deployment of Qt Quick imports. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployNoQuickImport' AND '%(Value)' == 'true'"  | 
|                >--no-quick-import</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -no-translations         Skip deployment of translations. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployNoTranslations' AND '%(Value)' == 'true'"  | 
|                >--no-translations</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -no-system-d3d-compiler  Skip deployment of the system D3D compiler. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployNoSystemD3dCompiler' AND '%(Value)' == 'true'"  | 
|                >--no-system-d3d-compiler</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -no-virtualkeyboard      Disable deployment of the Virtual Keyboard. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployNoVirtualKeyboard' AND '%(Value)' == 'true'"  | 
|                >--no-virtualkeyboard</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -compiler-runtime        Deploy compiler runtime (Desktop only).  | 
|              -no-compiler-runtime     Do not deploy compiler runtime (Desktop only). -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployCompilerRuntime' AND '%(Value)' == 'deploy'"  | 
|                >--compiler-runtime</Arg>  | 
|         <Arg Condition="'%(Name)' == 'QtDeployCompilerRuntime' AND '%(Value)' == 'skip'"  | 
|                >--no-compiler-runtime</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -webkit2                 Deployment of WebKit2 (web process).  | 
|              -no-webkit2              Skip deployment of WebKit2. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployWebkit2' AND '%(Value)' == 'deploy'"  | 
|                >--webkit2</Arg>  | 
|         <Arg Condition="'%(Name)' == 'QtDeployWebkit2' AND '%(Value)' == 'skip'"  | 
|                >--no-webkit2</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -angle                   Force deployment of ANGLE.  | 
|              -no-angle                Disable deployment of ANGLE. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployAngle' AND '%(Value)' == 'deploy'"  | 
|                >--angle</Arg>  | 
|         <Arg Condition="'%(Name)' == 'QtDeployAngle' AND '%(Value)' == 'skip'"  | 
|                >--no-angle</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- -no-opengl-sw            Do not deploy the software rasterizer library. -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployNoOpenglSw' AND '%(Value)' == 'true'"  | 
|                >--no-opengl-sw</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- Qt libraries can be added by passing their name (-xml) ... -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployIncludeModules'">-%(Value)</Arg>  | 
|       </Options>  | 
|       <Options>  | 
|         <!-- ... or removed by passing the name prepended by -no- (-no-xml). -->  | 
|         <Arg Condition="'%(Name)' == 'QtDeployExcludeModules'">--no-%(Value)</Arg>  | 
|       </Options>  | 
|     </ItemGroup>  | 
|   | 
|     <!--  | 
|     ///////////////////////////////////////////////////////////////////////////////////////////////  | 
|     // Run windeployqt  | 
|     // -->  | 
|     <PropertyGroup>  | 
|       <Cmd><![CDATA["$(QtToolsPath)\windeployqt.exe"]]></Cmd>  | 
|       <Cmd>$(Cmd) --list target</Cmd>  | 
|       <Cmd Condition="'%(Options.Arg)' != ''">$(Cmd) %(Options.Arg)</Cmd>  | 
|       <Cmd Condition="'%(Options.PosArg)' != ''">$(Cmd) %(Options.PosArg)</Cmd>  | 
|     </PropertyGroup>  | 
|     <Message Importance="high" Text="windeployqt: $(Cmd)" />  | 
|     <Exec Command="$(Cmd) > "$(QtDeployLog)"" />  | 
|   | 
|     <!--  | 
|     ///////////////////////////////////////////////////////////////////////////////////////////////  | 
|     // Read deploy log into QtDeployed list  | 
|     // -->  | 
|     <ReadLinesFromFile File="$(QtDeployLog)">  | 
|       <Output TaskParameter="Lines" ItemName="QtDeployed" />  | 
|     </ReadLinesFromFile>  | 
|     <ItemGroup>  | 
|       <QtDeployed Remove="@(QtDeployed)" Condition="!Exists('%(Fullpath)')"/>  | 
|     </ItemGroup>  | 
|   | 
|     <!--  | 
|     ///////////////////////////////////////////////////////////////////////////////////////////////  | 
|     // Mark deployed files as source content for VS deployment project  | 
|     // -->  | 
|     <ItemGroup>  | 
|       <None Include="@(QtDeployed)" Condition="'%(QtDeploy.QtDeployVsContent)' == 'true'">  | 
|         <DeploymentContent>true</DeploymentContent>  | 
|         <RootFolder>$(ProjectDir)</RootFolder>  | 
|       </None>  | 
|     </ItemGroup>  | 
|   | 
|     <!--  | 
|     ///////////////////////////////////////////////////////////////////////////////////////////////  | 
|     // Log output files; used by VS on clean and up-to-date check  | 
|     // -->  | 
|     <ItemGroup>  | 
|       <QtDeployLog Include="$(QtDeployLog)"/>  | 
|       <QtDeployed Include="$(QtDeployLog)"/>  | 
|     </ItemGroup>  | 
|     <WriteLinesToFile  | 
|       File="$(TLogLocation)windeployqt.read.1u.tlog"  | 
|       Lines="^$(ProjectPath)"  | 
|       Overwrite="true" Encoding="Unicode"/>  | 
|     <WriteLinesToFile  | 
|       File="$(TLogLocation)windeployqt.write.1u.tlog"  | 
|       Lines="^$(ProjectPath);@(QtDeployLog->'%(Fullpath)')"  | 
|       Overwrite="true" Encoding="Unicode"/>  | 
|     <WriteLinesToFile  | 
|       File="$(TLogLocation)$(ProjectName).write.1u.tlog"  | 
|       Lines="^$(ProjectFileName);@(QtDeployed->'%(Fullpath)')"  | 
|       Overwrite="false" Encoding="Unicode"/>  | 
|   | 
|     <!--  | 
|     ///////////////////////////////////////////////////////////////////////////////////////////////  | 
|     // Clean-up  | 
|     // -->  | 
|     <PropertyGroup>  | 
|       <Cmd/>  | 
|     </PropertyGroup>  | 
|     <ItemGroup>  | 
|       <Options Remove="@(Options)"/>  | 
|       <QtDeploy Remove="@(QtDeploy)"/>  | 
|       <QtDeployLog Remove="@(QtDeployLog)"/>  | 
|       <QtDeployed Remove="@(QtDeployed)"/>  | 
|     </ItemGroup>  | 
|   </Target>  | 
| </Project>  |