<!--

 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>
  <!-- Features in .NET Standard and .NET Core only (no .NET Framework support) -->
  <PropertyGroup Condition=" $(TargetFramework.StartsWith('netstandard')) Or $(TargetFramework.StartsWith('netcoreapp')) ">
    <DefineConstants>$(DefineConstants);NETSTANDARD</DefineConstants>
    <DefineConstants>$(DefineConstants);FEATURE_ARRAYEMPTY</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 Standard 2.x, .NET Core 2.x, and .NET Core 3.x -->
  <PropertyGroup Condition=" $(TargetFramework.StartsWith('netstandard2.')) Or $(TargetFramework.StartsWith('netcoreapp2.')) Or $(TargetFramework.StartsWith('netcoreapp3.')) ">

    <DefineConstants>$(DefineConstants);FEATURE_ICONFIGURATIONROOT_PROVIDERS</DefineConstants>
    <DefineConstants>$(DefineConstants);FEATURE_ICONFIGURATIONBUILDER_PROPERTIES_AS_IDICTIONARY</DefineConstants>
    <DefineConstants>$(DefineConstants);FEATURE_ICONFIGURATIONBUILDER_SOURCES_AS_ILIST</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.6+ only -->
  <PropertyGroup Condition="$(TargetFramework.StartsWith('net46')) Or $(TargetFramework.StartsWith('net47')) Or $(TargetFramework.StartsWith('net48'))">
    <DefineConstants>$(DefineConstants);FEATURE_ARRAYEMPTY</DefineConstants>
  </PropertyGroup>

  <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="BeforeCompile" 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>