<Project Sdk="MSBuild.Sdk.Extras">
  <PropertyGroup>
    <AssemblyName>protobuf-net</AssemblyName>
    <Title>protobuf-net</Title>
    <Description>Provides simple access to fast and efficient "Protocol Buffers" serialization from .NET applications</Description>
    <TargetFrameworks>net20;net35;net452;netstandard2.0;netcoreapp3.1</TargetFrameworks>
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
    <DefineConstants>EMIT_ASSEMBLY_INFO</DefineConstants>
    <!-- new build tools spit these out -->
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>

    <!-- this is how we will configure the builds relatively cleanly -->
    <ImportLibs>net</ImportLibs>
    <FeatureCompiler>true</FeatureCompiler>
    <FeatureServiceModel>true</FeatureServiceModel>
    <FeatureServiceModelConfiguration>true</FeatureServiceModelConfiguration>
    <PlatformXmlSerializer>true</PlatformXmlSerializer>
    <PlatformBinaryFormatter>true</PlatformBinaryFormatter>
    <Configurations>Debug;Release;VS</Configurations>
  </PropertyGroup>
  <!-- define configuration per-platform -->
  <PropertyGroup Condition="'$(TargetFramework)' == 'net20'">
    <FeatureServiceModel>false</FeatureServiceModel>
  </PropertyGroup>
  <PropertyGroup Condition="'$(TargetFramework)' == 'uap10.0'">
    <FeatureServiceModel>false</FeatureServiceModel>
    <FeatureServiceModelConfiguration>false</FeatureServiceModelConfiguration>
    <FeatureCompiler>false</FeatureCompiler>
    <PlatformBinaryFormatter>false</PlatformBinaryFormatter>
    <DefineConstants>$(DefineConstants);COREFX;UAP</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
    <DefineConstants>$(DefineConstants);COREFX</DefineConstants>
    <ImportLibs>standard</ImportLibs>
    <FeatureServiceModel>true</FeatureServiceModel>
    <FeatureServiceModelConfiguration>false</FeatureServiceModelConfiguration>
  </PropertyGroup>
  <PropertyGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
    <DefineConstants>$(DefineConstants);COREFX</DefineConstants>
    <ImportLibs>none</ImportLibs>
    <FeatureServiceModel>true</FeatureServiceModel>
    <FeatureServiceModelConfiguration>false</FeatureServiceModelConfiguration>
  </PropertyGroup>
  <!-- apply the configuration options (typical via defines that switch code flows) -->
  <PropertyGroup Condition="'$(FeatureCompiler)' == 'true'">
    <DefineConstants>$(DefineConstants);FEAT_COMPILER</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Condition="'$(FeatureServiceModel)' == 'true'">
    <DefineConstants>$(DefineConstants);FEAT_SERVICEMODEL</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Condition="'$(FeatureServiceModelConfiguration)' == 'true'">
    <DefineConstants>$(DefineConstants);FEAT_SERVICECONFIGMODEL</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Condition="'$(PlatformXmlSerializer)' == 'true'">
    <DefineConstants>$(DefineConstants);PLAT_XMLSERIALIZER</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Condition="'$(PlatformBinaryFormatter)' == 'true'">
    <DefineConstants>$(DefineConstants);PLAT_BINARYFORMATTER</DefineConstants>
  </PropertyGroup>
  <ItemGroup Condition="'$(ImportLibs)|$(FeatureServiceModel)' == 'net|true'">
    <Reference Include="System.ServiceModel" />
    <Reference Include="System.Configuration" />
    <Reference Include="System.Runtime.Serialization" />
  </ItemGroup>
  <ItemGroup Condition="'$(ImportLibs)' == 'standard' and '$(FeatureCompiler)' == 'true'">
    <PackageReference Include="System.Reflection.Emit" Version="4.3.0" />
    <PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.3.0" />
  </ItemGroup>
  <ItemGroup Condition="'$(ImportLibs)' == 'none' and '$(FeatureServiceModel)' == 'true'">
    <PackageReference Include="System.ServiceModel.Primitives" Version="4.5.3" />
  </ItemGroup>
  <ItemGroup Condition="'$(ImportLibs)' == 'standard' and '$(FeatureServiceModel)' == 'true'">
    <PackageReference Include="System.ServiceModel.Primitives" Version="4.5.3" />
  </ItemGroup>
  <ItemGroup Condition="'$(ImportLibs)' == 'standard'">
    <PackageReference Include="System.Reflection.TypeExtensions" Version="4.4.0" />
    <PackageReference Include="System.Xml.XmlSerializer" Version="4.3.0" />    
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.2">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
  </ItemGroup>
</Project>