<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="ReplaceFileContents" AssemblyFile="$(CLIBuildDll)" />
  
    <Target Name="SetupPkgInputsOutputs">
      <PropertyGroup>
        <InstallerOutputDirectory>$(PackagesDirectory)</InstallerOutputDirectory>
        <PkgIntermediateDirectory>$(IntermediateDirectory)/pkgs/$(SdkVersion)</PkgIntermediateDirectory>

        <SdkInstallerFile>$(InstallerOutputDirectory)/$(ArtifactNameWithVersionSdk)$(InstallerExtension)</SdkInstallerFile>
        <CombinedFrameworkSdkHostInstallerFile>$(InstallerOutputDirectory)/$(ArtifactNameWithVersionCombinedHostHostFxrFrameworkSdk)$(BundleExtension)</CombinedFrameworkSdkHostInstallerFile>
        
        <!-- Properties for pkg build -->
        <SharedHostComponentId>com.microsoft.dotnet.sharedhost.component.osx.x64</SharedHostComponentId>
        <HostFxrComponentId>com.microsoft.dotnet.hostfxr.component.osx.x64</HostFxrComponentId>
        <SharedFrameworkComponentId>com.microsoft.dotnet.sharedframework.$(SharedFrameworkNugetName).$(SharedFrameworkVersion).component.osx.x64</SharedFrameworkComponentId>
        <SdkComponentId>com.microsoft.dotnet.dev.$(SdkVersion).component.osx.x64</SdkComponentId>
        <SdkProductArchiveId>com.microsoft.dotnet.dev.$(SdkVersion).osx.x64</SdkProductArchiveId>
        
        <PkgInstallDirectory>/usr/local/share/dotnet</PkgInstallDirectory>

        <SdkPkgSourcesRootDirectory>$(RepoRoot)/packaging/osx/clisdk</SdkPkgSourcesRootDirectory>
        <SdkPkgScriptsDirectory>$(SdkPkgSourcesRootDirectory)/scripts</SdkPkgScriptsDirectory>
        <SdkProductArchiveResourcesDirectory>$(SdkPkgSourcesRootDirectory)/resources</SdkProductArchiveResourcesDirectory>
        
        <SdkProductArchiveDistributionTemplateFile>$(SdkPkgSourcesRootDirectory)/Distribution-Template</SdkProductArchiveDistributionTemplateFile>
        <SdkProductArchiveDistributionFile>$(PkgIntermediateDirectory)/CLI-SDK-Formatted-Distribution-Template.xml</SdkProductArchiveDistributionFile>
        
        <SdkPkgIntermediatePath>$(PkgIntermediateDirectory)/$(SdkComponentId).pkg</SdkPkgIntermediatePath>
        <SharedFrameworkPkgIntermediatePath>$(PkgIntermediateDirectory)/$(SharedFrameworkComponentId).pkg</SharedFrameworkPkgIntermediatePath>
        <SharedHostPkgIntermediatePath>$(PkgIntermediateDirectory)/$(SharedHostComponentId).pkg</SharedHostPkgIntermediatePath>
        <HostFxrPkgIntermediatePath>$(PkgIntermediateDirectory)/$(HostFxrComponentId).pkg</HostFxrPkgIntermediatePath>
      </PropertyGroup>

      <ItemGroup>
        <DistributionTemplateReplacement Include="{SharedFxComponentId}">
          <ReplacementString>$(SharedFrameworkComponentId)</ReplacementString>
        </DistributionTemplateReplacement>
        <DistributionTemplateReplacement Include="{SharedHostComponentId}">
          <ReplacementString>$(SharedHostComponentId)</ReplacementString>
        </DistributionTemplateReplacement>
        <DistributionTemplateReplacement Include="{HostFxrComponentId}">
          <ReplacementString>$(HostFxrComponentId)</ReplacementString>
        </DistributionTemplateReplacement>
        <DistributionTemplateReplacement Include="{CLISdkComponentId}">
          <ReplacementString>$(SdkComponentId)</ReplacementString>
        </DistributionTemplateReplacement>
        <DistributionTemplateReplacement Include="{CLISdkNugetVersion}">
          <ReplacementString>$(SdkVersion)</ReplacementString>
        </DistributionTemplateReplacement>
        <DistributionTemplateReplacement Include="{CLISdkBrandName}">
          <ReplacementString>$(SdkBrandName)</ReplacementString>
        </DistributionTemplateReplacement>
        <DistributionTemplateReplacement Include="{SharedFxBrandName}">
          <ReplacementString>$(SharedFrameworkBrandName)</ReplacementString>
        </DistributionTemplateReplacement>
        <DistributionTemplateReplacement Include="{SharedHostBrandName}">
          <ReplacementString>$(SharedHostBrandName)</ReplacementString>
        </DistributionTemplateReplacement>
        <DistributionTemplateReplacement Include="{HostFxrBrandName}">
          <ReplacementString>$(HostFxrBrandName)</ReplacementString>
        </DistributionTemplateReplacement>
      </ItemGroup>

      <!-- Consumed By Publish -->
      <ItemGroup>
        <GeneratedInstallers Include="$(SdkInstallerFile);$(CombinedFrameworkSdkHostInstallerFile)" />
      </ItemGroup>

      <ItemGroup>
        <GenerateSdkPkgInputs Include="$(SdkLayoutOutputDirectory)/**/*" />
        <GenerateSdkPkgInputs Include="$(SdkPkgScriptsDirectory)/**/*" />

        <GenerateSdkProductArchiveInputs Include="$(SdkInstallerFile)" />
        <GenerateSdkProductArchiveInputs Include="$(DownloadedSharedFrameworkInstallerFile)" />
        <GenerateSdkProductArchiveInputs Include="$(DownloadedHostFxrInstallerFile)" />
        <GenerateSdkProductArchiveInputs Include="$(DownloadedSharedHostInstallerFile)" />
        <GenerateSdkProductArchiveInputs Include="$(SdkProductArchiveDistributionTemplateFile)" />
        <GenerateSdkProductArchiveInputs Include="$(SdkProductArchiveResourcesDirectory)/**/*" />
      </ItemGroup>
    </Target>

    <Target Name="GenerateSdkPkg" 
            Inputs="@(GenerateSdkPkgInputs)"
            Outputs="$(SdkInstallerFile)"
            DependsOnTargets="Init;Layout;SetupPkgInputsOutputs"
            Condition=" '$(OSName)' == 'osx' ">
      
      <Exec Command="pkgbuild
                     --root '$(SdkLayoutOutputDirectory)'
                     --identifier '$(SdkComponentId)'
                     --version '$(SdkVersion)'
                     --install-location '$(PkgInstallDirectory)'
                     --scripts '$(SdkPkgScriptsDirectory)'
                     '$(SdkInstallerFile)'" />
    </Target>

    <Target Name="GenerateSdkProductArchive"
            Inputs="@(GenerateSdkProductArchiveInputs)"
            Outputs="$(CombinedFrameworkSdkHostInstallerFile)"
            DependsOnTargets="GenerateSdkPkg"
            Condition=" '$(OSName)' == 'osx' ">
      <!-- Move ProductArchive pkg components into place with component ids in the filenames -->
      <Copy 
        SourceFiles="$(SdkInstallerFile);
                     $(DownloadedSharedFrameworkInstallerFile);
                     $(DownloadedHostFxrInstallerFile);
                     $(DownloadedSharedHostInstallerFile);"
        DestinationFiles="$(SdkPkgIntermediatePath);
                          $(SharedFrameworkPkgIntermediatePath);
                          $(HostFxrPkgIntermediatePath);
                          $(SharedHostPkgIntermediatePath);" />
      
      <!-- Fill out parameters in the Distribution Template -->
      <ReplaceFileContents
        InputFile="$(SdkProductArchiveDistributionTemplateFile)"
        DestinationFile="$(SdkProductArchiveDistributionFile)"
        ReplacementPatterns="@(DistributionTemplateReplacement -> '%(Identity)')"
        ReplacementStrings="@(DistributionTemplateReplacement -> '%(ReplacementString)')" />
      
      <Exec Command="productbuild
                     --version '$(SdkVersion)'
                     --identifier '$(SdkProductArchiveId)'
                     --package-path '$(PkgIntermediateDirectory)'
                     --resources '$(SdkProductArchiveResourcesDirectory)'
                     --distribution '$(SdkProductArchiveDistributionFile)'
                     '$(CombinedFrameworkSdkHostInstallerFile)'" />
    </Target>

    <Target Name="GeneratePkgs" 
            DependsOnTargets="Init;
                              Layout;
                              SetupPkgInputsOutputs;
                              GenerateSdkPkg;
                              GenerateSdkProductArchive"
            Condition=" '$(OSName)' == 'osx' " />

</Project>