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

  <!-- Common repo directories -->
  <PropertyGroup>
    <RepoRoot>$(MSBuildThisFileDirectory)../</RepoRoot>
    <CSharpDir>$(MSBuildThisFileDirectory)</CSharpDir>
    <BaseOutputPath>$(CSharpDir)/artifacts/$(MSBuildProjectName)</BaseOutputPath>
  </PropertyGroup>

  <!-- AssemblyInfo properties -->
  <PropertyGroup>
    <Product>Apache Arrow library</Product>
    <Copyright>Copyright 2016-2019 The Apache Software Foundation</Copyright>
    <Company>The Apache Software Foundation</Company>
    <Version>10.0.1</Version>
  </PropertyGroup>

  <PropertyGroup>
    <EmbedUntrackedSources>true</EmbedUntrackedSources>
    <LangVersion>8.0</LangVersion>
    <SignAssembly>true</SignAssembly>
    <AssemblyOriginatorKeyFile>$(CSharpDir)ApacheArrow.snk</AssemblyOriginatorKeyFile>
  </PropertyGroup>

  <!-- NuGet properties -->
  <PropertyGroup>
    <Authors>The Apache Software Foundation</Authors>
    <PackageIconUrl>https://www.apache.org/images/feather.png</PackageIconUrl>
    <!-- We can't use PackageLicenseExpression; the license file also contains 3rd-party notices. -->
    <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
    <PackageProjectUrl>https://arrow.apache.org/</PackageProjectUrl>
    <PackageTags>apache arrow</PackageTags>
    <RepositoryType>git</RepositoryType>
    <RepositoryUrl>https://github.com/apache/arrow</RepositoryUrl>
    <IncludeSymbols>true</IncludeSymbols>
    <SymbolPackageFormat>snupkg</SymbolPackageFormat>
  </PropertyGroup>

  <ItemGroup Condition="'$(IsPackable)' == 'true'">
    <Content Include="$(RepoRoot)LICENSE.txt" Pack="true" PackagePath="" />
  </ItemGroup>

</Project>
