<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="BuildTheWholeCli" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />

  <ItemGroup>
    <DotnetCliBuildFrameworkInputs Include="build_projects/**/*.cs" Exclude="build_projects/**/obj/**/*.cs" />
    <DotnetCliBuildFrameworkInputs Include="build_projects/**/*.csproj" />
  </ItemGroup>

  <!-- Workaround to "Native image cannot be loaded multiple times" issue
       A target in the top level file needs to run and invoke a task
       https://github.com/Microsoft/msbuild/issues/750 -->
  <Target Name="MSBuildWorkaroundTarget">
    <Message Text="Dont remove this target" />
  </Target>

  <Target Name="BuildDotnetCliBuildFramework"
          Inputs="@(DotnetCliBuildFrameworkInputs)"
          Outputs="$(CLIBuildDll)"
          DependsOnTargets="MSBuildWorkaroundTarget;
                            RestoreDotnetCliBuildFramework">

    <Exec Command="$(DotnetStage0) publish -o $(DotnetCliBuildDirectory)/bin --framework netcoreapp2.0 /p:GeneratePropsFile=$(GeneratePropsFile)" 
          WorkingDirectory="$(DotnetCliBuildDirectory)"/>
  </Target>
  
  <ItemGroup>
    <RestoreDotnetCliBuildFrameworkOutputs Include="$(DotnetCliBuildDirectory)/obj/project.assets.json" />
    <RestoreDotnetCliBuildFrameworkOutputs Include="$(DotnetCliBuildDirectory)/obj/dotnet-cli-build.csproj.nuget.g.props" />
    <RestoreDotnetCliBuildFrameworkOutputs Include="$(DotnetCliBuildDirectory)/obj/dotnet-cli-build.csproj.nuget.g.targets" />
  </ItemGroup>
  
  <Target Name="RestoreDotnetCliBuildFramework"
          Inputs="$(DotnetCliBuildDirectory)/dotnet-cli-build.csproj"
          Outputs="@(RestoreDotnetCliBuildFrameworkOutputs)">

    <PropertyGroup>
      <ExtraRestoreArgs>$(ExtraRestoreArgs) /p:GeneratePropsFile=$(GeneratePropsFile)</ExtraRestoreArgs>
      <ExtraRestoreArgs Condition="'$(OS)' != 'Windows_NT'">$(ExtraRestoreArgs) --disable-parallel</ExtraRestoreArgs>
    </PropertyGroup>

    <Exec Command="$(DotnetStage0) restore $(ExtraRestoreArgs)" 
          WorkingDirectory="$(DotnetCliBuildDirectory)"/>
  </Target>

  <Target Name="BuildTheWholeCli" DependsOnTargets="$(CLITargets)" />

  <Import Project="build/GitCommitInfo.targets" />
  <Import Project="build/HostInfo.targets" />
  <Import Project="build/BuildInfo.targets" />
  <Import Project="build/Prepare.targets" />
  <Import Project="build/Compile.targets" />
  <Import Project="build/Package.targets" />
  <Import Project="build/Test.targets" />
  <Import Project="build/Publish.targets" />
  <Import Project="build/Run.targets" />

  <Import Project="build/InitRepo.targets" />
</Project>
