﻿<?xml version="1.0" encoding="utf-8"?>
<Project
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="DownloadOpenSSL">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - DownloadOpenSSL" />
        <WebDownload
            Condition="!Exists('$(MSBuildProjectDirectory)\_archives\$(OPENSSL_SRC_TAR_GZ)')"
            FileUri="$(OPENSSL_URL)/$(OPENSSL_SRC_TAR_GZ)"
            FileName="$(MSBuildProjectDirectory)\_archives\$(OPENSSL_SRC_TAR_GZ)"
            UseDefaultCredentials="True" />
    </Target>
    <Target Name="ExtractOpenSSL">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - ExtractOpenSSL" />
        <ExtractWith7za
            Condition="!Exists('$(MSBuildProjectDirectory)\$(OPENSSL_DIR)')"
            FileToExtract="$(MSBuildProjectDirectory)\_archives\$(OPENSSL_SRC_TAR_GZ)" />
    </Target>
    <Target Name="BuildOpenSSL_X86">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - BuildOpenSSL_X86" />
        <PropertyGroup>
            <ExecCommand><![CDATA[
            call $(MSBuildProjectDirectory)\SetVCVars.bat $(VSVer) x86
            perl Configure VC-WIN32 no-asm --prefix="$(MSBuildProjectDirectory)\OpenSSL\x86" --openssldir="$(MSBuildProjectDirectory)\OpenSSL\x86\SSL"
            "$(NMAKE_EXE)" -nologo
            "$(NMAKE_EXE)" -nologo test
            "$(NMAKE_EXE)" -nologo install
            "$(NMAKE_EXE)" -nologo clean
            ]]></ExecCommand>
        </PropertyGroup>
        <Exec
            Command="$(ExecCommand)"
            WorkingDirectory="$(MSBuildProjectDirectory)\$(OPENSSL_DIR)" />
    </Target>
    <Target Name="BuildOpenSSL_X64">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - BuildOpenSSL_X64" />
        <PropertyGroup>
            <ExecCommand><![CDATA[
            call $(MSBuildProjectDirectory)\SetVCVars.bat $(VSVer) x64
            perl Configure VC-WIN64A no-asm --prefix="$(MSBuildProjectDirectory)\OpenSSL\x64" --openssldir="$(MSBuildProjectDirectory)\OpenSSL\x64\SSL"
            "$(NMAKE_EXE)" -nologo
            "$(NMAKE_EXE)" -nologo test
            "$(NMAKE_EXE)" -nologo install
            "$(NMAKE_EXE)" -nologo clean
            ]]></ExecCommand>
        </PropertyGroup>
        <Exec
            Command="$(ExecCommand)"
            WorkingDirectory="$(MSBuildProjectDirectory)\$(OPENSSL_DIR)" />
    </Target>
    <Target Name="BuildOpenSSL">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - BuildOpenSSL" />
        <CallTarget
            Targets="BuildOpenSSL_X86;BuildOpenSSL_X64" />
    </Target>
    <Target Name="CopyOpenSSL">
        <ItemGroup>
            <OPENSSL_BIN_X64_FILES
                Include="$(MSBuildProjectDirectory)\OpenSSL\x64\bin\**\*.*" />
            <OPENSSL_BIN_X86_FILES
                Include="$(MSBuildProjectDirectory)\OpenSSL\x86\bin\**\*.*" />
            <OPENSSL_DOCS_FILES
                Include="$(MSBuildProjectDirectory)\$(OPENSSL_DIR)\doc\**\*.*" />
            <OPENSSL_INCLUDE_FILES
                Include="$(MSBuildProjectDirectory)\OpenSSL\x86\include\**\*.*" />
            <OPENSSL_LIB_X64_FILES
                Include="$(MSBuildProjectDirectory)\OpenSSL\x64\lib\**\*.*" />
            <OPENSSL_LIB_X86_FILES
                Include="$(MSBuildProjectDirectory)\OpenSSL\x86\lib\**\*.*" />
            <OPENSSL_SSL_FILES
                Include="$(MSBuildProjectDirectory)\OpenSSL\x86\ssl\**\*.*" />
        </ItemGroup>
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - CopyOpenSSL" />
        <MakeDir
            Condition="!Exists('$(COMMON_SDKS)\docs\OpenSSL')"
            Directories="$(COMMON_SDKS)\docs\OpenSSL" />
        <MakeDir
            Condition="!Exists('$(COMMON_SDKS)\ssl')"
            Directories="$(COMMON_SDKS)\ssl" />
        <Copy
            SourceFiles="@(OPENSSL_BIN_X64_FILES)"
            DestinationFolder="$(COMMON_SDKS)\bin\x64"
            SkipUnchangedFiles="true" />
        <Copy
            SourceFiles="@(OPENSSL_BIN_X86_FILES)"
            DestinationFolder="$(COMMON_SDKS)\bin\x86"
            SkipUnchangedFiles="true" />
        <Copy
            SourceFiles="@(OPENSSL_DOCS_FILES)"
            DestinationFolder="$(COMMON_SDKS)\docs\OpenSSL\%(RecursiveDir)"
            SkipUnchangedFiles="true" />
        <Copy
            SourceFiles="@(OPENSSL_INCLUDE_FILES)"
            DestinationFolder="$(COMMON_SDKS)\include\%(RecursiveDir)"
            SkipUnchangedFiles="true" />
        <Copy
            SourceFiles="@(OPENSSL_LIB_X64_FILES)"
            DestinationFolder="$(COMMON_SDKS)\lib\x64\%(RecursiveDir)"
            SkipUnchangedFiles="true" />
        <Copy
            SourceFiles="@(OPENSSL_LIB_X86_FILES)"
            DestinationFolder="$(COMMON_SDKS)\lib\x86\%(RecursiveDir)"
            SkipUnchangedFiles="true" />
        <Copy
            SourceFiles="@(OPENSSL_SSL_FILES)"
            DestinationFolder="$(COMMON_SDKS)\ssl"
            SkipUnchangedFiles="true" />
    </Target>
    <Target Name="CleanOpenSSL">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - CleanOpenSSL" />
        <RemoveDir
            Condition="Exists('$(MSBuildProjectDirectory)\$(OPENSSL_DIR)')"
            Directories="$(MSBuildProjectDirectory)\$(OPENSSL_DIR)" />
        <RemoveDir
            Condition="Exists('$(MSBuildProjectDirectory)\OpenSSL')"
            Directories="$(MSBuildProjectDirectory)\OpenSSL" />
    </Target>
    <Target Name="OpenSSL">
        <SetConsoleTitle
            Title="$(CONSOLE_TITLE) - OpenSSL" />
        <CallTarget
            Condition="!Exists('$(MSBuildProjectDirectory)\build_state\OpenSSL_build_successful')"
            Targets="DownloadOpenSSL;ExtractOpenSSL;BuildOpenSSL;CopyOpenSSL" />
        <Touch
            AlwaysCreate='true'
            Files="$(MSBuildProjectDirectory)\build_state\OpenSSL_build_successful" />
    </Target>
</Project>
