<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <PkgIntermediateDirectory>$(IntermediateDirectory)/pkgs/$(SdkVersion)</PkgIntermediateDirectory>

    <!-- Properties for pkg build -->
    <SharedHostComponentId>com.microsoft.dotnet.sharedhost.$(SharedHostVersion).component.osx.x64</SharedHostComponentId>
    <HostFxrComponentId>com.microsoft.dotnet.hostfxr.$(HostFxrVersion).component.osx.x64</HostFxrComponentId>
    <SharedFrameworkComponentId>com.microsoft.dotnet.sharedframework.$(SharedFrameworkNugetName).$(MicrosoftNETCoreAppPackageVersion).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>
    <SdkPkgScriptTemplateFile>$(SdkPkgScriptsDirectory)/postinstall</SdkPkgScriptTemplateFile>
    <SdkPkgDestinationScriptsDirectory>$(PkgIntermediateDirectory)/scripts</SdkPkgDestinationScriptsDirectory>
    <SdkPkgScriptFile>$(SdkPkgDestinationScriptsDirectory)/postinstall</SdkPkgScriptFile>
    <SdkProductArchiveResourcesDirectory>$(PkgIntermediateDirectory)/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>
  
    <Target Name="SetupPkgInputsOutputs">
      <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>

        <PostInstallScriptReplacement Include="%SDK_VERSION%">
          <ReplacementString>$(SdkVersion)</ReplacementString>
        </PostInstallScriptReplacement>

        <ResourcesReplacement Include="{DOTNETSDKVERSION}">
          <ReplacementString>$(SdkVersion)</ReplacementString>
        </ResourcesReplacement>
        <ResourcesReplacement Include="{DOTNETRUNTIMEVERSION}">
          <ReplacementString>$(MicrosoftNETCoreAppPackageVersion)</ReplacementString>
        </ResourcesReplacement>
        <ResourcesReplacement Include="{ASPNETCOREVERSION}">
          <ReplacementString>$(AspNetCoreVersion)</ReplacementString>
        </ResourcesReplacement>
      </ItemGroup>
      
      <!-- Consumed By Publish -->
      <ItemGroup>
        <GeneratedInstallers Include="$(SdkInstallerFile);$(CombinedFrameworkSdkHostInstallerFile)" />
      </ItemGroup>

      <ItemGroup>
        <SdkProductArchiveResourcesTemplateFiles Include="$(SdkPkgSourcesRootDirectory)/resources/**/*" />

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

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

    <Target Name="GenerateSdkPkg"
            Inputs="@(GenerateSdkPkgInputs)"
            Outputs="$(SdkInstallerFile)"
            DependsOnTargets="Init;Layout;SetupPkgInputsOutputs"
            Condition=" '$(OSName)' == 'osx' ">

      <Copy SourceFiles="@(AspNetRuntimeFilesInput)"
            DestinationFiles="@(AspNetRuntimeFilesInput->'$(SdkLayoutOutputDirectory)/%(RecursiveDir)%(FileName)%(Extension)')" />

      <ReplaceFileContents
        InputFiles="$(SdkPkgScriptTemplateFile)"
        DestinationFiles="$(SdkPkgScriptFile)"
        ReplacementPatterns="@(PostInstallScriptReplacement -> '%(Identity)')"
        ReplacementStrings="@(PostInstallScriptReplacement -> '%(ReplacementString)')" />

      <ReplaceFileContents 
        InputFiles="@(SdkProductArchiveResourcesTemplateFiles)"
        DestinationFiles="@(SdkProductArchiveResourcesTemplateFiles -> '$(SdkProductArchiveResourcesDirectory)/%(RecursiveDir)%(Filename)%(Extension)')"
        ReplacementPatterns="@(ResourcesReplacement -> '%(Identity)')"
        ReplacementStrings="@(ResourcesReplacement -> '%(ReplacementString)')" />

      <Chmod
        Glob="$(SdkPkgScriptFile)"
        Mode="ugo+x" />

      <Exec Command="pkgbuild
                     --root '$(SdkLayoutOutputDirectory)'
                     --identifier '$(SdkComponentId)'
                     --version '$(SdkVersion)'
                     --install-location '$(PkgInstallDirectory)'
                     --scripts '$(SdkPkgDestinationScriptsDirectory)'
                     '$(SdkInstallerFile)'" />
    </Target>

    <Target Name="GenerateSdkProductArchive"
            Inputs="@(GenerateSdkProductArchiveInputs)"
            Outputs="$(CombinedFrameworkSdkHostInstallerFile)"
            DependsOnTargets="GenerateSdkPkg"
            Condition=" '$(OSName)' == 'osx' ">
      <ItemGroup>
        <PkgComponentsSourceFiles Include="$(SdkInstallerFile);
                                $(DownloadedSharedFrameworkInstallerFile);
                                $(DownloadedHostFxrInstallerFile);
                                $(DownloadedSharedHostInstallerFile)" />
        <PkgComponentsDestinationFiles Include="$(SdkPkgIntermediatePath);
                                                $(SharedFrameworkPkgIntermediatePath);
                                                $(HostFxrPkgIntermediatePath);
                                                $(SharedHostPkgIntermediatePath)" />
      </ItemGroup>

      <!-- Move ProductArchive pkg components into place with component ids in the filenames -->
      <Copy SourceFiles="@(PkgComponentsSourceFiles)" DestinationFiles="@(PkgComponentsDestinationFiles)" />

      <!-- Fill out parameters in the Distribution Template -->
      <ReplaceFileContents
        InputFiles="$(SdkProductArchiveDistributionTemplateFile)"
        DestinationFiles="$(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>
