<!--
   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

       https://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 Sdk="Microsoft.NET.Sdk">

  <Import Project="../../../common.props" />

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <!--
    Support .NET Core 3.1 (LTS), .NET 5.0, .NET 6.0 (LTS)
    When installing with 'dotnet tool install', the proper/supported framework will be selected,
    unless framework is explicitly specified with 'dotnet tool install'
    https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-tool-install
    -->
    <TargetFrameworks>$(DefaultExeTargetFrameworks)</TargetFrameworks>
    <AssemblyName>avrogen</AssemblyName>
    <RootNamespace>Avro.codegen</RootNamespace>
    <SignAssembly>true</SignAssembly>
    <AssemblyOriginatorKeyFile>..\..\..\Avro.snk</AssemblyOriginatorKeyFile>
  </PropertyGroup>

  <PropertyGroup>
    <!-- NuGet Package Settings -->
    <PackageId>Apache.Avro.Tools</PackageId>
    <PackAsTool>true</PackAsTool>
    <ToolCommandName>avrogen</ToolCommandName>
    <Description>
      Avro provides:

      Rich data structures.
      A compact, fast, binary data format.
      A container file, to store persistent data.
      Remote procedure call (RPC).
      Simple integration with dynamic languages. Code generation is not required to read or write data files nor to use or implement RPC protocols. Code generation as an optional optimization, only worth implementing for statically typed languages.
    </Description>
  </PropertyGroup>

  <!--
    Roll-forward to the next available higher major version, and lowest minor version, if requested major version is missing. If the requested major version is present, then the Minor policy is used.
    https://learn.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#rollforward
  -->
  <PropertyGroup>
    <RollForward>Major</RollForward>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)'=='Release'">
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <WarningsAsErrors />
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\main\Avro.main.csproj" />
  </ItemGroup>

</Project>
