<Project DefaultTargets="BuildAll" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <ConfigurationCPP>Release (C++)</ConfigurationCPP>
    <ConfigurationCPPDebug>Debug (C++)</ConfigurationCPPDebug>
  </PropertyGroup>

  <!--Include all the project files that we want to build into the "CoreProjectsToBuild" item-->
  <ItemGroup>
    <CoreProjectsToBuild Include="..\MSCL\MSCL.vcxproj" />
  </ItemGroup>

  <ItemGroup>
    <UnitTestingProjectsToBuild Include="..\MSCL_Unit_Tests\MSCL_Unit_Tests.vcxproj" />
  </ItemGroup>

  <!--create the BuildAll Target which calls everything we want to do-->
  <PropertyGroup>
    <FullBuildTask>
    
      <!--Clean and build the core project in Release build-->
      CleanCore;                  
      BuildCore;
      CleanCore64;
      BuildCore64;
      
      <!--Clean and build the core project in Debug build-->
      CleanCoreDebug;
      BuildCoreDebug;
      CleanCore64Debug;
      BuildCore64Debug;
      
      <!--Clean and build the unit testing project in Release build, then run the generated unit test executable-->
      CleanUnitTesting;
      BuildUnitTesting;
      RunUnitTesting;
      
    </FullBuildTask>
  </PropertyGroup>
  <Target Name="BuildAll" DependsOnTargets="$(FullBuildTask)"/>


  <!--CLEAN CORE C++ PROJECT (x86) (Static Lib)-->
  <Target Name="CleanCore">
    <Message Text="=====================Cleaning the Core Project (x86) (Release)====================="/>
    <MSBuild Projects="@(CoreProjectsToBuild)"
             Targets="Clean"
             Properties="Configuration=$(ConfigurationCPP)">
    </MSBuild>
  </Target>
  
  <!--CLEAN CORE C++ PROJECT (x64) (Static Lib)-->
  <Target Name="CleanCore64">
    <Message Text="=====================Cleaning the Core Project (x64) (Release)====================="/>
    <MSBuild Projects="@(CoreProjectsToBuild)"
             Targets="Clean"
             Properties="Configuration=$(ConfigurationCPP);Platform=x64">
    </MSBuild>
  </Target>
  
  <!--CLEAN CORE C++ PROJECT (x86) in DEBUG (Static Lib)-->
  <Target Name="CleanCoreDebug">
    <Message Text="=====================Cleaning the Core Project (Debug)====================="/>
    <MSBuild Projects="@(CoreProjectsToBuild)"
             Targets="Clean"
             Properties="Configuration=$(ConfigurationCPPDebug)">
    </MSBuild>
  </Target>
  
  <!--CLEAN CORE C++ PROJECT (x64) in DEBUG (Static Lib)-->
  <Target Name="CleanCore64Debug">
    <Message Text="=====================Cleaning the Core Project (Debug)====================="/>
    <MSBuild Projects="@(CoreProjectsToBuild)"
             Targets="Clean"
             Properties="Configuration=$(ConfigurationCPPDebug);Platform=x64">
    </MSBuild>
  </Target>
  
  <!--CLEAN UNIT TESTING PROJECT-->
  <Target Name="CleanUnitTesting">
    <Message Text="=====================Cleaning the Unit Testing Projects====================="/>
    <MSBuild Projects="@(UnitTestingProjectsToBuild)"
             Targets="Clean"
             Properties="Configuration=$(ConfigurationCPP)">
    </MSBuild>
  </Target>
  
  
  
  <!--BUILD CORE C++ PROJECT (x86) (Static Lib)-->
  <Target Name="BuildCore">
    <Message Text="=====================Building the Core Project (Release)====================="/>
    <MSBuild Projects="@(CoreProjectsToBuild)"
             ContinueOnError="false"
             Properties="Configuration=$(ConfigurationCPP)">
      <Output ItemName="OutputFiles" TaskParameter="TargetOutputs"/>
    </MSBuild>
  </Target>
  
  <!--BUILD CORE C++ PROJECT (x64) (Static Lib)-->
  <Target Name="BuildCore64">
    <Message Text="=====================Building the Core Project (Release)====================="/>
    <MSBuild Projects="@(CoreProjectsToBuild)"
             ContinueOnError="false"
             Properties="Configuration=$(ConfigurationCPP);Platform=x64">
      <Output ItemName="OutputFiles" TaskParameter="TargetOutputs"/>
    </MSBuild>
  </Target>
  
  <!--BUILD CORE C++ PROJECT (x86) in Debug (Static Lib)-->
  <Target Name="BuildCoreDebug">
    <Message Text="=====================Building the Core Project (Debug)====================="/>
    <MSBuild Projects="@(CoreProjectsToBuild)"
             ContinueOnError="false"
             Properties="Configuration=$(ConfigurationCPPDebug)">
      <Output ItemName="OutputFiles" TaskParameter="TargetOutputs"/>
    </MSBuild>
  </Target>
  
  <!--BUILD CORE C++ PROJECT (x86) in Debug (Static Lib)-->
  <Target Name="BuildCore64Debug">
    <Message Text="=====================Building the Core Project (Debug)====================="/>
    <MSBuild Projects="@(CoreProjectsToBuild)"
             ContinueOnError="false"
             Properties="Configuration=$(ConfigurationCPPDebug);Platform=x64">
      <Output ItemName="OutputFiles" TaskParameter="TargetOutputs"/>
    </MSBuild>
  </Target>
  
  <!--BUILD UNIT TESTING PROJECT-->
  <Target Name="BuildUnitTesting">
    <Message Text="=====================Building the Unit Testing Project====================="/>
    <MSBuild Projects="@(UnitTestingProjectsToBuild)"
             ContinueOnError="false"
             Properties="Configuration=$(ConfigurationCPP)">
      <Output ItemName="OutputFiles" TaskParameter="TargetOutputs"/>
    </MSBuild>
  </Target>
  
  
  <!--RUN UNIT TESTING EXE-->
  <Target Name="RunUnitTesting">
    <Message Text="Running Unit Tests"/>
    <Exec Command='"..\MSCL_Unit_Tests\build\x86\Release (C++)\MSCL_Unit_Tests.exe" --output_format=XML --log_level=all --report_level=no 1>"..\MSCL_Unit_Tests\unitTestResults.xml"'/>
  </Target>
  
</Project>