<Target Name="CoreClean"
DependsOnTargets="$(CoreCleanDependsOn)"
Condition=" '$(SkipClean)'!='true' ">
<!-- Clean for desktop build -->
<MSBuild
Condition="'$(IsDesktopBuild)'=='true'"
Projects="$(MSBuildProjectFile)"
Targets="RunCoreCleanWithConfiguration"
Properties="RunCodeAnalysis=$(RunCodeAnalysis); BinariesRoot=$(BinariesRoot);FxCopDir=$(FxCopDir);Platform=%(ConfigurationToBuild.PlatformToBuild);Flavor=%(ConfigurationToBuild.FlavorToBuild); " />
<!-- Clean SolutionRoot only for end to end build -->
<RemoveDir
Condition="Exists('$(SolutionRoot)') and '$(IsDesktopBuild)'!='true'"
Directories="$(SolutionRoot)" />
<RemoveDir
Condition="Exists('$(BinariesRoot)') and '$(IsDesktopBuild)'!='true'"
Directories="$(BinariesRoot)" />
<RemoveDir
Condition="Exists('$(TestResultsRoot)') and '$(IsDesktopBuild)'!='true'"
Directories="$(TestResultsRoot)" />
</Target>
<Target Name="RunCoreCleanWithConfiguration" >
<!-- OutDirForClean for not Any CPU -->
<CreateItem
Condition=" '$(Platform)'!='Any CPU' "
Include="$(BinariesRoot)\$(Platform)\$(Flavor)\" >
<Output TaskParameter="Include" ItemName="OutDirForClean" />
</CreateItem>
<!-- OutDirForClean for Any CPU -->
<CreateItem
Condition=" '$(Platform)'=='Any CPU' "
Include="$(BinariesRoot)\$(Flavor)\" >
<Output TaskParameter="Include" ItemName="OutDirForClean" />
</CreateItem>
<!-- OutDir - to ensure we have absolute path as property -->
<CreateProperty Value="%(OutDirForClean.FullPath)" >
<Output TaskParameter="Value" PropertyName="OutDir" />
</CreateProperty>
<!-- Call MSBuild /t:Clean for desktop build -->
<MSBuild
Projects="@(SolutionToBuild)"
Properties="Configuration=$(Flavor);Platform=$(Platform);RunCodeAnalysis=$(RunCodeAnalysis);SkipInvalidConfigurations=true;FxCopDir=$(FxCopDir);OutDir=$(OutDir)%(SolutionToBuild.OutputFolder)\"
Targets="Clean" />
</Target>
<Target Name="CoreCompile"
DependsOnTargets="$(CoreCompileDependsOn)">
<MakeDir
Directories="$(BinariesRoot)"
Condition="!Exists('$(BinariesRoot)')" />
<TeamBuildMessage
Tag="Configuration"
Condition=" '$(IsDesktopBuild)'!='true' "
Value="%(ConfigurationToBuild.FlavorToBuild)" />
<TeamBuildMessage
Tag="Platform"
Condition=" '$(IsDesktopBuild)'!='true' "
Value="%(ConfigurationToBuild.PlatformToBuild)" />
<!-- Need proper location of build type otherwise logger fail (file not in enlistment)-->
<MSBuild
Condition="'$(IsDesktopBuild)'!='true' "
Projects="$(SolutionRoot)\TeamBuildTypes\$(BuildType)\TfsBuild.proj"
Targets="RunCoreCompileWithConfiguration"
Properties="Platform=%(ConfigurationToBuild.PlatformToBuild);Flavor=%(ConfigurationToBuild.FlavorToBuild);RunCodeAnalysis=$(RunCodeAnalysis);BinariesRoot=$(BinariesRoot);FxCopDir=$(FxCopDir);TeamBuildConstants=$(TeamBuildConstants);SolutionRoot=$(SolutionRoot)" />
<!-- Destop build, need this because $(Buildtype) not defined in desktop scenario-->
<MSBuild
Condition="'$(IsDesktopBuild)'=='true' "
Projects="$(MSBuildProjectFile)"
Targets="RunCoreCompileWithConfiguration"
Properties="Platform=%(ConfigurationToBuild.PlatformToBuild);Flavor=%(ConfigurationToBuild.FlavorToBuild);RunCodeAnalysis=$(RunCodeAnalysis);BinariesRoot=$(BinariesRoot);FxCopDir=$(FxCopDir);TeamBuildConstants=$(TeamBuildConstants);SolutionRoot=$(SolutionRoot)" />
<OnError ExecuteTargets="OnBuildBreak;" />
</Target>
<Target Name="RunCoreCompileWithConfiguration" >
<!-- OutDirForCompile for not Any CPU -->
<CreateItem
Condition=" '$(Platform)'!='Any CPU' "
Include="$(BinariesRoot)\$(Platform)\$(Flavor)\" >
<Output TaskParameter="Include" ItemName="OutDirForCompile" />
</CreateItem>
<!-- OutDirForCompile for Any CPU -->
<CreateItem
Condition=" '$(Platform)'=='Any CPU' "
Include="$(BinariesRoot)\$(Flavor)\" >
<Output TaskParameter="Include" ItemName="OutDirForCompile" />
</CreateItem>
<!-- OutDir property - This is to ensure we have absolute path as property -->
<CreateProperty Value="%(OutDirForCompile.FullPath)" >
<Output TaskParameter="Value" PropertyName="OutDir" />
</CreateProperty>
<!-- First part of VCOverride file -->
<CreateProperty Value="%3C?xml version=%221.0%22?%3E%0D%0A%3CVisualStudioPropertySheet ProjectType=%22Visual C++%22 Version=%228.00%22 Name=%22Team Build Overrides%22 OutputDirectory=%22$(OutDir)%22%3E%0D%0A" >
<Output TaskParameter="Value"
PropertyName="VCOverridesString1"/>
</CreateProperty>
<!-- Third part of VCOverride file -->
<CreateProperty Value="%3C/VisualStudioPropertySheet%3E" >
<Output TaskParameter="Value"
PropertyName="VCOverridesString3"/>
</CreateProperty>
<!-- RunCodeAnalysis option -->
<CreateProperty
Condition=" '$(RunCodeAnalysis)'=='Always' "
Value="RunCodeAnalysis=true" >
<Output TaskParameter="Value"
PropertyName="CodeAnalysisOption" />
</CreateProperty>
<!— 2nd part of VCOverride file when RunCodeAnalysis is always -->
<CreateProperty
Condition=" '$(RunCodeAnalysis)'=='Always' "
Value="%09%3CTool Name=%22VCCLCompilerTool%22 EnablePREfast=%22true%22 /%3E%0D%0A%09%3CTool Name=%22VCFxCopTool%22 EnableFxCop=%22true%22 /%3E%0D%0A" >
<Output TaskParameter="Value"
PropertyName="VCOverridesString2"/>
</CreateProperty>
<CreateProperty
Condition=" '$(RunCodeAnalysis)'=='Never' "
Value="RunCodeAnalysis=false" >
<Output TaskParameter="Value"
PropertyName="CodeAnalysisOption" />
</CreateProperty>
<!-- Second part of VCOverride file when RunCodeAnalysis is never -->
<CreateProperty
Condition=" '$(RunCodeAnalysis)'=='Never' "
Value="%09%3CTool Name=%22VCCLCompilerTool%22 EnablePREfast=%22false%22 /%3E%0D%0A%09%3CTool Name=%22VCFxCopTool%22 EnableFxCop=%22false%22 /%3E%0D%0A" >
<Output TaskParameter="Value"
PropertyName="VCOverridesString2"/>
</CreateProperty>
<!-- ReferencePath option -->
<CreateProperty
Condition=" '@(AdditionalReferencePath)'!='' "
Value="$(OutDir);@(AdditionalReferencePath)" >
<Output TaskParameter="Value" PropertyName="ReferencePath" />
</CreateProperty>
<CreateProperty
Condition=" '@(AdditionalReferencePath)'=='' "
Value="$(OutDir)" >
<Output TaskParameter="Value" PropertyName="ReferencePath" />
</CreateProperty>
<!-- Generate VCOverride file for C++ projects -->
<WriteLinesToFile
File="TFSBuild.vsprops"
Lines="$(VCOverridesString1)$(VCOverridesString2)$(AdditionalVCOverrides)$(VCOverridesString3)"
Overwrite="true" />
<!-- Build using MSBuild task -->
<MSBuild
Condition=" '@(SolutionToBuild)'!='' "
Projects="@(SolutionToBuild)"
Properties="Configuration=$(Flavor);Platform=$(Platform);SkipInvalidConfigurations=true;VCBuildOverride=$(MSBuildProjectDirectory)\TFSBuild.vsprops;FxCopDir=$(FxCopDir);OutDir=$(OutDir)%(SolutionToBuild.OutputFolder)\;ReferencePath=$(ReferencePath);TeamBuildConstants=$(TeamBuildConstants);$(CodeAnalysisOption)"
Targets="Build" />
<!-- Specify SolutionToPublish ItemGroup if you have ClickOnce based solutions or projects that you want to publish. The task below will generate manifest and deployment package. -->
<MSBuild
Condition=" '@(SolutionToPublish)'!='' "
Projects="@(SolutionToPublish)"
Properties="Configuration=$(Flavor);Platform=$(Platform);SkipInvalidConfigurations=true;VCBuildOverride=$(MSBuildProjectDirectory)\TFSBuild.vsprops;FxCopDir=$(FxCopDir);OutDir=$(OutDir)%(SolutionToPublish.OutputFolder)\;PublishDir=$(OutDir)%(SolutionToPublish.OutputFolder)\;ReferencePath=$(ReferencePath);TeamBuildConstants=$(TeamBuildConstants);$(CodeAnalysisOption)"
Targets="Publish" />
</Target>