Unpack dotnet sdk zipfile and add documentation file to nupkg
[platform/core/dotnet/build-tools.git] / dotnet / sdk / 2.0.0-preview1-005700 / Sdks / Microsoft.NET.Sdk / build / Microsoft.NET.ComposeCache.targets
1 <!--\r
2 ***********************************************************************************************\r
3 Microsoft.NET.ComposeCache.targets\r
4 \r
5 WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have\r
6           created a backup copy.  Incorrect changes to this file will make it\r
7           impossible to load or build your projects from the command-line or the IDE.\r
8 \r
9 Copyright (c) .NET Foundation. All rights reserved. \r
10 ***********************************************************************************************\r
11 -->\r
12 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
13 \r
14   <!--\r
15     ============================================================\r
16                                         ComposeCache\r
17  \r
18     The main cache entry point.\r
19     ============================================================\r
20     -->\r
21   <PropertyGroup>\r
22     <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\r
23   </PropertyGroup>\r
24 \r
25   <Target Name="ComposeCache"\r
26           DependsOnTargets="PrepareForComposeCache;\r
27                             PrepOptimizer;\r
28                             CacheWorkerMain;\r
29                             _CopyResolvedUnOptimizedFiles;\r
30                             CacheFinalizer;"/>\r
31 \r
32   <!--\r
33     ============================================================\r
34                                         CacheWorkerMain\r
35 \r
36    Processes the cache project files\r
37     ============================================================\r
38     -->\r
39   \r
40   <Target Name="CacheWorkerMain">\r
41     \r
42     <ItemGroup>\r
43       <_AllProjects Include="$(AdditionalProjects.Split('%3B'))"/>\r
44       <_AllProjects Include ="$(MSBuildProjectFullPath)"/>\r
45     </ItemGroup>\r
46 \r
47     <MSBuild Projects="%(_AllProjects.Identity)"\r
48                  Targets="CacheWorkerMapper"\r
49                  BuildinParallel="$(BuildinParallel)"\r
50                  Properties="ComposeWorkingDir=$(ComposeWorkingDir);\r
51                              PublishDir=$(PublishDir);\r
52                              CacheStagingDir=$(CacheStagingDir);\r
53                              TargetFramework=$(_TFM);\r
54                              JitPath=$(JitPath);\r
55                              Crossgen=$(Crossgen);\r
56                              RestoreProj=$(RestoreProj);\r
57                              DisableImplicitFrameworkReferences=true;\r
58                              SkipUnchangedFiles=$(SkipUnchangedFiles);\r
59                              PreserveCacheLayout=$(PreserveCacheLayout)"\r
60                  ContinueOnError="WarnAndContinue">\r
61       <Output ItemName="AllResolvedPackagesPublished" TaskParameter="TargetOutputs" />\r
62     </MSBuild>\r
63   </Target>\r
64   <!--\r
65     ============================================================\r
66                                         CacheWorkerMapper\r
67 \r
68    Processes each package specified in a cache project file\r
69     ============================================================\r
70     -->\r
71 \r
72   <Target Name="CacheWorkerMapper"\r
73           Returns ="@(ResolvedPackagesFromMapper)">\r
74 \r
75     <ItemGroup>\r
76       <PackageReferencesToCache Include="$(RestoreProj)">\r
77         <Properties>\r
78           CachePackageName=%(PackageReference.Identity);\r
79           CachePackageVersion=%(PackageReference.Version);\r
80           ComposeWorkingDir=$(ComposeWorkingDir);\r
81           PublishDir=$(PublishDir);\r
82           CacheStagingDir=$(CacheStagingDir);\r
83           TargetFramework=$(TargetFramework);\r
84           JitPath=$(JitPath);\r
85           Crossgen=$(Crossgen);\r
86           SkipUnchangedFiles=$(SkipUnchangedFiles);\r
87           PreserveCacheLayout=$(PreserveCacheLayout)\r
88         </Properties>\r
89       </PackageReferencesToCache>\r
90     </ItemGroup>\r
91 \r
92     <MSBuild Projects="@(PackageReferencesToCache)"\r
93                  Targets="CacheWorker"\r
94                  BuildInParallel="$(BuildInParallel)"\r
95                  ContinueOnError="WarnAndContinue">\r
96       <Output ItemName="ResolvedPackagesFromMapper" TaskParameter="TargetOutputs" />\r
97     </MSBuild>\r
98   </Target>\r
99 \r
100   <Target Name="CacheWorker"\r
101           Returns="@(ResolvedPackagesPublished)"\r
102           DependsOnTargets="PrepforRestoreForComposeCache;\r
103                             CacheWorkerPerformWork"/>\r
104   \r
105   <Target Name="CacheWorkerPerformWork"\r
106           DependsOnTargets="RestoreForComposeCache;\r
107                             ComputeAndCopyFilesToCacheDirectory;"\r
108           Condition="!Exists($(CacheWorkerWorkingDir))" />\r
109 \r
110 <!--\r
111     ============================================================\r
112                                         CacheFinalizer\r
113 \r
114    Cleans up and produces artifacts after completion of cache\r
115     ============================================================\r
116     -->\r
117   <UsingTask TaskName="RemoveDuplicatePackageReferences" AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />\r
118   <Target Name="CacheFinalizer"\r
119           DependsOnTargets="CacheWorkerMain;\r
120                             _CopyResolvedOptimizedFiles">\r
121 \r
122     <RemoveDuplicatePackageReferences\r
123          InputPackageReferences="@(AllResolvedPackagesPublished)">\r
124       <Output TaskParameter="UniquePackageReferences"  ItemName="AllResolvedPackagesPublishedAfterFilter"/>\r
125     </RemoveDuplicatePackageReferences>\r
126     \r
127     <ItemGroup>\r
128       <ListOfPackageReference Include="@(AllResolvedPackagesPublishedAfterFilter -> '%20%20%20&lt;Package Id=&quot;%(Identity)&quot;  Version =&quot;%(Version)&quot;/&gt;')"/>\r
129     </ItemGroup>\r
130     <PropertyGroup>\r
131      <_CacheArtifactContent>\r
132       <![CDATA[\r
133 <CacheArtifacts>\r
134 @(ListOfPackageReference)\r
135 </CacheArtifacts>\r
136 ]]>\r
137        </_CacheArtifactContent>\r
138       </PropertyGroup>\r
139     <WriteLinesToFile\r
140              File="$(CacheArtifactXml)"\r
141              Lines="$(_CacheArtifactContent)"\r
142              Overwrite="true" />\r
143 \r
144     <Message Text="Files were composed in $(PublishDir)"\r
145                  Importance="high"/>\r
146     <Message Text="The list of packages cached is in $(CacheArtifactXml) "\r
147                  Importance="high"/>\r
148     <RemoveDir\r
149         Condition="'$(PreserveComposeWorkingDir)' != 'true'"\r
150         Directories="$(ComposeWorkingDir)"\r
151         ContinueOnError="WarnAndContinue"/>\r
152   </Target>\r
153 \r
154   <!--\r
155     ============================================================\r
156                                         _CopyResolvedUnOptimizedFiles\r
157 \r
158     Copy OptimizedResolvedFileToPublish items to the publish directory.\r
159     ============================================================\r
160     -->\r
161 \r
162   <Target Name="_CopyResolvedOptimizedFiles"\r
163           DependsOnTargets="CacheWorkerMain;">\r
164     <ItemGroup>\r
165       <_OptimizedResolvedFileToPublish Include="$(CacheStagingDir)\**\*.*" />\r
166     </ItemGroup>\r
167 \r
168     <Copy SourceFiles = "@(_OptimizedResolvedFileToPublish)"\r
169           DestinationFolder="$(PublishDir)%(RecursiveDir)"\r
170           OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"\r
171           Retries="$(CopyRetryCount)"\r
172           RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"\r
173           Condition ="'@(_OptimizedResolvedFileToPublish)' != ''"\r
174           SkipUnchangedFiles="$(SkipUnchangedFiles)">\r
175 \r
176       <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>\r
177 \r
178     </Copy>\r
179   </Target>\r
180   \r
181   <!--\r
182     ============================================================\r
183                                         PrepareForComposeCache\r
184 \r
185     Prepare the prerequisites for ComposeCache.\r
186     ============================================================\r
187     -->\r
188   \r
189   <Target Name="PrepareForComposeCache">\r
190 \r
191     <PropertyGroup>\r
192       <PreserveCacheLayout Condition="'$(PreserveCacheLayout)' == ''">true</PreserveCacheLayout>\r
193       <SkipOptimization Condition="'$(RuntimeIdentifier)' == ''">true</SkipOptimization>\r
194       <_TFM Condition="'$(_TFM)' == ''">$(TargetFramework)</_TFM>\r
195       <SkipUnchangedFiles Condition="'$(SkipUnchangedFiles)' == ''">true</SkipUnchangedFiles>\r
196     </PropertyGroup>\r
197 \r
198     <NETSdkError Condition="'$(RuntimeIdentifier)' =='' and '$(_PureManagedAssets)' == ''"\r
199                  ResourceName="RuntimeIdentifierWasNotSpecified"/>\r
200 \r
201     <NETSdkError Condition="'$(_TFM)' ==''"\r
202                  ResourceName="AtLeastOneTargetFrameworkMustBeSpecified"/>\r
203       \r
204     <PropertyGroup>\r
205       <DefaultComposeDir>$(HOME)</DefaultComposeDir>\r
206       <DefaultComposeDir Condition="'$(OS)' == 'Windows_NT'">$(USERPROFILE)</DefaultComposeDir>\r
207       <DefaultComposeDir>$([System.IO.Path]::Combine($(DefaultComposeDir), '.dotnet', $(PlatformTarget), 'packages'))</DefaultComposeDir>\r
208       <ComposeDir Condition="'$(ComposeDir)' != '' and '$(DoNotDecorateComposeDir)' != 'true'">$([System.IO.Path]::Combine($(ComposeDir), $(PlatformTarget)))</ComposeDir>\r
209       <ComposeDir Condition="'$(ComposeDir)' == ''">$(DefaultComposeDir)</ComposeDir>\r
210       <ComposeDir Condition="'$(DoNotDecorateComposeDir)' != 'true'">$([System.IO.Path]::Combine($(ComposeDir), $(_TFM)))</ComposeDir>\r
211       <CacheArtifactXml>$([System.IO.Path]::Combine($(ComposeDir),"artifact.xml"))</CacheArtifactXml>\r
212       <PublishDir>$([System.IO.Path]::GetFullPath($(ComposeDir)))</PublishDir>\r
213       <_RandomFileName>$([System.IO.Path]::GetRandomFileName())</_RandomFileName>\r
214       <TEMP Condition="'$(TEMP)' == ''">$([System.IO.Path]::GetTempPath())</TEMP>\r
215       <ComposeWorkingDir Condition="'$(ComposeWorkingDir)' == ''">$([System.IO.Path]::Combine($(TEMP), $(_RandomFileName)))</ComposeWorkingDir>\r
216       <ComposeWorkingDir>$([System.IO.Path]::GetFullPath($(ComposeWorkingDir)))</ComposeWorkingDir>\r
217       <CacheStagingDir>$([System.IO.Path]::Combine($(ComposeWorkingDir),"StagingDir"))</CacheStagingDir>      <!-- Will contain  optimized managed assemblies in nuget cache layout -->\r
218       <RestoreProj>$([System.IO.Path]::Combine($(ComposeWorkingDir),"Restore.csproj"))</RestoreProj>          <!-- To minimize parsing huge input files during restore stage for packages -->\r
219       <!-- Ensure any PublishDir has a trailing slash, so it can be concatenated -->\r
220       <PublishDir Condition="!HasTrailingSlash('$(PublishDir)')">$(PublishDir)\</PublishDir>\r
221     </PropertyGroup>\r
222 \r
223 \r
224     <NETSdkError Condition="Exists($(ComposeWorkingDir))"\r
225                  ResourceName="FolderAlreadyExists"\r
226                  FormatArguments="$(ComposeWorkingDir)" />\r
227 \r
228     <MakeDir Directories="$(PublishDir)" />\r
229     <MakeDir  Directories="$(CacheStagingDir)"/>\r
230 \r
231     <!-- Create a Project to be used for restores-->\r
232     <PropertyGroup>\r
233       <RestoreProjContent>\r
234         <![CDATA[\r
235 <Project Sdk="Microsoft.NET.Sdk">\r
236 </Project>\r
237 \r
238 ]]>\r
239       </RestoreProjContent>\r
240     </PropertyGroup>\r
241 \r
242     <WriteLinesToFile\r
243         File="$(RestoreProj)"\r
244         Lines="$(RestoreProjContent)"\r
245         Overwrite="true" />\r
246   </Target>\r
247 \r
248   <Target Name="PrepforRestoreForComposeCache">\r
249 \r
250     <PropertyGroup>\r
251       <CachePackageVersion>$(CachePackageVersion.Replace('*','-'))</CachePackageVersion>\r
252       <CacheWorkerWorkingDir>$([System.IO.Path]::Combine($(ComposeWorkingDir),"$(CachePackageName)_$(CachePackageVersion)"))</CacheWorkerWorkingDir>\r
253       <_PackageProjFile>$([System.IO.Path]::Combine($(CacheWorkerWorkingDir), "Package.csproj"))</_PackageProjFile>\r
254       <ProjectAssetsFile>$(CacheWorkerWorkingDir)\project.assets.json</ProjectAssetsFile>\r
255       <_PackageProjContent>\r
256         <![CDATA[\r
257 <Project Sdk="Microsoft.NET.Sdk">\r
258   <ItemGroup>\r
259     <PackageReference Include="$(CachePackageName)"  Version ="$(CachePackageVersion)"/>\r
260   </ItemGroup>\r
261 </Project>    \r
262 ]]>\r
263       </_PackageProjContent>\r
264     </PropertyGroup>\r
265     \r
266   </Target>\r
267   \r
268   <!--\r
269     ============================================================\r
270                                         RestoreForComposeCache\r
271 \r
272     Restores the package\r
273     ============================================================\r
274     -->\r
275   \r
276   <Target Name="RestoreForComposeCache"\r
277           DependsOnTargets="PrepforRestoreForComposeCache;">\r
278     \r
279     <MakeDir Directories="$(CacheWorkerWorkingDir)" />\r
280     \r
281     <!-- Create a Project to Restore Package -->\r
282     <WriteLinesToFile\r
283             File="$(_PackageProjFile)"\r
284             Lines="$(_PackageProjContent)"\r
285             Overwrite="true" />\r
286     \r
287     <MSBuild Projects="$(_PackageProjFile)"\r
288                  Targets="Restore"\r
289                  Properties="RestoreGraphProjectInput=$(_PackageProjFile);\r
290                              DisableImplicitFrameworkReferences=true;\r
291                              RestoreOutputPath=$(CacheWorkerWorkingDir);\r
292                              TargetFramework=$(TargetFramework);"/>\r
293   </Target>\r
294 \r
295   <!--\r
296     ============================================================\r
297                                         ComputeAndCopyFilesToCacheDirectory\r
298 \r
299     Computes the list of all files to copy to the publish directory and then publishes them.\r
300     ============================================================\r
301     -->\r
302   \r
303   <Target Name="ComputeAndCopyFilesToCacheDirectory"\r
304           DependsOnTargets="ComputeFilesToCache;\r
305                             CopyFilesToCacheDirectory" />\r
306 \r
307   <!--\r
308     ============================================================\r
309                                         CopyFilesToCacheDirectory\r
310 \r
311     Copy all build outputs, satellites and other necessary files to the publish directory.\r
312     ============================================================\r
313     -->\r
314   \r
315   <Target Name="CopyFilesToCacheDirectory"\r
316           DependsOnTargets="_CopyResolvedUnOptimizedFiles"/>\r
317   \r
318   \r
319   <!--\r
320     ============================================================\r
321                                         _CopyResolvedUnOptimizedFiles\r
322 \r
323     Copy _UnOptimizedResolvedFileToPublish items to the publish directory.\r
324     ============================================================\r
325     -->\r
326   \r
327   <Target Name="_CopyResolvedUnOptimizedFiles"\r
328           DependsOnTargets="_ComputeResolvedFilesToCacheTypes;\r
329                             _RunOptimizer">\r
330 \r
331     <Copy SourceFiles = "@(_UnOptimizedResolvedFileToPublish)"\r
332           DestinationFiles="$(PublishDir)%(_UnOptimizedResolvedFileToPublish.DestinationSubPath)"\r
333           OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"\r
334           Retries="$(CopyRetryCount)"\r
335           RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"\r
336           SkipUnchangedFiles="$(SkipUnchangedFiles)">\r
337 \r
338       <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>\r
339 \r
340     </Copy>\r
341   </Target>\r
342 \r
343   <!--\r
344     ============================================================\r
345                                         _ComputeResolvedFilesToCacheTypes\r
346     ============================================================\r
347     -->\r
348   \r
349   <Target Name="_ComputeResolvedFilesToCacheTypes"\r
350            DependsOnTargets="_GetResolvedFilesToCache;_SplitResolvedFiles;" />\r
351 \r
352   <!--\r
353     ============================================================\r
354                                         _SplitResolvedFiles\r
355 \r
356     Splits ResolvedFileToPublish items into 'managed' and 'unmanaged' buckets.\r
357     ============================================================\r
358     -->\r
359   \r
360   <Target Name="_SplitResolvedFiles"\r
361            Condition="$(SkipOptimization) !='true' "\r
362            DependsOnTargets="_GetResolvedFilesToCache">\r
363     <ItemGroup>\r
364       <_ManagedResolvedFileToPublishCandidates Include="@(ResolvedFileToPublish)"\r
365                                              Condition="'%(ResolvedFileToPublish.AssetType)'=='runtime'" />\r
366 \r
367       <_UnOptimizedResolvedFileToPublish Include="@(ResolvedFileToPublish)"\r
368                                      Condition="'%(ResolvedFileToPublish.AssetType)'!='runtime'" />\r
369     </ItemGroup>\r
370 \r
371     <PropertyGroup>\r
372       <SkipOptimization Condition="'@(_ManagedResolvedFileToPublishCandidates)'==''">true</SkipOptimization>\r
373     </PropertyGroup>\r
374   </Target>\r
375 \r
376   <!--\r
377     ============================================================\r
378                                         _GetResolvedFilesToCache\r
379     ============================================================\r
380     -->\r
381   \r
382   <Target Name="_GetResolvedFilesToCache"\r
383            Condition="$(SkipOptimization) == 'true' ">\r
384     <ItemGroup>\r
385             <_UnOptimizedResolvedFileToPublish Include="@(ResolvedFileToPublish)" />\r
386     </ItemGroup>\r
387   </Target>\r
388 \r
389   <!--\r
390     ============================================================\r
391                                         ComputeFilesToCache\r
392 \r
393     Gathers all the files that need to be copied to the publish directory.\r
394     ============================================================\r
395     -->\r
396   \r
397   <Target Name="ComputeFilesToCache"\r
398           DependsOnTargets="_ComputeNetPublishAssets;\r
399                             _ComputeCopyToPublishDirectoryItems">\r
400 \r
401     <PropertyGroup>\r
402       <CopyBuildOutputToPublishDirectory Condition="'$(CopyBuildOutputToPublishDirectory)'==''">true</CopyBuildOutputToPublishDirectory>\r
403       <CopyOutputSymbolsToPublishDirectory Condition="'$(CopyOutputSymbolsToPublishDirectory)'==''">true</CopyOutputSymbolsToPublishDirectory>\r
404     </PropertyGroup>\r
405 \r
406     <ItemGroup>\r
407 \r
408       <!-- Copy all the assemblies -->\r
409       <ResolvedFileToPublish Include="@(ResolvedAssembliesToPublish)">\r
410       </ResolvedFileToPublish>\r
411     </ItemGroup>\r
412   </Target>\r
413 \r
414 </Project>\r