-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCopyFile.targets
100 lines (86 loc) · 4.44 KB
/
CopyFile.targets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<!--
The CopyFile.targets can be used to copy files.
Input parameters:
- @(CopyFile)
- %(TargetDir) - default to OutDir
- %(TargetFile) - default to source file
-->
<Project>
<PropertyGroup>
<CopyFileTargetsImported>true</CopyFileTargetsImported>
</PropertyGroup>
<!-- Define copy files default metadata -->
<ItemDefinitionGroup>
<CopyFile>
<TargetFile>%(FileName)%(Extension)</TargetFile>
<TargetDir>$(OutDir)</TargetDir>
<RedistFolder>$(RedistFolder)</RedistFolder>
</CopyFile>
</ItemDefinitionGroup>
<Target Name="CopyFileInit">
<Message Condition="'$(ZouDebug)' == 'true'" Importance="high" Text="### [$(MSBuildProjectFile)] CopyFileInit" />
<ItemGroup>
<CopyFile>
<!--
Do not create the default for 'TargetFile' in an 'ItemDefinitionGroup' as it does not work in linux with platform x86
-->
<TargetFile Condition="'%(CopyFile.TargetFile)' == ''">%(FileName)%(Extension)</TargetFile>
<BundleRelativeSrcDir>$([MSBuild]::MakeRelative('$(BundleDir)', '%(RootDir)%(Directory)'))</BundleRelativeSrcDir>
<BundleRelativeDstDir>$([MSBuild]::MakeRelative('$(BundleDir)', '%(TargetDir)'))</BundleRelativeDstDir>
<!--
The 'MulJoin' task used in the 'CopyFileCrossBuild' target does not copy builtin metadata like 'RecursiveDir'
The trick here is to create a custom metadata named 'RecursiveFolder' and to use it
-->
<RecursiveFolder>%(CopyFile.RecursiveDir)</RecursiveFolder>
</CopyFile>
</ItemGroup>
<!--<LogItems Items="@(CopyFile)" Title="CopyFileInit.CopyFile" AllMetadata="false" />
<Message Importance="high" Text=" " />-->
</Target>
<Target Name="CopyFileCrossBuild" DependsOnTargets="CopyFileInit" Condition="'@(RuntimeOs)' != ''">
<Message Condition="'$(ZouDebug)' == 'true'" Importance="high" Text="### [$(MSBuildProjectFile)] CopyFileCrossBuild(CrossBuild=$(CrossBuild))" />
<!-- CopyFile x RuntimeOs (defined in Boot.Runtime.props ) -->
<MulJoin Input="@(CopyFile)" Items="@(RuntimeOs)" ItemName="RuntimeOs" >
<Output TaskParameter="Output" ItemName="_CopyFile" />
</MulJoin>
<ItemGroup>
<CopyFile Remove="@(CopyFile)" />
<CopyFile Include="@(_CopyFile)" />
<_CopyFile Remove="@(_CopyFile)" />
</ItemGroup>
<!--<LogItems Items="@(CopyFile)" Title="CopyFileCrossBuild.CopyFile" />
<Message Importance="high" Text=" " />-->
</Target>
<Target Name="CopyFileClean" AfterTargets="Clean" DependsOnTargets="CopyFileCrossBuild">
<Message Condition="'$(ZouDebug)' == 'true'" Importance="high" Text="### [$(MSBuildProjectFile)] CopyFileClean(@(CopyFile->Count()), @(CopyFile))" />
<!-- Display deleted files by extension -->
<ItemGroup>
<_Message Include="$(T3)%(CopyFile.TargetDir)%(RecursiveFolder)%2A%(Extension)" Condition="Exists('%(CopyFile.TargetDir)%(RecursiveFolder)%(FileName)%(Extension)')" />
</ItemGroup>
<RemoveDuplicates Inputs="@(_Message)">
<Output TaskParameter="Filtered" ItemName="_Message"/>
</RemoveDuplicates>
<Message Condition="@(_Message->Count()) > 0" Importance="high" Text="$(L2m)[-] %(_Message.Identity)$(XC)" />
<ItemGroup>
<_Message Remove="@(_Message)" />
</ItemGroup>
<Delete Files="@(CopyFile->'%(TargetDir)%(RecursiveFolder)%(TargetFile)')" />
</Target>
<Target Name="CopyFile" Inputs="@(CopyFile.Identity)" Outputs="@(CopyFile->'%(TargetDir)%(RecursiveFolder)%(TargetFile)')" BeforeTargets="Build" DependsOnTargets="CopyFileCrossBuild;CopyFileInit">
<Message Condition="'$(ZouDebug)' == 'true'" Importance="high" Text="### [$(MSBuildProjectFile)] CopyFile" />
<!--<LogItems Items="@(CopyFile)" Title="CopyFile.CopyFile" AllMetadata="false" />
<Message Importance="high" Text=" " />-->
<Copy SourceFiles="@(CopyFile)" DestinationFiles="@(CopyFile->'%(TargetDir)%(RecursiveFolder)%(TargetFile)')" ContinueOnError="true" />
<!-- Display file copy by extension -->
<ItemGroup>
<_Message Include="@(CopyFile->'$(T3)%(BundleRelativeSrcDir)%(RecursiveFolder)%2A%(Extension) -> %(BundleRelativeDstDir)$(T3)%(RecursiveFolder)%2A%(Extension)')" />
</ItemGroup>
<RemoveDuplicates Inputs="@(_Message)">
<Output TaskParameter="Filtered" ItemName="_Message"/>
</RemoveDuplicates>
<Message Importance="high" Text="$(L2p)[+] %(_Message.Identity)$(XC)" />
<ItemGroup>
<_Message Remove="@(_Message')" />
</ItemGroup>
</Target>
</Project>