<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Label="Globals">
    <ProjectGuid>{a4394404-37f7-41c1-802b-49788d3720e3}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <RootNamespace>SampleApp</RootNamespace>
    <ProjectName>SampleAppLib</ProjectName>
    <TargetName>SampleAppLib</TargetName>
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <SubSystem>Console</SubSystem>
    <OpenConsoleUniversalApp>true</OpenConsoleUniversalApp>
    <!--
      This is an override that, puzzlingly, _forces XBF (XAML binary) embedding_.
      We have to do this to overcome a layout issue in the WAP packaging project.
      When we do this, the XBF ends up in resources.pri.
    -->
    <DisableEmbeddedXbf>false</DisableEmbeddedXbf>
    <XamlComponentResourceLocation>nested</XamlComponentResourceLocation>
  </PropertyGroup>

  <PropertyGroup Label="NuGet Dependencies">
    <TerminalCppWinrt>true</TerminalCppWinrt>
    <TerminalMUX>true</TerminalMUX>
  </PropertyGroup>
  <Import Project="$(SolutionDir)\common.openconsole.props" Condition="'$(OpenConsoleDir)'==''" />
  <Import Project="$(OpenConsoleDir)src\common.nugetversions.props" />
  <Import Project="$(OpenConsoleDir)src\cppwinrt.build.pre.props" />

  <!-- ========================= XAML files ======================== -->
  <ItemGroup>
    <!-- HERE BE DRAGONS:
      For any types that use XAML information, if their .idl and .h aren't
      marked DependentUpon the corresponding .xaml file, XamlTypeInfo.g.h won't
      pick it up correctly. -->
    <ApplicationDefinition Include="App.xaml">
      <SubType>Designer</SubType>
    </ApplicationDefinition>
  </ItemGroup>
  <!-- When we add other user controls, they should go in here as so: -->
  <ItemGroup>
    <Page Include="MyPage.xaml">
      <SubType>Designer</SubType>
    </Page>
  </ItemGroup>
  <!-- ========================= Headers ======================== -->
  <ItemGroup>
    <ClInclude Include="App.base.h" />
    <ClInclude Include="MySettings.h" />
    <ClInclude Include="MyPage.h">
      <DependentUpon>MyPage.xaml</DependentUpon>
      <SubType>Code</SubType>
    </ClInclude>
    <ClInclude Include="App.h">
      <DependentUpon>App.xaml</DependentUpon>
    </ClInclude>
    <ClInclude Include="SampleAppLogic.h">
      <DependentUpon>SampleAppLogic.idl</DependentUpon>
    </ClInclude>
  </ItemGroup>
  <!-- ========================= Cpp Files ======================== -->
  <ItemGroup>
    <ClCompile Include="init.cpp" />
    <ClCompile Include="MySettings.cpp" />
    <ClCompile Include="MyPage.cpp">
      <DependentUpon>MyPage.xaml</DependentUpon>
      <SubType>Code</SubType>
    </ClCompile>
    <ClCompile Include="pch.cpp">
      <PrecompiledHeader>Create</PrecompiledHeader>
    </ClCompile>
    <ClCompile Include="App.cpp">
      <DependentUpon>App.xaml</DependentUpon>
    </ClCompile>
    <ClCompile Include="SampleAppLogic.cpp">
      <DependentUpon>SampleAppLogic.idl</DependentUpon>
    </ClCompile>
    <ClCompile Include="$(GeneratedFilesDir)module.g.cpp" />

  </ItemGroup>
  <!-- ========================= idl Files ======================== -->
  <ItemGroup>
    <!-- If you add idl files here, make sure to include their implementation's
    header in SampleApp.vcxproj (as well as in this file) -->
    <Midl Include="App.idl">
      <DependentUpon>App.xaml</DependentUpon>
    </Midl>
    <Midl Include="SampleAppLogic.idl" />
    <Midl Include="MySettings.idl" />
    <Midl Include="MyPage.idl">
      <DependentUpon>MyPage.xaml</DependentUpon>
      <SubType>Code</SubType>
    </Midl>
  </ItemGroup>
  <!-- ========================= Misc Files ======================== -->
  <ItemGroup>
    <PRIResource Include="Resources\en-US\Resources.resw" />
    <OCResourceDirectory Include="Resources" />
    <None Include="packages.config" />
  </ItemGroup>
  <!-- ========================= Project References ======================== -->
  <PropertyGroup>
    <!-- This is a hack to get the ARM64 CI build working. See
    https://github.com/Microsoft/msbuild/issues/3746 - it looks like MsBuild
    just has a bug in it.-->
    <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>Warning</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
  </PropertyGroup>
  <!-- ========================== Other References ========================= -->
  <ItemGroup>
    <!-- Manually add references to each of our dependent winmds. Mark them as
    private=false and CopyLocalSatelliteAssemblies=false, so that we don't
    propagate them upwards (which can make referencing this project result in
    duplicate type definitions)-->
    <Reference Include="Microsoft.Terminal.Core">
      <HintPath>$(OpenConsoleCommonOutDir)TerminalCore\Microsoft.Terminal.Core.winmd</HintPath>
      <IsWinMDFile>true</IsWinMDFile>
      <Private>false</Private>
      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
    </Reference>
    <Reference Include="Microsoft.Terminal.TerminalConnection">
      <HintPath>$(OpenConsoleCommonOutDir)TerminalConnection\Microsoft.Terminal.TerminalConnection.winmd</HintPath>
      <IsWinMDFile>true</IsWinMDFile>
      <Private>false</Private>
      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
    </Reference>
    <Reference Include="Microsoft.Terminal.Control">
      <HintPath>$(OpenConsoleCommonOutDir)Microsoft.Terminal.Control\Microsoft.Terminal.Control.winmd</HintPath>
      <IsWinMDFile>true</IsWinMDFile>
      <Private>false</Private>
      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
    </Reference>

    <Reference Include="$(WindowsSDK_MetadataPathVersioned)\Windows.UI.Xaml.Hosting.HostingContract\*\*.winmd">
      <WinMDFile>true</WinMDFile>
      <CopyLocal>false</CopyLocal>
      <ReferenceGrouping>$(TargetPlatformMoniker)</ReferenceGrouping>
      <ReferenceGroupingDisplayName>$(TargetPlatformDisplayName)</ReferenceGroupingDisplayName>
      <ResolvedFrom>CppWinRTImplicitlyExpandTargetPlatform</ResolvedFrom>
      <IsSystemReference>True</IsSystemReference>
    </Reference>

  </ItemGroup>
  <!-- ====================== Compiler & Linker Flags ===================== -->
  <ItemDefinitionGroup>
    <ClCompile>
      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
      <AdditionalIncludeDirectories>..;%(AdditionalIncludeDirectories);</AdditionalIncludeDirectories>
      <!-- Manually disable unreachable code warning, because jconcpp has a ton of that. -->
      <DisableSpecificWarnings>4702;%(DisableSpecificWarnings)</DisableSpecificWarnings>
    </ClCompile>
    <Link>
      <AdditionalDependencies>$(OpenConsoleCommonOutDir)\ConTypes.lib;WindowsApp.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <!-- ========================= Globals ======================== -->
  <Import Project="$(OpenConsoleDir)src\cppwinrt.build.post.props" />

  <!-- This -must- go after cppwinrt.build.post.props because that includes many VS-provided props including appcontainer.common.props, which stomps on what cppwinrt.targets did. -->
  <Import Project="$(OpenConsoleDir)src\common.nugetversions.targets" />

  <!--
    By default, the PRI file will contain resource paths beginning with the
    project name. Since we enabled XBF embedding, this *also* includes App.xbf.
    Well, App.xbf is hard-coded by the framework to be found at the resource ROOT.
    To make that happen, we have to disable the prepending of the project name
    to the App xaml files.
  -->
  <PropertyGroup>
    <_GenerateProjectPriFileDependsOn>OpenConsolePlaceAppXbfAtRootOfResourceTree;$(_GenerateProjectPriFileDependsOn)</_GenerateProjectPriFileDependsOn>
  </PropertyGroup>
  <Target Name="OpenConsolePlaceAppXbfAtRootOfResourceTree" DependsOnTargets="GetPackagingOutputs">
    <ItemGroup>
      <_RelocatedAppXamlData Include="@(PackagingOutputs)" Condition="'%(Filename)' == 'App' and ('%(Extension)' == '.xaml' or '%(Extension)' == '.xbf')" />
      <PackagingOutputs Remove="@(_RelocatedAppXamlData)" />
      <PackagingOutputs Include="@(_RelocatedAppXamlData)">
        <TargetPath>%(Filename)%(Extension)</TargetPath>
      </PackagingOutputs>
    </ItemGroup>
  </Target>

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