1<?xml version="1.0" encoding="utf-8"?>
2<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3  <!-- Update AdditionalInputs with depfile-discovered inputs.  -->
4  <Target Name="CMakeCustomBuildDepFileAdditionalInputs" BeforeTargets="CustomBuild" Condition="'@(CustomBuild)' != ''">
5    <ItemGroup>
6      <!-- Save original AdditionalInputs generated by CMake.  -->
7      <CustomBuild>
8        <CMakeAdditionalInputs>%(CustomBuild.AdditionalInputs)</CMakeAdditionalInputs>
9      </CustomBuild>
10      <!-- Read depfile-discovered inputs.  -->
11      <CustomBuild Condition="Exists('%(CustomBuild.DepFileAdditionalInputsFile)')">
12        <DepFileAdditionalInputs>$([System.IO.File]::ReadAllText('%(CustomBuild.DepFileAdditionalInputsFile)').TrimEnd())</DepFileAdditionalInputs>
13      </CustomBuild>
14      <!-- Add depfile-discovered inputs to AdditionalInputs.  -->
15      <CustomBuild Condition="'%(CustomBuild.DepFileAdditionalInputs)' != ''">
16        <AdditionalInputs Condition="'%(CustomBuild.AdditionalInputs)' == ''">%(CustomBuild.DepFileAdditionalInputs)</AdditionalInputs>
17        <AdditionalInputs Condition="'%(CustomBuild.AdditionalInputs)' != ''">%(CustomBuild.AdditionalInputs);%(CustomBuild.DepFileAdditionalInputs)</AdditionalInputs>
18      </CustomBuild>
19    </ItemGroup>
20  </Target>
21
22  <!-- Update the tracking log with depfile-discovered inputs.  -->
23  <Target Name="CMakeCustomBuildDepFileTrackingLog" AfterTargets="CustomBuild" Condition="'@(CustomBuild)' != ''">
24    <!-- Compute the tracking log content for each CustomBuild item individually.  -->
25    <ItemGroup>
26      <!-- Read depfile-discovered inputs.  -->
27      <CustomBuild Condition="Exists('%(CustomBuild.DepFileAdditionalInputsFile)')">
28        <DepFileAdditionalInputs>$([System.IO.File]::ReadAllText('%(CustomBuild.DepFileAdditionalInputsFile)').TrimEnd())</DepFileAdditionalInputs>
29      </CustomBuild>
30      <!-- Generate tracking log representation of all inputs.  -->
31      <CustomBuild>
32        <ReadTLog>^%(CustomBuild.Identity)&#xD;&#xA;</ReadTLog>
33      </CustomBuild>
34      <CustomBuild Condition="'%(CustomBuild.CMakeAdditionalInputs)' != ''">
35        <ReadTLog>%(ReadTLog)$([System.String]::Copy('%(CustomBuild.CMakeAdditionalInputs)').Trim(';').Replace(';', '&#xD;&#xA;'))&#xD;&#xA;</ReadTLog>
36      </CustomBuild>
37      <CustomBuild Condition="'%(CustomBuild.DepFileAdditionalInputs)' != ''">
38        <ReadTLog>%(ReadTLog)$([System.String]::Copy('%(CustomBuild.DepFileAdditionalInputs)').Trim(';').Replace(';', '&#xD;&#xA;'))&#xD;&#xA;</ReadTLog>
39      </CustomBuild>
40    </ItemGroup>
41    <!-- Compute the combined tracking log for all CustomBuild items together.  -->
42    <PropertyGroup>
43      <CustomBuildReadTLog>@(CustomBuild->'%(ReadTLog)','')</CustomBuildReadTLog>
44    </PropertyGroup>
45    <!-- Replace the combined tracking log on disk.  -->
46    <WriteLinesToFile File="$(TLogLocation)CustomBuild.read.1.tlog" Overwrite="true" Lines="$(CustomBuildReadTLog.ToUpper())" />
47  </Target>
48</Project>
49