msbuild: auto generate and embed qt rcc files
This commit is contained in:
parent
44c90aa3fc
commit
a202d84570
|
@ -51,9 +51,14 @@
|
||||||
but not the include paths, as passing include paths drastically slows down
|
but not the include paths, as passing include paths drastically slows down
|
||||||
moc, and it doesn't appear to actually need them anyway.
|
moc, and it doesn't appear to actually need them anyway.
|
||||||
-->
|
-->
|
||||||
<Import Project="qtmoc.props" />
|
<Import Project="qt_globals.targets"/>
|
||||||
|
<Import Project="qt_tasks.targets"/>
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
|
<!--From qtmoc.props-->
|
||||||
<QtMoc>
|
<QtMoc>
|
||||||
|
<ExecutionDescription>moc %(Identity)</ExecutionDescription>
|
||||||
|
<QTDIR>$(QtHostToolsDir)</QTDIR>
|
||||||
|
<InputFile>%(FullPath)</InputFile>
|
||||||
<!--
|
<!--
|
||||||
moc task does not properly detect outputs are outdated if Qt version changes
|
moc task does not properly detect outputs are outdated if Qt version changes
|
||||||
(possibly causing Q_MOC_OUTPUT_REVISION to change). This *might* be because we
|
(possibly causing Q_MOC_OUTPUT_REVISION to change). This *might* be because we
|
||||||
|
@ -62,15 +67,41 @@
|
||||||
to avoid conflicts. (the numeric postfix is the value of Q_MOC_OUTPUT_REVISION)
|
to avoid conflicts. (the numeric postfix is the value of Q_MOC_OUTPUT_REVISION)
|
||||||
-->
|
-->
|
||||||
<OutputFile>$(QtToolOutDir)moc_68\moc_%(Filename).cpp</OutputFile>
|
<OutputFile>$(QtToolOutDir)moc_68\moc_%(Filename).cpp</OutputFile>
|
||||||
|
<QtMocDir>$(QtToolOutDir)moc_68\</QtMocDir>
|
||||||
|
<QtMocFileName>moc_%(Filename).cpp</QtMocFileName>
|
||||||
|
<DynamicSource>output</DynamicSource>
|
||||||
|
<ParallelProcess>true</ParallelProcess>
|
||||||
|
<CommandLineTemplate>[AllOptions] [AdditionalOptions]</CommandLineTemplate>
|
||||||
|
<Outputs>%(OutputFile)</Outputs>
|
||||||
|
<OverrideClCompile>false</OverrideClCompile>
|
||||||
</QtMoc>
|
</QtMoc>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<Import Project="qt_globals.targets"/>
|
|
||||||
<Import Project="qt_tasks.targets"/>
|
|
||||||
<Import Project="qtmoc.targets" />
|
<Import Project="qtmoc.targets" />
|
||||||
<Target Name="QtCheckQtDir" BeforeTargets="QtMocInit" Condition="!$(QtDirValid)">
|
<Target Name="QtCheckQtDir" BeforeTargets="QtMocInit" Condition="!$(QtDirValid)">
|
||||||
<Error Text="QTDIR not set or non-existent (pull the submodule?)" />
|
<Error Text="QTDIR not set or non-existent (pull the submodule?)" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
|
<!--Similar story with rcc-->
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<!--From qtrcc.props-->
|
||||||
|
<QtRcc>
|
||||||
|
<ExecutionDescription>rcc %(Identity)</ExecutionDescription>
|
||||||
|
<QTDIR>$(QtHostToolsDir)</QTDIR>
|
||||||
|
<InputFile>%(FullPath)</InputFile>
|
||||||
|
<OutputFile>$(QtToolOutDir)rcc\qrc_%(Filename).cpp</OutputFile>
|
||||||
|
<QtRccDir>$(QtToolOutDir)rcc\</QtRccDir>
|
||||||
|
<QtRccFileName>qrc_%(Filename).cpp</QtRccFileName>
|
||||||
|
<InitFuncName>%(Filename)</InitFuncName>
|
||||||
|
<Compression>default</Compression>
|
||||||
|
<TwoPass>false</TwoPass>
|
||||||
|
<DynamicSource>output</DynamicSource>
|
||||||
|
<ParallelProcess>true</ParallelProcess>
|
||||||
|
<CommandLineTemplate>[AllOptions] [AdditionalOptions]</CommandLineTemplate>
|
||||||
|
<Outputs>%(OutputFile)</Outputs>
|
||||||
|
</QtRcc>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<Import Project="qtrcc.targets" />
|
||||||
|
|
||||||
<!--Expose the new targets to VS-->
|
<!--Expose the new targets to VS-->
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PropertyPageSchema Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
|
<PropertyPageSchema Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2019 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$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
-->
|
|
||||||
<!--
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Qt/MSBuild moc property definitions
|
|
||||||
// -->
|
|
||||||
<Project>
|
|
||||||
<!--
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Import pre-requisites
|
|
||||||
// -->
|
|
||||||
<Import
|
|
||||||
Condition="'$(QtMsBuildProps_BeforeMoc)' != ''"
|
|
||||||
Project="$(QtMsBuildProps_BeforeMoc)"/>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// QtMoc item template
|
|
||||||
// -->
|
|
||||||
<ItemDefinitionGroup>
|
|
||||||
<QtMoc>
|
|
||||||
<ExecutionDescription>moc %(Identity)</ExecutionDescription>
|
|
||||||
|
|
||||||
<QTDIR Condition="'$(QtVsProjectSettings)' != 'true'"
|
|
||||||
>$(QtHostToolsDir)</QTDIR>
|
|
||||||
<QTDIR Condition="'$(QtVsProjectSettings)' == 'true'"
|
|
||||||
>$(QtInstallDir)</QTDIR>
|
|
||||||
|
|
||||||
<InputFile>%(FullPath)</InputFile>
|
|
||||||
|
|
||||||
<OutputFile Condition="'$(QtVsProjectSettings)' != 'true'"
|
|
||||||
>$(ProjectDir)GeneratedFiles\$(Configuration)\moc_%(Filename).cpp</OutputFile>
|
|
||||||
|
|
||||||
<QtMocDir Condition="'$(QtVsProjectSettings)' == 'true'"
|
|
||||||
>$(IntDir)moc\</QtMocDir>
|
|
||||||
<QtMocFileName Condition="'$(QtVsProjectSettings)' == 'true'"
|
|
||||||
>moc_%(Filename).cpp</QtMocFileName>
|
|
||||||
|
|
||||||
<DynamicSource>output</DynamicSource>
|
|
||||||
<ParallelProcess>true</ParallelProcess>
|
|
||||||
<CommandLineTemplate>[AllOptions] [AdditionalOptions]</CommandLineTemplate>
|
|
||||||
<Outputs>%(OutputFile)</Outputs>
|
|
||||||
<OverrideClCompile>false</OverrideClCompile>
|
|
||||||
</QtMoc>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Import dependants
|
|
||||||
// -->
|
|
||||||
<Import
|
|
||||||
Condition="'$(QtMsBuildProps_AfterMoc)' != ''"
|
|
||||||
Project="$(QtMsBuildProps_AfterMoc)"/>
|
|
||||||
|
|
||||||
</Project>
|
|
|
@ -0,0 +1,580 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
/***************************************************************************************************
|
||||||
|
Copyright (C) 2023 The Qt Company Ltd.
|
||||||
|
SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||||
|
***************************************************************************************************/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// Definitions specific to rcc
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// -->
|
||||||
|
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<!--
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Import pre-requisites
|
||||||
|
// -->
|
||||||
|
<Import
|
||||||
|
Condition="'$(QtMsBuildTargets_BeforeRcc)' != ''"
|
||||||
|
Project="$(QtMsBuildTargets_BeforeRcc)"/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Qt/MSBuild global properties
|
||||||
|
// -->
|
||||||
|
<PropertyGroup>
|
||||||
|
<QtBuildTargets>QtRcc;$(QtBuildTargets)</QtBuildTargets>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Setup item type and property page
|
||||||
|
// -->
|
||||||
|
<Choose>
|
||||||
|
<When Condition="'$(QtVsProjectSettings)' == 'true' AND '$(QtVsProjectClProperties)' == 'true'">
|
||||||
|
<ItemGroup>
|
||||||
|
<PropertyPageSchema
|
||||||
|
Include="$(MSBuildThisFileDirectory)qtrcc_v3.xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
</When>
|
||||||
|
<Otherwise>
|
||||||
|
<ItemGroup>
|
||||||
|
<PropertyPageSchema
|
||||||
|
Include="$(MSBuildThisFileDirectory)qtrcc.xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Otherwise>
|
||||||
|
</Choose>
|
||||||
|
<ItemGroup>
|
||||||
|
<AvailableItemName Include="QtRcc">
|
||||||
|
<Targets>Qt;_ClCompile</Targets>
|
||||||
|
</AvailableItemName>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<QtRccRuleName>QtRule40_Rcc</QtRccRuleName>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// TARGET QtRccInit
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Initialize default metadata
|
||||||
|
// -->
|
||||||
|
<Target Name="QtRccInit">
|
||||||
|
<!--// Initialize %(OutputFile) -->
|
||||||
|
<ItemGroup Condition="'$(QtVsProjectSettings)' == 'true' AND '@(QtRcc)' != ''">
|
||||||
|
<QtRccAux Include="@(QtRcc)">
|
||||||
|
<OutputFile
|
||||||
|
>$([System.IO.Path]::Combine('%(QtRcc.QtRccDir)','%(QtRcc.QtRccFileName)'))</OutputFile>
|
||||||
|
</QtRccAux>
|
||||||
|
<QtRcc Remove="@(QtRcc)"/>
|
||||||
|
<QtRcc Include="@(QtRccAux)"/>
|
||||||
|
<QtRccAux Remove="@(QtRccAux)"/>
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// TARGET QtRccSetDependencies
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Add resource files as dependencies of the QRC file
|
||||||
|
// -->
|
||||||
|
<Target Name="QtRccSetDependencies" DependsOnTargets="QtRccInit"
|
||||||
|
Inputs="%(QtRcc.Identity)" Outputs="@(QtRcc->'####### Don't skip this target #######')">
|
||||||
|
<ItemGroup>
|
||||||
|
<selected_files Include="$(SelectedFiles)"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!--// Parse QRC -->
|
||||||
|
<ListQrc QrcFilePath="%(QtRcc.FullPath)">
|
||||||
|
<Output TaskParameter="Result" ItemName="res_file"/>
|
||||||
|
</ListQrc>
|
||||||
|
|
||||||
|
<!--// Add dependencies -->
|
||||||
|
<ItemGroup Condition="'@(QtRcc)' != '' AND '@(res_file)' != ''">
|
||||||
|
<QtRcc>
|
||||||
|
<ResourceFiles>@(res_file)</ResourceFiles>
|
||||||
|
<AdditionalDependencies
|
||||||
|
>%(QtRcc.AdditionalDependencies);@(res_file->'%(FullPath)')</AdditionalDependencies>
|
||||||
|
</QtRcc>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!--// Clean-up -->
|
||||||
|
<PropertyGroup>
|
||||||
|
<QtRccExeQuoted/>
|
||||||
|
<QtRccQuoted/>
|
||||||
|
<RccListQuoted/>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<res_file Remove="@(res_file)"/>
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// TARGET QtRccPrepare
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Prepare items for processing
|
||||||
|
// -->
|
||||||
|
<Target Name="QtRccPrepare" DependsOnTargets="QtRccSetDependencies"
|
||||||
|
Inputs="%(QtRcc.Identity)" Outputs="@(QtRcc->'####### Don't skip this target #######')">
|
||||||
|
|
||||||
|
<Message Importance="High" Condition="'$(QtDebug)' == 'true'"
|
||||||
|
Text="## QtRccPrepare @(QtRcc)"/>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<selected_files>[@(selected_files->'%(Identity)','][')]</selected_files>
|
||||||
|
<file>[@(QtRcc->'%(Identity)')]</file>
|
||||||
|
<output_file>@(QtRcc->'%(OutputFile)')</output_file>
|
||||||
|
<is_selected Condition="$(selected_files.Contains('$(file)'))">true</is_selected>
|
||||||
|
<is_selected Condition="!$(selected_files.Contains('$(file)'))">false</is_selected>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!--// Delete output file to force build of source if it was manually selected to build
|
||||||
|
// (e.g. by the 'Compile' option in the context menu for the file) -->
|
||||||
|
<Delete Files="$(output_file)"
|
||||||
|
Condition="'$(SelectedFiles)' != '' AND '$(is_selected)' == 'true'" />
|
||||||
|
|
||||||
|
<!--// If a source was manually selected to build, remove all other sources -->
|
||||||
|
<ItemGroup Condition="'@(selected_files)' != ''">
|
||||||
|
<QtRcc Remove="@(QtRcc)"
|
||||||
|
Condition="'$(SelectedFiles)' != '' AND '$(is_selected)' != 'true'" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!--// Remove sources excluded from build -->
|
||||||
|
<ItemGroup>
|
||||||
|
<QtRcc Remove="@(QtRcc)"
|
||||||
|
Condition="'$(SelectedFiles)' == '' AND '%(QtRcc.ExcludedFromBuild)' == 'true'"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!--// Clean-up -->
|
||||||
|
<PropertyGroup>
|
||||||
|
<selected_files/>
|
||||||
|
<file/>
|
||||||
|
<output_file/>
|
||||||
|
<is_selected/>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// TARGET QtRccSetModified
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Set InputModified flag for modified files (i.e. Inputs newer than Outputs)
|
||||||
|
// -->
|
||||||
|
<Target Name="QtRccSetModified" DependsOnTargets="QtRccPrepare"
|
||||||
|
Condition="'@(QtRcc)' != ''"
|
||||||
|
Inputs="%(QtRcc.FullPath);%(QtRcc.AdditionalDependencies)" Outputs="@(QtRcc->'%(OutputFile)')">
|
||||||
|
|
||||||
|
<Message Importance="High" Condition="'$(QtDebug)' == 'true'"
|
||||||
|
Text="## QtRccSetModified @(QtRcc)" />
|
||||||
|
|
||||||
|
<CreateProperty Value="true">
|
||||||
|
<!-- // Using ValueSetByTask ensures $(input_changed) is only set to 'true' when the target
|
||||||
|
// is actually executed and not when MSBuild is figuring out which targets to run -->
|
||||||
|
<Output TaskParameter="ValueSetByTask" PropertyName="input_changed" />
|
||||||
|
</CreateProperty>
|
||||||
|
<ItemGroup>
|
||||||
|
<QtRcc>
|
||||||
|
<InputChanged>$(input_changed)</InputChanged>
|
||||||
|
</QtRcc>
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// TARGET QtRccOverrideCpp
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// -->
|
||||||
|
<!--<Import Project="qtrcc_cl.targets"/>-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// TARGET QtRcc
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Process each QRC file and produce the corresponding QtWork items
|
||||||
|
// -->
|
||||||
|
<PropertyGroup>
|
||||||
|
<QtRccDependsOn>
|
||||||
|
QtPrepare;
|
||||||
|
QtRccPrepare;
|
||||||
|
QtRccSetModified;
|
||||||
|
$(QtRccDependsOn)
|
||||||
|
</QtRccDependsOn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Target Name="QtRcc"
|
||||||
|
DependsOnTargets="$(QtRccDependsOn)"
|
||||||
|
BeforeTargets="$(QtRccBeforeTargets)" AfterTargets="$(QtRccAfterTargets)"
|
||||||
|
Condition="'@(QtRcc)' != ''"
|
||||||
|
Inputs="%(QtRcc.FullPath);%(QtRcc.AdditionalDependencies);$(MSBuildProjectFile)"
|
||||||
|
Outputs="@(QtRcc->'%(OutputFile)')">
|
||||||
|
|
||||||
|
<Message Importance="High" Condition="'$(QtDebug)' == 'true'" Text="## QtRcc @(QtRcc)" />
|
||||||
|
|
||||||
|
<CreateProperty Value="true">
|
||||||
|
<Output TaskParameter="ValueSetByTask" PropertyName="dependencies_changed" />
|
||||||
|
</CreateProperty>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<two_pass Condition="'%(QtRcc.TwoPass)' == 'true'">true</two_pass>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Convert string lists in source item properties to lists of items
|
||||||
|
// -->
|
||||||
|
<Flatten Items="@(QtRcc)"
|
||||||
|
Metadata="InputFile;
|
||||||
|
OutputFile;
|
||||||
|
TempFile;
|
||||||
|
InitFuncName;
|
||||||
|
Root;
|
||||||
|
Compression;
|
||||||
|
NoCompression;
|
||||||
|
CompressThreshold;
|
||||||
|
BinaryOutput;
|
||||||
|
NoZstd;
|
||||||
|
PassNumber;
|
||||||
|
NoNamespace;
|
||||||
|
Verbose;
|
||||||
|
List;
|
||||||
|
Project;
|
||||||
|
FormatVersion">
|
||||||
|
<Output
|
||||||
|
TaskParameter="Result" ItemName="LocalOptions" />
|
||||||
|
</Flatten>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Translate local paths to build host paths
|
||||||
|
// -->
|
||||||
|
<HostTranslatePaths
|
||||||
|
Items="@(LocalOptions)"
|
||||||
|
Names="InputFile;
|
||||||
|
OutputFile;
|
||||||
|
TempFile;
|
||||||
|
Root">
|
||||||
|
<Output
|
||||||
|
TaskParameter="Result" ItemName="options" />
|
||||||
|
</HostTranslatePaths>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<!--
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Remove quotes from all paths
|
||||||
|
// Escape trailing back-slash in paths
|
||||||
|
// Add quotes to paths containing spaces
|
||||||
|
// -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'InputFile' OR '%(Name)' == 'OutputFile'
|
||||||
|
OR '%(Name)' == 'TempFile' OR '%(Name)' == 'Root'"
|
||||||
|
>$([System.String]::Copy('%(Value)').Replace('"', ''))</Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value Condition="('%(Name)' == 'InputFile' OR '%(Name)' == 'OutputFile'
|
||||||
|
OR '%(Name)' == 'TempFile' OR '%(Name)' == 'Root')
|
||||||
|
AND $([System.String]::Copy('%(Value)').Contains(' '))
|
||||||
|
AND $([System.String]::Copy('%(Value)').EndsWith('\'))"
|
||||||
|
>%(Value)\</Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value Condition="('%(Name)' == 'InputFile' OR '%(Name)' == 'OutputFile'
|
||||||
|
OR '%(Name)' == 'TempFile' OR '%(Name)' == 'Root')
|
||||||
|
AND $([System.String]::Copy('%(Value)').Contains(' '))"
|
||||||
|
>"%(Value)"</Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Generate tool command line arguments
|
||||||
|
// -->
|
||||||
|
<!--// inputs Input files (*.qrc) -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'InputFile'">%(Value)</Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -o, -output <file> Write output to <file> -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'OutputFile' AND '$(two_pass)' != 'true'">-o %(Value)</Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'OutputFile' AND '$(two_pass)' == 'true'"></Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -t, -temp <file> Use temporary <file> for big resources -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'TempFile'">--temp %(Value)</Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -name <name> Create an external initialization function with <name> -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'InitFuncName'">--name %(Value)</Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -root <path> Prefix resource access path with root path -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'Root'">--root %(Value)</Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -compress <level> Compress input files by <level> -->
|
||||||
|
<options>
|
||||||
|
<Value
|
||||||
|
Condition="'%(Name)' == 'Compression' AND '%(Value)' == 'level1'">--compress 1</Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value
|
||||||
|
Condition="'%(Name)' == 'Compression' AND '%(Value)' == 'level2'">--compress 2</Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value
|
||||||
|
Condition="'%(Name)' == 'Compression' AND '%(Value)' == 'level3'">--compress 3</Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value
|
||||||
|
Condition="'%(Name)' == 'Compression' AND '%(Value)' == 'level4'">--compress 4</Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value
|
||||||
|
Condition="'%(Name)' == 'Compression' AND '%(Value)' == 'level5'">--compress 5</Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value
|
||||||
|
Condition="'%(Name)' == 'Compression' AND '%(Value)' == 'level6'">--compress 6</Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value
|
||||||
|
Condition="'%(Name)' == 'Compression' AND '%(Value)' == 'level7'">--compress 7</Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value
|
||||||
|
Condition="'%(Name)' == 'Compression' AND '%(Value)' == 'level8'">--compress 8</Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value
|
||||||
|
Condition="'%(Name)' == 'Compression' AND '%(Value)' == 'level9'">--compress 9</Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value
|
||||||
|
Condition="'%(Name)' == 'Compression'
|
||||||
|
AND !$([System.String]::Copy('%(Value)').StartsWith('--compress'))"></Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -no-compress Disable all compression -->
|
||||||
|
<options>
|
||||||
|
<Value
|
||||||
|
Condition="'%(Name)' == 'NoCompression' AND '%(Value)' != 'true'"></Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value
|
||||||
|
Condition="'%(Name)' == 'NoCompression' AND '%(Value)' == 'true'">--no-compress</Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -threshold <level> Threshold to consider compressing files -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'CompressThreshold'">--threshold %(Value)</Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -binary Output a binary file for use as a dynamic source -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'BinaryOutput' AND '%(Value)' != 'true'"></Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'BinaryOutput' AND '%(Value)' == 'true'">--binary</Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -no-zstd Disable usage of zstd compression -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'NoZstd' AND '%(Value)' != 'true'"></Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'NoZstd' AND '%(Value)' == 'true'">--no-zstd</Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -pass <number> Pass number for big resources -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'PassNumber'">--pass %(Value)</Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -namespace Turn off namespace macros -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'NoNamespace' AND '%(Value)' != 'true'"></Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'NoNamespace' AND '%(Value)' == 'true'">--namespace</Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -verbose Enable verbose mode -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'Verbose' AND '%(Value)' != 'true'"></Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'Verbose' AND '%(Value)' == 'true'">--verbose</Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -list Only list .qrc file entries, do not generate code -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'List' AND '%(Value)' != 'true'"></Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'List' AND '%(Value)' == 'true'">--list</Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -project Output a resource file containing all files from the
|
||||||
|
// current directory -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'Project' AND '%(Value)' != 'true'"></Value>
|
||||||
|
</options>
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'Project' AND '%(Value)' == 'true'">--project</Value>
|
||||||
|
</options>
|
||||||
|
|
||||||
|
<!--// -format-version <number> The RCC format version to write -->
|
||||||
|
<options>
|
||||||
|
<Value Condition="'%(Name)' == 'FormatVersion'">--format-version %(Value)</Value>
|
||||||
|
</options>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<options>@(options->'%(Value)', ' ')</options>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Aux properties
|
||||||
|
// -->
|
||||||
|
<PropertyGroup>
|
||||||
|
<!--// Force modified flag if source was manually selected to build -->
|
||||||
|
<input_changed Condition="'$(SelectedFiles)' == ''"
|
||||||
|
>%(QtRcc.InputChanged)</input_changed>
|
||||||
|
<input_changed Condition="'$(SelectedFiles)' != ''"
|
||||||
|
>true</input_changed>
|
||||||
|
|
||||||
|
<!--// Run work in parallel processes -->
|
||||||
|
<run_parallel Condition="'@(QtRcc)' != ''
|
||||||
|
AND '%(QtRcc.ParallelProcess)' == 'true'
|
||||||
|
AND '$(SelectedFiles)' == ''"
|
||||||
|
>true</run_parallel>
|
||||||
|
|
||||||
|
<!--// Run work in single process -->
|
||||||
|
<run_single Condition="'@(QtRcc)' != ''
|
||||||
|
AND ('%(QtRcc.ParallelProcess)' != 'true'
|
||||||
|
OR '$(SelectedFiles)' != '')"
|
||||||
|
>true</run_single>
|
||||||
|
|
||||||
|
<!--// Get relative path to output -->
|
||||||
|
<output_relative
|
||||||
|
>$([MSBuild]::MakeRelative($(ProjectDir), %(QtRcc.OutputFile)).TrimStart('\'))</output_relative>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Create work item
|
||||||
|
// -->
|
||||||
|
<ItemGroup Condition="'$(run_parallel)' == 'true' OR '$(run_single)' == 'true'">
|
||||||
|
<QtWork Include="@(QtRcc)">
|
||||||
|
<WorkType>rcc</WorkType>
|
||||||
|
<ToolPath Condition="'$(QtVsProjectSettings)' == 'true'">$(QtToolsPath)/rcc</ToolPath>
|
||||||
|
<ToolPath Condition="'$(QtVsProjectSettings)' != 'true'">%(QtRcc.QTDIR)\bin\rcc.exe</ToolPath>
|
||||||
|
<Options>$(options)</Options>
|
||||||
|
<Message>%(QtRcc.ExecutionDescription)</Message>
|
||||||
|
<DependenciesChanged>$(dependencies_changed)</DependenciesChanged>
|
||||||
|
<InputChanged>$(input_changed)</InputChanged>
|
||||||
|
<ParallelBuild Condition="'$(run_parallel)' == 'true'">true</ParallelBuild>
|
||||||
|
<ParallelBuild Condition="'$(run_single)' == 'true'">false</ParallelBuild>
|
||||||
|
<!--
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Two-pass ("resources_big"): pass 1 -->
|
||||||
|
<Message Condition="'%(QtRcc.TwoPass)' == 'true'">%(QtRcc.ExecutionDescription) [pass 1]</Message>
|
||||||
|
<RccPass Condition="'%(QtRcc.TwoPass)' == 'true'">1</RccPass>
|
||||||
|
<RccOptions Condition="'%(QtRcc.TwoPass)' == 'true'">$(options)</RccOptions>
|
||||||
|
<Options Condition="'%(QtRcc.TwoPass)' == 'true'"
|
||||||
|
>$(options) -pass 1 -o "%(OutputFile)"</Options>
|
||||||
|
<Optimization Condition="'%(QtRcc.TwoPass)' == 'true'">Disabled</Optimization>
|
||||||
|
<!--
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// C++ dynamic source -->
|
||||||
|
<ClCompile Condition="'%(QtRcc.DynamicSource)' == 'output'">$(output_relative)</ClCompile>
|
||||||
|
</QtWork>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Clean-up
|
||||||
|
// -->
|
||||||
|
<PropertyGroup>
|
||||||
|
<options/>
|
||||||
|
<dependencies_changed/>
|
||||||
|
<input_changed/>
|
||||||
|
<run_parallel/>
|
||||||
|
<run_single/>
|
||||||
|
<output_relative/>
|
||||||
|
<two_pass/>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<LocalOptions Remove="@(LocalOptions)"/>
|
||||||
|
<options Remove="@(options)"/>
|
||||||
|
<selected_files Remove="@(selected_files)"/>
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// TARGET QtRccPass2
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Two-pass ("resources_big"): pass 2
|
||||||
|
// -->
|
||||||
|
<Target Name="QtRccPass2"
|
||||||
|
DependsOnTargets="QtRccPass2_GetObjs;QtRccPass2_Exec"/>
|
||||||
|
|
||||||
|
<Target Name="QtRccPass2_GetObjs"
|
||||||
|
DependsOnTargets="ComputeCLOutputs">
|
||||||
|
<ItemGroup>
|
||||||
|
<QtRccObj Include="@(Obj->WithMetadataValue('RccPass', '1'))">
|
||||||
|
<RccPass>2</RccPass>
|
||||||
|
</QtRccObj>
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="QtRccPass2_Exec"
|
||||||
|
DependsOnTargets="QtRccPass2_GetObjs"
|
||||||
|
Condition="'@(QtRccObj)' != ''">
|
||||||
|
<Move
|
||||||
|
SourceFiles="%(QtRccObj.Identity)"
|
||||||
|
DestinationFiles="%(QtRccObj.Identity)_TMP"/>
|
||||||
|
<Exec
|
||||||
|
Command="@(QtRccObj->'ECHO %(ExecutionDescription) [pass 2] & %(ToolPath) %(RccOptions) -pass 2 -temp "%(Identity)_TMP" -o "%(Identity)"')"
|
||||||
|
IgnoreExitCode="true"/>
|
||||||
|
<ItemGroup>
|
||||||
|
<Obj Remove="@(QtRccObj->'%(Identity)')"/>
|
||||||
|
<Obj Include="@(QtRccObj)"/>
|
||||||
|
<QtRccObj Remove="@(QtRccObj)"/>
|
||||||
|
</ItemGroup>
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<Target Name="QtRccPass2_Link"
|
||||||
|
DependsOnTargets="QtRccPass2"/>
|
||||||
|
|
||||||
|
<Target Name="QtRccPass2_Lib"
|
||||||
|
DependsOnTargets="QtRccPass2"/>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<ComputeLinkInputsTargets>
|
||||||
|
$(ComputeLinkInputsTargets);
|
||||||
|
;QtRccPass2_Link;
|
||||||
|
</ComputeLinkInputsTargets>
|
||||||
|
<ComputeLibInputsTargets>
|
||||||
|
$(ComputeLibInputsTargets);
|
||||||
|
;QtRccPass2_Lib;
|
||||||
|
</ComputeLibInputsTargets>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Import dependants
|
||||||
|
// -->
|
||||||
|
<Import
|
||||||
|
Condition="'$(QtMsBuildTargets_AfterRcc)' != ''"
|
||||||
|
Project="$(QtMsBuildTargets_AfterRcc)"/>
|
||||||
|
|
||||||
|
</Project>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ProjectSchemaDefinitions xmlns="http://schemas.microsoft.com/build/2009/properties">
|
||||||
|
<ItemType Name="QtRcc" DisplayName="Qt Resource File" />
|
||||||
|
<ContentType Name="QtRcc" DisplayName="Qt Resource Compiler" />
|
||||||
|
</ProjectSchemaDefinitions>
|
Loading…
Reference in New Issue