<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\..\..\common.openconsole.props" Condition="'$(OpenConsoleDir)'==''" />
  <Import Project="$(OpenConsoleDir)src\wap-common.build.pre.props" />
  <PropertyGroup Label="Configuration">
    <!--
    These two properties are very important!
    Without them, msbuild will stomp MinVersion and MaxVersionTested in the
    Package.appxmanifest and replace them with whatever our values for
    TargetPlatformMinVersion and TargetPlatformVersion are.
     -->
    <AppxOSMinVersionReplaceManifestVersion>false</AppxOSMinVersionReplaceManifestVersion>
    <AppxOSMaxVersionTestedReplaceManifestVersion>false</AppxOSMaxVersionTestedReplaceManifestVersion>
  </PropertyGroup>
  <PropertyGroup>
    <ProjectGuid>cf31505e-3bae-4c0a-81d7-f1eb279f40bb</ProjectGuid>
    <EntryPointProjectUniqueName>..\WindowExe\WindowExe.vcxproj</EntryPointProjectUniqueName>
    <DebuggerType>NativeOnly</DebuggerType>
  </PropertyGroup>
  <PropertyGroup Condition="!Exists('Package_TemporaryKey.pfx')">
    <AppxPackageSigningEnabled>false</AppxPackageSigningEnabled>
    <AppxBundle>Never</AppxBundle>
  </PropertyGroup>
  <PropertyGroup Condition="Exists('Package_TemporaryKey.pfx')">
    <AppxPackageSigningEnabled>true</AppxPackageSigningEnabled>
    <AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision>
    <PackageCertificateKeyFile>Package_TemporaryKey.pfx</PackageCertificateKeyFile>
  </PropertyGroup>
  <ItemGroup Condition="Exists('Package_TemporaryKey.pfx')">
    <None Include="Package_TemporaryKey.pfx" />
  </ItemGroup>
  <ItemGroup>
    <AppxManifest Include="Package.appxmanifest">
      <SubType>Designer</SubType>
    </AppxManifest>
  </ItemGroup>
  <ItemGroup>
    <!-- Resources -->
    <!-- This resw only defines things that are used in this package's AppxManifest,
         so it's not in the common resource items. -->
    <PRIResource Include="Resources\en-US\Resources.resw" />
    <PRIResource Include="Resources\Resources.resw" />
    <OCResourceDirectory Include="Resources" />
  </ItemGroup>

  <Import Project="$(OpenConsoleDir)src\wap-common.build.post.props" />
  <ItemGroup>
    <ProjectReference Include="..\WindowExe\WindowExe.vcxproj" />
  </ItemGroup>

  <ItemGroup>
    <Reference Include="Microsoft.Terminal.TerminalConnection">
      <HintPath>$(OpenConsoleCommonOutDir)TerminalConnection\Microsoft.Terminal.TerminalConnection.winmd</HintPath>
      <Implementation>$(OpenConsoleCommonOutDir)TerminalConnection\TerminalConnection.dll</Implementation>
      <IsWinMDFile>true</IsWinMDFile>
      <Private>true</Private>
      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
    </Reference>
    <Reference Include="Microsoft.Terminal.Control">
      <HintPath>$(OpenConsoleCommonOutDir)Microsoft.Terminal.Control\Microsoft.Terminal.Control.winmd</HintPath>
      <Implementation>$(OpenConsoleCommonOutDir)Microsoft.Terminal.Control\Microsoft.Terminal.Control.dll</Implementation>
      <IsWinMDFile>true</IsWinMDFile>
      <Private>true</Private>
      <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
    </Reference>
  </ItemGroup>


  <Target Name="OpenConsoleStompSourceProjectForWapProject" BeforeTargets="_ConvertItems">
    <ItemGroup>
      <!-- Stomp all "SourceProject" values for all incoming dependencies to flatten the package. -->
      <_TemporaryFilteredWapProjOutput Include="@(_FilteredNonWapProjProjectOutput)" />
      <_FilteredNonWapProjProjectOutput Remove="@(_TemporaryFilteredWapProjOutput)" />
      <_FilteredNonWapProjProjectOutput Include="@(_TemporaryFilteredWapProjOutput)">
        <!-- Blank the SourceProject here to vend all files into the root of the package. -->
        <SourceProject>
        </SourceProject>
      </_FilteredNonWapProjProjectOutput>
    </ItemGroup>
  </Target>
  <!-- Move all the PRI files that would be packaged into the appx into _PriFile so that
       GenerateProjectPriFile catches them. This requires us to move payload collection
       up before GenerateProjectPriFile, when it is typically _after_ it (because the
       DesktopBridge project type is built to only prepare the payload during appx manifest
       generation.

       Since PRI file generation is _before_ manifest generation (for possibly obvious or
       important reasons), that doesn't work for us.
  -->
  <Target Name="OpenConsoleLiftDesktopBridgePriFiles" DependsOnTargets="_ConvertItems">
    <ItemGroup>
      <_PriFile Include="@(_NonWapProjProjectOutput)" Condition="'%(Extension)' == '.pri'" />
      <!-- Remove all other .pri files from the appx payload. -->
      <AppxPackagePayload Remove="@(AppxPackagePayload)" Condition="'%(Extension)' == '.pri'" />
    </ItemGroup>
  </Target>
  <!-- VS 16.3.0 added a rule to the WAP packaging project that removes all non-WAP payload, which we were relying on to
       roll up our subproject resources. We have to suppress that rule but keep part of its logic, because that rule is
       where the AppxPackagePayload items are created. -->
  <PropertyGroup>
    <WapProjBeforeGenerateAppxManifestDependsOn>
        $([MSBuild]::Unescape('$(WapProjBeforeGenerateAppxManifestDependsOn.Replace('_RemoveAllNonWapUWPItems', '_OpenConsoleRemoveAllNonWapUWPItems'))'))
    </WapProjBeforeGenerateAppxManifestDependsOn>
  </PropertyGroup>
  <Target Name="_OpenConsoleRemoveAllNonWapUWPItems">
    <ItemGroup>
      <AppxPackagePayload Include="@(WapProjPackageFile)" />
      <AppxUploadPackagePayload Include="@(UploadWapProjPackageFile)" />
      <!-- 16.3.0 - remove non-resources.pri PRI files since we just forced them back in. -->
      <AppxPackagePayload Remove="@(AppxPackagePayload)" Condition="'%(Extension)' == '.pri' and '%(Filename)' != 'resources'" />
      <AppxUploadPackagePayload Remove="@(AppxUploadPackagePayload)" Condition="'%(Extension)' == '.pri' and '%(Filename)' != 'resources'" />
    </ItemGroup>
  </Target>

  <!-- **BEGIN VC LIBS HACK** -->
  <!--
    For our release builds, we're just going to integrate the UWPDesktop CRT into our package and delete the package dependencies.
    It's very difficult for users who do not have access to the store to get our dependency packages, and we want to be robust
    and deployable everywhere. Since these libraries can be redistributed, it's easiest if we simply redistribute them.
    See also the "VC LIBS HACK" section in WindowsTerminal.vcxproj.
  -->
  <!-- This target removes the FrameworkSdkReferences from before the AppX package targets manifest generation happens.
       This is part of the generic machinery that applies to every AppX. -->
  <Target Name="_OpenConsoleStripAllDependenciesFromPackageFirstManifest" BeforeTargets="_GenerateCurrentProjectAppxManifest">
    <ItemGroup Condition="'$(WindowsTerminalOfficialBuild)'=='true'">
      <FrameworkSdkReference Remove="@(FrameworkSdkReference)" />
    </ItemGroup>
  </Target>

  <!-- This target removes the FrameworkSdkPackages from before the *desktop bridge* manifest generation happens. -->
  <Target Name="_OpenConsoleStripAllDependenciesFromPackageSecondManifest" BeforeTargets="_GenerateDesktopBridgeAppxManifest" DependsOnTargets="_ResolveVCLibDependencies">
    <ItemGroup Condition="'$(WindowsTerminalOfficialBuild)'=='true'">
      <FrameworkSdkPackage Remove="@(FrameworkSdkPackage)" />
    </ItemGroup>
  </Target>
  <!-- **END VC LIBS HACK** -->

  <Import Project="$(SolutionDir)build\rules\CollectWildcardResources.targets" />
</Project>
