<!--
  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>4.0.0-SNAPSHOT</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>
    <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>
