aboutsummaryrefslogtreecommitdiffstats
path: root/src/qtmsbuild/moc
diff options
context:
space:
mode:
Diffstat (limited to 'src/qtmsbuild/moc')
-rw-r--r--src/qtmsbuild/moc/qtmoc.targets12
-rw-r--r--src/qtmsbuild/moc/qtmoc_cl.targets_TT143
-rw-r--r--src/qtmsbuild/moc/qtmoc_cl.xml_TT112
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="&quot;-I[value]&quot;" 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>