* xbuild/Microsoft.Common.targets (_RecordCleanFile): Append list of
[mono.git] / mcs / tools / xbuild / xbuild / Microsoft.Common.targets
index 0fc3faed53f46e0c23f5f03e5f7e0d4eb81ea7a1..e71e08c3045422ce24f7926607f8b1087d247200 100644 (file)
        <!-- Clean -->
        <Target Name="_RecordCleanFile"
                DependsOnTargets="_GetCompileOutputsForClean">
+
+               <!-- add to list of previous writes for this platform/config -->
+
+               <ReadLinesFromFile File="$(IntermediateOutputPath)$(CleanFile)">
+                       <Output TaskParameter="Lines" ItemName="PreviousFileWrites"/>
+               </ReadLinesFromFile>
+
+               <RemoveDuplicates Inputs="@(PreviousFileWrites);@(FileWrites->'%(FullPath)')">
+                       <Output TaskParameter="Filtered" ItemName="CombinedFileWrites"/>
+               </RemoveDuplicates>
+
                <WriteLinesToFile
                        File="$(IntermediateOutputPath)$(CleanFile)"
-                       Lines="@(FileWrites->'%(FullPath)')"
+                       Lines="@(CombinedFileWrites)"
                        Overwrite="true"/>
        </Target>
 
        </PropertyGroup>
 
        <Target Name="_GetCompileOutputsForClean">
+               <!-- assembly and debug file in the *intermediate output path* -->
                <CreateItem Include="@(IntermediateAssembly)" Condition="Exists('@(IntermediateAssembly)')">
                        <Output TaskParameter="Include" ItemName="FileWrites"/>
                </CreateItem>
        <Target Name="_GetCleanFileWrites"
                DependsOnTargets="_GetCompileOutputsForClean">
                <ReadLinesFromFile File="$(IntermediateOutputPath)$(CleanFile)">
-                       <Output TaskParameter="Lines" ItemName="FileWrites"/>
+                       <Output TaskParameter="Lines" ItemName="PreviousFileWrites"/>
                </ReadLinesFromFile>
        </Target>
 
        <Target Name="AfterClean" />
 
        <Target Name="CoreClean" DependsOnTargets="_GetCleanFileWrites">
-               <Delete Files="@(FileWrites)" TreatErrorsAsWarnings="true"/>
+               <Delete Files="@(PreviousFileWrites);@(FileWrites)" TreatErrorsAsWarnings="true"/>
+
+               <!-- all previous files written for this platform/config have been deleted,
+                    we can safely remove the file list now -->
+               <Delete Files="$(IntermediateOutputPath)$(CleanFile)" TreatErrorsAsWarnings="true" />
        </Target>
 
 </Project>