diff options
Diffstat (limited to 'src/qtmsbuild/moc')
-rw-r--r-- | src/qtmsbuild/moc/qtmoc.targets | 12 | ||||
-rw-r--r-- | src/qtmsbuild/moc/qtmoc_cl.targets_TT | 143 | ||||
-rw-r--r-- | src/qtmsbuild/moc/qtmoc_cl.xml_TT | 112 |
3 files changed, 267 insertions, 0 deletions
diff --git a/src/qtmsbuild/moc/qtmoc.targets b/src/qtmsbuild/moc/qtmoc.targets index acbdc89a..276a16ae 100644 --- a/src/qtmsbuild/moc/qtmoc.targets +++ b/src/qtmsbuild/moc/qtmoc.targets @@ -61,6 +61,9 @@ <PropertyPageSchema Condition="'$(QtVsProjectSettings)' == 'true'" Include="$(MSBuildThisFileDirectory)qtmoc_settings.xml" /> + <PropertyPageSchema + Condition="'$(QtVsProjectClProperties)' == 'true'" + Include="$(MSBuildThisFileDirectory)qtmoc_cl.xml" /> <AvailableItemName Include="QtMoc"> <Targets>Qt;_ClCompile</Targets> </AvailableItemName> @@ -154,6 +157,14 @@ <!-- ///////////////////////////////////////////////////////////////////////////////////////////////// + /// TARGET QtMocOverrideCpp + ///////////////////////////////////////////////////////////////////////////////////////////////// + // + // --> + <Import Project="qtmoc_cl.targets"/> + + <!-- + ///////////////////////////////////////////////////////////////////////////////////////////////// /// TARGET QtMoc ///////////////////////////////////////////////////////////////////////////////////////////////// // Process each source file and produce the corresponding QtWork items @@ -163,6 +174,7 @@ QtPrepare; QtMocPrepare; QtMocSetModified; + QtMocOverrideCpp; $(QtMocDependsOn) </QtMocDependsOn> </PropertyGroup> diff --git a/src/qtmsbuild/moc/qtmoc_cl.targets_TT b/src/qtmsbuild/moc/qtmoc_cl.targets_TT new file mode 100644 index 00000000..71409511 --- /dev/null +++ b/src/qtmsbuild/moc/qtmoc_cl.targets_TT @@ -0,0 +1,143 @@ +<?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$ + ** + ***************************************************************************** +<#@output extension="targets" #> +<#@include file="$(SolutionDir)\common.tt" #> +<#@assembly Name="System.Xml" #> +<#@assembly Name="System.Xml.Linq" #> +<#@import namespace="System.Collections.Generic" #> +<#@import namespace="System.Linq" #> +<#@import namespace="System.Text" #> +<#@import namespace="System.Xml" #> +<#@import namespace="System.Xml.Linq" #> +<# + var pathRuleCl = Path.Combine(VC_TARGETS_PATH, "1033", "cl.xml"); + var xmlRule = XmlLoad(File.ReadAllText(pathRuleCl, Encoding.UTF8)); +#> + ** <#=WARNING_GENERATED_FILE#> + ***************************************************************************** +--> +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Target Name="QtMocOverrideCpp" DependsOnTargets="QtMocPrepare" + Inputs="%(QtMoc.Identity)" Outputs="@(QtMoc->'####### Don't skip this target #######')"> + + <Message Importance="High" Condition="'$(QtDebug)' == 'true'" + Text="## QtMocOverrideCpp @(QtMoc)" /> + + <PropertyGroup Condition="'$(QtVsProjectClProperties)' == 'true'"> + <override_cl_compile>%(QtMoc.OverrideClCompile)</override_cl_compile> + </PropertyGroup> + + <ItemGroup Condition="'$(override_cl_compile)' == 'extend'"> + <QtMoc> + <!-- BEGIN Generated Text <#=XML_COMMENT_END#> +<#= +XmlPrint(xmlRule.Elements() + .Where(x => x.Name.ToString().Equals("StringListProperty")) + .Where(x => (string)x.Attribute("Visible") != "false") + .Where(x => (string)x.Attribute("Category") != "Command Line") + .Where(x => !x.Descendants("DataSource").Any()) + .Select(x => new XElement((string)x.Attribute("Name"), + string.Format( + "@(ClCompile->WithMetadataValue('Identity','DefaultClCompile')->'%({0})');%(QtMoc.{0})", + (string)x.Attribute("Name"))))) +#> + <#=XML_COMMENT_BEGIN#> END Generated Text --> + </QtMoc> + <QtMoc> + <IncludePath>%(QtMoc.AdditionalIncludeDirectories)</IncludePath> + <Define>%(QtMoc.PreprocessorDefinitions)</Define> + <Undefine>%(QtMoc.UndefinePreprocessorDefinitions)</Undefine> + </QtMoc> + </ItemGroup> + + <ItemGroup Condition="'$(override_cl_compile)' == 'replace'"> + <QtMoc> + <IncludePath Condition="'%(QtMoc.AdditionalIncludeDirectories)' != ''" + >%(QtMoc.AdditionalIncludeDirectories)</IncludePath> + <IncludePath Condition="'%(QtMoc.AdditionalIncludeDirectories)' == ''" + >@(ClCompile-> + WithMetadataValue('Identity', 'DefaultClCompile')-> + '%(AdditionalIncludeDirectories)')</IncludePath> + <Define Condition="'%(QtMoc.PreprocessorDefinitions)' != ''" + >%(QtMoc.PreprocessorDefinitions)</Define> + <Define Condition="'%(QtMoc.PreprocessorDefinitions)' == ''" + >@(ClCompile-> + WithMetadataValue('Identity','DefaultClCompile')-> + '%(PreprocessorDefinitions)')</Define> + <Undefine Condition="'%(QtMoc.UndefinePreprocessorDefinitions)' == ''" + >%(QtMoc.UndefinePreprocessorDefinitions)</Undefine> + <Undefine Condition="'%(QtMoc.UndefinePreprocessorDefinitions)' != ''" + >@(ClCompile-> + WithMetadataValue('Identity','DefaultClCompile')-> + '%(UndefinePreprocessorDefinitions)')</Undefine> + </QtMoc> + </ItemGroup> + + <ItemGroup Condition="'$(override_cl_compile)' == 'false'"> + <QtMoc> + <!-- BEGIN Generated Text <#=XML_COMMENT_END#> +<#= +XmlPrint(xmlRule.Elements() + .Where(x => x.Name.ToString().EndsWith("Property")) + .Where(x => (string)x.Attribute("Visible") != "false") + .Where(x => (string)x.Attribute("Category") != "Command Line") + .Where(x => !x.Descendants("DataSource").Any()) + .Select(x => new XElement((string)x.Attribute("Name"), + new XAttribute("Condition", + string.Format("'%(QtMoc.{0})' != ''", (string)x.Attribute("Name"))), + string.Format( + "@(ClCompile->WithMetadataValue('Identity','DefaultClCompile')->'%({0})')", + (string)x.Attribute("Name"))))) +#> + <#=XML_COMMENT_BEGIN#> END Generated Text --> + <IncludePath + >@(ClCompile-> + WithMetadataValue('Identity','DefaultClCompile')-> + '%(AdditionalIncludeDirectories)')</IncludePath> + <Define + >@(ClCompile-> + WithMetadataValue('Identity','DefaultClCompile')-> + '%(PreprocessorDefinitions)')</Define> + <Undefine + >@(ClCompile-> + WithMetadataValue('Identity','DefaultClCompile')-> + '%(UndefinePreprocessorDefinitions)')</Undefine> + </QtMoc> + </ItemGroup> + + <!-- + /////////////////////////////////////////////////////////////////////////////////////////////// + // Clean-up + // --> + <PropertyGroup> + <override_cl_compile/> + </PropertyGroup> + </Target> +</Project> diff --git a/src/qtmsbuild/moc/qtmoc_cl.xml_TT b/src/qtmsbuild/moc/qtmoc_cl.xml_TT new file mode 100644 index 00000000..77c3c116 --- /dev/null +++ b/src/qtmsbuild/moc/qtmoc_cl.xml_TT @@ -0,0 +1,112 @@ +<?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$ + ** + ***************************************************************************** +<#@output extension="xml" #> +<#@include file="$(SolutionDir)\common.tt" #> +<#@assembly Name="System.Xml" #> +<#@assembly Name="System.Xml.Linq" #> +<#@import namespace="System.Collections.Generic" #> +<#@import namespace="System.Linq" #> +<#@import namespace="System.Text" #> +<#@import namespace="System.Xml" #> +<#@import namespace="System.Xml.Linq" #> +<# + var pathRuleCl = Path.Combine(VC_TARGETS_PATH, "1033", "cl.xml"); + var xmlRule = XmlLoad(File.ReadAllText(pathRuleCl, Encoding.UTF8)); + var categoryNames = xmlRule + .Elements("Rule.Categories") + .Elements("Category") + .Where(x => x.Attribute("Subtype") == null) + .ToDictionary( + x => (string)x.Attribute("Name"), + x => (string)x.Attribute("DisplayName")); +#> + ** <#=WARNING_GENERATED_FILE#> + ***************************************************************************** +--> + +<ProjectSchemaDefinitions + xmlns="http://schemas.microsoft.com/build/2009/properties" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:sys="clr-namespace:System;assembly=mscorlib"> + <Rule + Name="QtRule30_Moc" + OverrideMode="Extend" + PageTemplate="tool" + DisplayName="Qt Meta-Object Compiler" + Order="9"> + <Rule.DataSource> + <DataSource + Persistence="ProjectFile" + ItemType="QtMoc" /> + </Rule.DataSource> + <Rule.Categories> + <Category Name="MocCpp" DisplayName="Override C/C++"/> + </Rule.Categories> + <EnumProperty + Name="OverrideClCompile" + Category="MocCpp" + DisplayName="Override C/C++ Properties" + Description="Define how C/C++ properties are redefined for moc"> + <EnumValue Name="extend" DisplayName= +"Extend (append override definitions to C/C++ list properties; replace other properties)"/> + <EnumValue Name="replace" DisplayName= +"Replace (use override definitions instead of C/C++ properties)"/> + <EnumValue Name="false" DisplayName= +"Disabled (use C/C++ properties; ignore override definitions)"/> + </EnumProperty> + <StringListProperty Name="IncludePath" Switch=""-I[value]"" Visible="false"/> + <StringListProperty Name="Define" Switch="-D " Visible="false"/> + <StringListProperty Name="Undefine" Switch="-U[value]" Visible="false"/> + <!-- BEGIN Generated Text <#=XML_COMMENT_END#> +<#= +XmlPrint(xmlRule.Elements() + .Where(x => x.Name.ToString().EndsWith("Property")) + .Where(x => (string)x.Attribute("Visible") != "false") + .Where(x => (string)x.Attribute("Category") != "Command Line") + .Where(x => !x.Descendants("DataSource").Any()) + .GroupBy(x => (string)x.Attribute("Category")) + .SelectMany(y => y.Select(x => + { + x = new XElement(x); + x.SetAttributeValue("Category", "MocCpp"); + x.SetAttributeValue("Description", "(overrides C/C++ property) " + + (string)x.Attribute("Description")); + return x; + }) + .Prepend(new XElement("StringProperty", + new XAttribute("Name", "QtCppHeader_" + y.Key.Replace(' ', '_')), + new XAttribute("Category", "MocCpp"), + new XAttribute("ReadOnly", "true"), + new XAttribute("DisplayName", string.Format("{0} {1} {2}", + new string('#', 10), categoryNames[y.Key], new string('#', 30))))))) +#> + <#=XML_COMMENT_BEGIN#> END Generated Text --> + </Rule> +</ProjectSchemaDefinitions> |