<!--

 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.

-->
<Project>
  <PropertyGroup Condition=" $(TargetFramework.StartsWith('netstandard')) Or $(TargetFramework.StartsWith('netcoreapp')) ">
    <DefineConstants>$(DefineConstants);NETSTANDARD</DefineConstants>
    <DebugType>portable</DebugType>
  </PropertyGroup>

  <!-- Features in .NET Standard 2.1 only -->
  <PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard2.1' Or $(TargetFramework.StartsWith('netcoreapp3.')) ">

    <DefineConstants>$(DefineConstants);FEATURE_CONDITIONALWEAKTABLE_ENUMERATOR</DefineConstants>
    <DefineConstants>$(DefineConstants);FEATURE_CONDITIONALWEAKTABLE_ADDORUPDATE</DefineConstants>
    
  </PropertyGroup>

  <!-- Features in .NET Framework 4.5+, .NET Standard 2.x, .NET Core 2.x, and .NET Core 3.x -->
  <PropertyGroup Condition=" $(TargetFramework.StartsWith('net4')) Or $(TargetFramework.StartsWith('netstandard2.')) Or $(TargetFramework.StartsWith('netcoreapp2.')) Or $(TargetFramework.StartsWith('netcoreapp3.')) ">
    
    <DefineConstants>$(DefineConstants);FEATURE_CONCURRENTMERGESCHEDULER</DefineConstants>
    <DefineConstants>$(DefineConstants);FEATURE_THREADPOOL_UNSAFEQUEUEWORKITEM</DefineConstants>
    <DefineConstants>$(DefineConstants);FEATURE_FILESTREAM_LOCK</DefineConstants>
    <DefineConstants>$(DefineConstants);FEATURE_SERIALIZABLE</DefineConstants>
    <DefineConstants>$(DefineConstants);FEATURE_DTD_PROCESSING</DefineConstants>
    <DefineConstants>$(DefineConstants);FEATURE_XSLT</DefineConstants>
    <DefineConstants>$(DefineConstants);FEATURE_THREAD_PRIORITY</DefineConstants>

    <!-- NOTE: Microsoft's recommendation is not to use the ICloneable interface.
        To add it to the build, just add /p:IncludeICloneable to the command line. -->
    <DefineConstants Condition=" '$(IncludeICloneable)' == 'true' ">$(DefineConstants);FEATURE_CLONEABLE</DefineConstants>
  </PropertyGroup>

  <!-- Features in .NET Standard 1.x and .NET Core 1.x -->
  <PropertyGroup Condition=" $(TargetFramework.StartsWith('netstandard1.')) Or $(TargetFramework.StartsWith('netcoreapp1.')) ">
    
    <DefineConstants>$(DefineConstants);NETSTANDARD1_6</DefineConstants>
    <DefineConstants>$(DefineConstants);FEATURE_STACKTRACE</DefineConstants>
    
  </PropertyGroup>

  <!-- Features in .NET Framework 4.5+ only -->
  <PropertyGroup Condition="$(TargetFramework.StartsWith('net4'))">
    
    <DefineConstants>$(DefineConstants);FEATURE_SERIALIZABLE_EXCEPTIONS</DefineConstants>
    
    <DebugType>full</DebugType>
  </PropertyGroup>

  <PropertyGroup>
    <!-- NuGet.org only supports portable debug symbol format: 
         https://docs.microsoft.com/en-us/nuget/create-packages/symbol-packages-snupkg#nugetorg-symbol-package-constraints -->
    <DebugType Condition=" '$(PortableDebugTypeOnly)' == 'true' ">portable</DebugType>
  </PropertyGroup>

  <Target Name="AddInternalsVisibleTo" BeforeTargets="CoreCompile" Label="Adds InternalsVisibleTo Attribute and PublicKey (if supplied)">
    <ItemGroup Condition="'@(InternalsVisibleTo->Count())' &gt; 0 ">
      <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
        <_Parameter1>%(InternalsVisibleTo.Identity)</_Parameter1>
        <_Parameter1 Condition=" '$(SignAssembly)' == 'true' And '$(PublicKey)' != '' ">%(InternalsVisibleTo.Identity), PublicKey=$(PublicKey)</_Parameter1>
      </AssemblyAttribute>
    </ItemGroup>
  </Target>

  <Import Project="build\Release.targets" Condition="Exists('build\Release.targets')" />

</Project>