Skip to content

Commit 34ee731

Browse files
authored
Merge pull request #404 from jlaanstra/user/jlaans/399
Add CppWinRTGenerateWindowsMetadata property to more quickly determine if a project outputs a winmd.
2 parents 916f926 + 2e93084 commit 34ee731

File tree

13 files changed

+47
-11
lines changed

13 files changed

+47
-11
lines changed

nuget/CppWinrtRules.Project.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,5 +70,10 @@
7070
DisplayName="Optimized"
7171
Description="Enables component projection optimization features (e.g., unified construction)"
7272
Category="General" />
73+
74+
<BoolProperty Name="CppWinRTGenerateWindowsMetadata"
75+
DisplayName="Generate Windows Metadata"
76+
Description="Enables or disables the generation of Windows Metadata"
77+
Category="General" />
7378

7479
</Rule>

nuget/Microsoft.Windows.CppWinRT.targets

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Copyright (C) Microsoft Corporation. All rights reserved.
3737
<WindowsSDK_MetadataFoundationPath Condition="('$(WindowsSDK_MetadataFoundationPath)'!='') And !Exists($(WindowsSDK_MetadataFoundationPath))">$(WindowsSDK_MetadataPathVersioned)</WindowsSDK_MetadataFoundationPath>
3838

3939
<GetTargetPathDependsOn>
40-
$(GetTargetPathDependsOn);GetCppWinRTMdMergeInputs;CppWinRTResolveWinMD;
40+
$(GetTargetPathDependsOn);ComputeCppWinRTResolvedWinMD;CppWinRTResolvedWinMD;
4141
</GetTargetPathDependsOn>
4242
<PrepareForBuildDependsOn>
4343
$(PrepareForBuildDependsOn);CppWinRTVerifyKitVersion;
@@ -50,7 +50,12 @@ Copyright (C) Microsoft Corporation. All rights reserved.
5050
$(ComputeMidlInputsTargets);CppWinRTComputeXamlGeneratedMidlInputs;CppWinRTSetMidlReferences;
5151
</ComputeMidlInputsTargets>
5252
<AfterMidlTargets>
53-
$(AfterMidlTargets);GetCppWinRTMdMergeInputs;CppWinRTMergeProjectWinMDInputs;CppWinRTResolveWinMD;
53+
$(AfterMidlTargets);
54+
GetCppWinRTMdMergeInputs;
55+
CppWinRTMergeProjectWinMDInputs;
56+
ComputeCppWinRTResolvedWinMD;
57+
CppWinRTResolvedWinMD;
58+
CppWinRTResolvedWinMDToOutputDirectory;
5459
</AfterMidlTargets>
5560
<ResolveAssemblyReferencesDependsOn>
5661
$(ResolveAssemblyReferencesDependsOn);GetCppWinRTProjectWinMDReferences;CppWinRTRemoveStaticLibraries;
@@ -112,8 +117,18 @@ Copyright (C) Microsoft Corporation. All rights reserved.
112117
</ItemGroup>
113118
</Target>
114119

115-
<Target Name="CppWinRTResolveWinMD"
116-
Condition="'@(CppWinRTMdMergeInputs)' != '' AND '$(CppWinRTEnableComponentProjection)' == 'true'"
120+
<!-- Target used only to evaluate CppWinRTGenerateWindowsMetadata if it doesn't already have a value -->
121+
<Target Name="ComputeCppWinRTResolvedWinMD"
122+
Condition="'$(CppWinRTGenerateWindowsMetadata)' == ''"
123+
DependsOnTargets="GetCppWinRTMdMergeInputs">
124+
<PropertyGroup>
125+
<CppWinRTGenerateWindowsMetadata Condition="'@(CppWinRTMdMergeInputs)'!= ''">true</CppWinRTGenerateWindowsMetadata>
126+
<CppWinRTGenerateWindowsMetadata Condition="'@(CppWinRTMdMergeInputs)'== ''">false</CppWinRTGenerateWindowsMetadata>
127+
</PropertyGroup>
128+
</Target>
129+
130+
<Target Name="CppWinRTResolvedWinMD"
131+
Condition="'$(CppWinRTGenerateWindowsMetadata)' == 'true'"
117132
Returns="@(WinMDFullPath)">
118133
<ItemGroup>
119134
<WinMDFullPath Remove="@(WinMDFullPath)"/>
@@ -127,7 +142,7 @@ Copyright (C) Microsoft Corporation. All rights reserved.
127142
<ProjectType>$(ConfigurationType)</ProjectType>
128143
</WinMDFullPath>
129144
</ItemGroup>
130-
<Message Text="CppWinRTResolveWinMD: @(WinMDFullPath->'%(FullPath)')" Importance="$(CppWinRTVerbosity)"/>
145+
<Message Text="CppWinRTResolvedWinMD: @(WinMDFullPath->'%(FullPath)')" Importance="$(CppWinRTVerbosity)"/>
131146
</Target>
132147

