﻿<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="boost_DownloadBZip2">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - boost_DownloadBZip2" />
        <WebDownload
            Condition="!Exists('$(MSBuildProjectDirectory)\_archives\$(BZIP2_SRC_TAR_GZ)')"
            FileUri="$(BZIP2_URL)$(BZIP2_SRC_TAR_GZ)"
            FileName="$(MSBuildProjectDirectory)\_archives\$(BZIP2_SRC_TAR_GZ)"
            UseDefaultCredentials="True" />
    </Target>
    <Target Name="boost_ExtractBZip2">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - boost_ExtractBZip2" />
        <ExtractWith7za
            Condition="!Exists('$(MSBuildProjectDirectory)\$(BZIP2_DIR)')"
            FileToExtract="$(MSBuildProjectDirectory)\_archives\$(BZIP2_SRC_TAR_GZ)" />
    </Target>
    <Target Name="boost_PatchBZip2">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - boost_PatchBZip2" />
        <Exec
            Condition="!Exists('$(MSBuildProjectDirectory)\$(BZIP2_DIR)\bzip2_patched')"
            Command="&quot;$(PATCH_EXE)&quot; -p1 -i &quot;$(MSBuildProjectDirectory)\patches\$(BZIP2_PATCH_FILE)&quot;"
            WorkingDirectory="$(MSBuildProjectDirectory)\$(BZIP2_DIR)" />
        <Touch
            AlwaysCreate='true'
            Files="$(MSBuildProjectDirectory)\$(BZIP2_DIR)\bzip2_patched" />
    </Target>
    <Target Name="boost_DownloadZLib">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - boost_DownloadZLib" />
        <WebDownload
            Condition="!Exists('$(MSBuildProjectDirectory)\_archives\$(ZLIB_SRC_TAR_GZ)')"
            FileUri="$(ZLIB_URL)/$(ZLIB_SRC_TAR_GZ)"
            FileName="$(MSBuildProjectDirectory)\_archives\$(ZLIB_SRC_TAR_GZ)"
            UseDefaultCredentials="True" />
    </Target>
    <Target Name="boost_ExtractZLib">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - boost_ExtractZLib" />
        <ExtractWith7za
            Condition="!Exists('$(MSBuildProjectDirectory)\$(ZLIB_DIR)')"
            FileToExtract="$(MSBuildProjectDirectory)\_archives\$(ZLIB_SRC_TAR_GZ)" />
    </Target>
    <Target Name="boost_PatchZLib">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - boost_PatchZLib" />
        <Exec
            Condition="!Exists('$(MSBuildProjectDirectory)\$(ZLIB_DIR)\zlib_patched')"
            Command="&quot;$(PATCH_EXE)&quot; -p1 -i &quot;$(MSBuildProjectDirectory)\patches\$(ZLIB_PATCH_FILE)&quot;"
            WorkingDirectory="$(MSBuildProjectDirectory)\$(ZLIB_DIR)" />
        <Touch
            AlwaysCreate='true'
            Files="$(MSBuildProjectDirectory)\$(ZLIB_DIR)\zlib_patched" />
    </Target>
    <Target Name="DownloadBoost">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - DownloadBoost" />
        <Message
            Text="Downloading '$(BOOST_URL)/$(BOOST_SRC_ZIP)'."
            Condition="!Exists('$(MSBuildProjectDirectory)\_archives\$(BOOST_SRC_ZIP)')" />
        <WebDownload
            Condition="!Exists('$(MSBuildProjectDirectory)\_archives\$(BOOST_SRC_ZIP)')"
            FileUri="$(BOOST_URL)/$(BOOST_SRC_ZIP)"
            FileName="$(MSBuildProjectDirectory)\_archives\$(BOOST_SRC_ZIP)"
            UseDefaultCredentials="True" />    
        <CallTarget Targets="boost_DownloadBZip2;boost_DownloadZLib" />
    </Target>
    <Target Name="ExtractBoost">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - ExtractBoost" />
        <Unzip
            Condition="!Exists('$(MSBuildProjectDirectory)\$(BOOST_DIR)')"
            ZipFileName="$(MSBuildProjectDirectory)\_archives\$(BOOST_SRC_ZIP)"
            TargetDirectory="$(MSBuildProjectDirectory)" />
        <CallTarget
            Targets="boost_ExtractBZip2;boost_ExtractZLib" />
    </Target>
    <Target Name="PatchBoost">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - PatchBoost" />
        <FileUpdate
            Condition="!Exists('$(MSBuildProjectDirectory)\$(BOOST_DIR)\BOOST_patched')"
            Files="$(MSBuildProjectDirectory)\$(BOOST_DIR)\boost\config\compiler\visualc.hpp"
            Regex="#if \(_MSC_VER > 1911\)"
            ReplacementText="#if (_MSC_VER > 1916)" />
        <FileUpdate
            Condition="!Exists('$(MSBuildProjectDirectory)\$(BOOST_DIR)\BOOST_patched')"
            Files="$(MSBuildProjectDirectory)\$(BOOST_DIR)\boost\config\compiler\visualc.hpp"
            Regex="#if \(_MSC_VER > 1912\)"
            ReplacementText="#if (_MSC_VER > 1916)" />
        <CallTarget
            Targets="boost_PatchBZip2;boost_PatchZLib" />
        <Touch
            AlwaysCreate='true'
            Files="$(MSBuildProjectDirectory)\$(BOOST_DIR)\BOOST_patched" />
    </Target>
    <Target Name="BootstrapBoost">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - BootstrapBoost" />
        <PropertyGroup>
            <ExecCommand><![CDATA[
            call $(MSBuildProjectDirectory)\SetVCVars.bat $(VSVer) x86
            call bootstrap.bat $(VCPlatformToolset)
            ]]></ExecCommand>
        </PropertyGroup>
        <Exec
            Command="$(ExecCommand)"
            WorkingDirectory="$(MSBuildProjectDirectory)\$(BOOST_DIR)" />
    </Target>
    <Target Name="BuildBoostX86">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - BuildBoostX86" />
        <PropertyGroup>
            <ExecCommand><![CDATA[
            call $(MSBuildProjectDirectory)\SetVCVars.bat $(VSVer) x86
            b2.exe --without-mpi toolset=msvc-$(BoostMsvcToolsetVersion) address-model=32 $(BOOST_BZIP2_ARGS) $(BOOST_ICU_ARGS_X86) $(BOOST_LZMA_ARGS_X86) $(BOOST_ZLIB_ARGS) $(BOOST_ZSTD_ARGS_X86)
            ]]></ExecCommand>
        </PropertyGroup>
        <Exec
            Command="$(ExecCommand)"
            WorkingDirectory="$(MSBuildProjectDirectory)\$(BOOST_DIR)" />
    </Target>
    <Target Name="BuildBoostX64">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - BuildBoostX64" />
        <PropertyGroup>
            <ExecCommand><![CDATA[
            call $(MSBuildProjectDirectory)\SetVCVars.bat $(VSVer) x64
            b2.exe --without-mpi toolset=msvc-$(BoostMsvcToolsetVersion) address-model=64 $(BOOST_BZIP2_ARGS) $(BOOST_ICU_ARGS_X64) $(BOOST_LZMA_ARGS_X64) $(BOOST_ZLIB_ARGS) $(BOOST_ZSTD_ARGS_X64)
            ]]></ExecCommand>
        </PropertyGroup>
        <Exec
            Command="$(ExecCommand)"
            WorkingDirectory="$(MSBuildProjectDirectory)\$(BOOST_DIR)" />
    </Target>
    <Target Name="BoostX86Lib">
        <ItemGroup>
            <BOOST_STAGE_LIB_X86_FILES Include="$(MSBuildProjectDirectory)\$(BOOST_DIR)\stage\lib\**\*.*" />
        </ItemGroup>
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - BoostX86Lib" />
        <MakeDir
            Condition="!Exists('$(MSBuildProjectDirectory)\$(BOOST_DIR)\lib\x86')"
            Directories="$(MSBuildProjectDirectory)\$(BOOST_DIR)\lib\x86" />
        <Copy
            SourceFiles="@(BOOST_STAGE_LIB_X86_FILES)"
            DestinationFolder="$(MSBuildProjectDirectory)\$(BOOST_DIR)\lib\x86"
            SkipUnchangedFiles="true" />
        <RemoveDir
            Condition="Exists('$(MSBuildProjectDirectory)\bin.v2')"
            Directories="$(MSBuildProjectDirectory)\$(BOOST_DIR)\bin.v2" />
        <RemoveDir
            Condition="Exists('$(MSBuildProjectDirectory)\stage')"
            Directories="$(MSBuildProjectDirectory)\$(BOOST_DIR)\stage" />
    </Target>
    <Target Name="BoostX64Lib">
        <ItemGroup>
            <BOOST_STAGE_LIB_X64_FILES
                Include="$(MSBuildProjectDirectory)\$(BOOST_DIR)\stage\lib\**\*.*" />
        </ItemGroup>
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - BoostX64Lib" />
        <MakeDir
            Condition="!Exists('$(MSBuildProjectDirectory)\$(BOOST_DIR)\lib\x64')"
            Directories="$(MSBuildProjectDirectory)\$(BOOST_DIR)\lib\x64" />
        <Copy
            SourceFiles="@(BOOST_STAGE_LIB_X64_FILES)"
            DestinationFolder="$(MSBuildProjectDirectory)\$(BOOST_DIR)\lib\x64"
            SkipUnchangedFiles="true" />
        <RemoveDir
            Condition="Exists('$(MSBuildProjectDirectory)\bin.v2')"
            Directories="$(MSBuildProjectDirectory)\$(BOOST_DIR)\bin.v2" />
        <RemoveDir
            Condition="Exists('$(MSBuildProjectDirectory)\stage')"
            Directories="$(MSBuildProjectDirectory)\$(BOOST_DIR)\stage" />
    </Target>
    <Target Name="BuildBoost">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - BuildBoost" />
        <Copy
            SourceFiles="$(MSBuildProjectDirectory)\project-config.jam.msvc-$(VisualStudioVersion)"
            DestinationFiles="$(MSBuildProjectDirectory)\$(BOOST_DIR)\project-config.jam"
            SkipUnchangedFiles="true" />
        <CallTarget
            Targets="BuildBoostX86;BoostX86Lib;BuildBoostX64;BoostX64Lib" />
    </Target>
    <Target Name="CopyBoost">
        <ItemGroup>
            <BOOST_DOCS_FILES
                Include="$(MSBuildProjectDirectory)\$(BOOST_DIR)\doc\**\*.*" />
            <BOOST_DOCS_FILES
                Include="$(MSBuildProjectDirectory)\$(BOOST_DIR)\LICENSE_1_0.txt" />
            <BOOST_INCLUDE_FILES
                Include="$(MSBuildProjectDirectory)\$(BOOST_DIR)\boost\**\*.*" />
            <BOOST_LIB_X64_FILES
                Include="$(MSBuildProjectDirectory)\$(BOOST_DIR)\lib\x64\**\*.*" />
            <BOOST_LIB_X86_FILES
                Include="$(MSBuildProjectDirectory)\$(BOOST_DIR)\lib\x86\**\*.*" />
        </ItemGroup>
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - CopyBoost" />
        <MakeDir
            Condition="!Exists('$(COMMON_SDKS)\docs\boost')"
            Directories="$(COMMON_SDKS)\docs\boost" />
        <MakeDir
            Condition="!Exists('$(COMMON_SDKS)\include\boost')"
            Directories="$(COMMON_SDKS)\include\boost" />
        <Copy
            SourceFiles="@(BOOST_DOCS_FILES)"
            DestinationFolder="$(COMMON_SDKS)\docs\boost\%(RecursiveDir)"
            SkipUnchangedFiles="true" />
        <Copy
            SourceFiles="@(BOOST_INCLUDE_FILES)"
            DestinationFolder="$(COMMON_SDKS)\include\boost\%(RecursiveDir)"
            SkipUnchangedFiles="true" />
        <Copy
            SourceFiles="@(BOOST_LIB_X64_FILES)"
            DestinationFolder="$(COMMON_SDKS)\lib\x64"
            SkipUnchangedFiles="true" />
        <Copy
            SourceFiles="@(BOOST_LIB_X86_FILES)"
            DestinationFolder="$(COMMON_SDKS)\lib\x86"
            SkipUnchangedFiles="true" />
    </Target>
    <Target Name="CleanBoost">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - CleanBoost" />
        <RemoveDir
            Condition="Exists('$(MSBuildProjectDirectory)\$(BOOST_DIR)')"
            Directories="$(MSBuildProjectDirectory)\$(BOOST_DIR)" />
        <RemoveDir
            Condition="Exists('$(MSBuildProjectDirectory)\$(BZIP2_DIR)')"
            Directories="$(MSBuildProjectDirectory)\$(BZIP2_DIR)" />
        <RemoveDir
            Condition="Exists('$(MSBuildProjectDirectory)\$(ZLIB_DIR)')"
            Directories="$(MSBuildProjectDirectory)\$(ZLIB_DIR)" />
    </Target>
    <Target Name="Boost">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - Boost" />
        <CallTarget
            Condition="!Exists('$(MSBuildProjectDirectory)\build_state\Boost_build_successful')"
            Targets="DownloadBoost;ExtractBoost;PatchBoost;BootstrapBoost;BuildBoost;CopyBoost" />
        <Touch
            AlwaysCreate='true'
            Files="$(MSBuildProjectDirectory)\build_state\Boost_build_successful" />
    </Target>
</Project>