133148
<!-- Static library reference files are merged into the project that
@@ -372,7 +387,7 @@ $(XamlMetaDataProviderPch)
372387
<Target Name="CppWinRTMergeProjectWinMDInputs"
373388
DependsOnTargets="Midl;GetCppWinRTMdMergeInputs;$(CppWinRTMergeProjectWinMDInputsDependsOn)"
374389
Inputs="@(CppWinRTMdMergeInputs)"
375-
Outputs="$(CppWinRTProjectWinMD)">
390+
Outputs="@(_MdMergedOutput);$(IntDir)mdmerge.rsp">
376391
<PropertyGroup>
377392
<!--Note: CppWinRTNamespaceMergeDepth supersedes CppWinRTMergeDepth-->
378393
<_MdMergeDepth Condition="'$(CppWinRTNamespaceMergeDepth)' != ''">-n:$(CppWinRTNamespaceMergeDepth)</_MdMergeDepth>
@@ -401,11 +416,20 @@ $(XamlMetaDataProviderPch)
401416
<_MdMergedOutput Remove="@(_MdMergedOutput)"/>
402417
<_MdMergedOutput Include="$(CppWinRTMergedDir)*.winmd"/>
403418
</ItemGroup>
419+
<Message Text="CppWinRTMdMerge output: @(MdMergeOutput)" Importance="$(CppWinRTVerbosity)"/>
420+
</Target>
421+
422+
<!-- Only copy winmd to output folder if CppWinRTGenerateWindowsMetadata is true -->
423+
<!-- Note that Condition is evaluated before DependsOnTargets are run -->
424+
<Target Name="CppWinRTResolvedWinMDToOutputDirectory"
425+
Condition="'$(CppWinRTGenerateWindowsMetadata)' == 'true'"
426+
DependsOnTargets="CppWinRTMergeProjectWinMDInputs;$(CppWinRTResolvedWinMDToOutputDirectoryDependsOn)"
427+
Inputs="@(_MdMergedOutput)"
428+
Outputs="$(CppWinRTProjectWinMD)">
404429
<Copy UseHardlinksIfPossible="$(CppWinRTUseHardlinksIfPossible)"
405430
SkipUnchangedFiles="$(CppWinRTSkipUnchangedFiles)"
406431
SourceFiles="@(_MdMergedOutput)"
407432
DestinationFiles="@(_MdMergedOutput->'$(OutDir)%(Filename)%(Extension)')" />
408-
<Message Text="CppWinRTMdMerge output: @(MdMergeOutput)" Importance="$(CppWinRTVerbosity)"/>
409433
</Target>
410434

411435
<!-- Build the platform projection from the winmds that sip with the platform in the Windows SDK -->

nuget/readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ C++/WinRT behavior can be customized with these project properties:
6767
| CppWinRTFastAbi | true \| *false | Enables Fast ABI feature for both consuming and producing projections |
6868
| CppWinRTProjectLanguage | C++/CX \| *C++/WinRT | Selects the C++ dialect for the project. C++/WinRT provides full projection support, C++/CX permits consuming projection headers. |
6969
| CppWinRTOptimized | true \| *false | Enables component projection [optimization features](https://kennykerr.ca/2019/06/07/cppwinrt-optimizing-components/) |
70+
| CppWinRTGenerateWindowsMetadata | true \| *false | Indicates whether this project produces Windows Metadata |
7071
\*Default value
7172

7273
To customize common C++/WinRT project properties:

test/nuget/TestRuntimeComponent1/TestRuntimeComponent1.vcxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
</ClCompile>
8888
<Link>
8989
<SubSystem>Console</SubSystem>
90-
<GenerateWindowsMetadata>true</GenerateWindowsMetadata>
90+
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
9191
<ModuleDefinitionFile>TestRuntimeComponent1.def</ModuleDefinitionFile>
9292
</Link>
9393
</ItemDefinitionGroup>

test/nuget/TestRuntimeComponent2/TestRuntimeComponent2.vcxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
</ClCompile>
8989
<Link>
9090
<SubSystem>Console</SubSystem>
91-
<GenerateWindowsMetadata>true</GenerateWindowsMetadata>
91+
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
9292
<ModuleDefinitionFile>TestRuntimeComponent2.def</ModuleDefinitionFile>
9393
</Link>
9494
</ItemDefinitionGroup>

test/nuget/TestRuntimeComponent3/TestRuntimeComponent3.vcxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
</ClCompile>
8989
<Link>
9090
<SubSystem>Console</SubSystem>
91-
<GenerateWindowsMetadata>true</GenerateWindowsMetadata>
91+
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
9292
<ModuleDefinitionFile>TestRuntimeComponent3.def</ModuleDefinitionFile>
9393
</Link>
9494
</ItemDefinitionGroup>

test/nuget/TestRuntimeComponentEmpty/TestRuntimeComponentEmpty.vcxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
</ClCompile>
8989
<Link>
9090
<SubSystem>Console</SubSystem>
91-
<GenerateWindowsMetadata>true</GenerateWindowsMetadata>
91+
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
9292
<ModuleDefinitionFile>TestRuntimeComponentEmpty.def</ModuleDefinitionFile>
9393
</Link>
9494
</ItemDefinitionGroup>

vsix/ProjectTemplates/VC/Windows Desktop/ConsoleApplication/ConsoleApplication.vcxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<PropertyGroup Label="Globals">
44
<CppWinRTOptimized>true</CppWinRTOptimized>
55
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
6+
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
67
<MinimalCoreWin>true</MinimalCoreWin>
78
<VCProjectVersion>15.0</VCProjectVersion>
89
<ProjectGuid>{$guid1$}</ProjectGuid>

vsix/ProjectTemplates/VC/Windows Desktop/WindowsApplication/WindowsApplication.vcxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<PropertyGroup Label="Globals">
44
<CppWinRTOptimized>true</CppWinRTOptimized>
55
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
6+
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
67
<MinimalCoreWin>true</MinimalCoreWin>
78
<VCProjectVersion>15.0</VCProjectVersion>
89
<ProjectGuid>{$guid1$}</ProjectGuid>

vsix/ProjectTemplates/VC/Windows Universal/BlankApp/BlankApp.vcxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<PropertyGroup Label="Globals">
44
<CppWinRTOptimized>true</CppWinRTOptimized>
55
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
6+
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
67
<MinimalCoreWin>true</MinimalCoreWin>
78
<ProjectGuid>{$guid1$}</ProjectGuid>
89
<ProjectName>$projectname$</ProjectName>

0 commit comments

Comments
 (0)