﻿<!--

 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>
    <!-- According to the docs (https://docs.microsoft.com/en-us/cpp/build/reference/common-macros-for-build-commands-and-properties?view=vs-2019), the 
      SolutionDir is only available when running in the IDE, so we patch to ensure it also works when using dotnet.exe -->
    <SolutionDir Condition=" '$(SolutionDir)' == '' ">$(MSBuildThisFileDirectory)</SolutionDir>
  </PropertyGroup>
  
  <PropertyGroup>
    <LangVersion>9.0</LangVersion>
    <GitHubOrganization>apache</GitHubOrganization>
    <GitHubProject>lucenenet</GitHubProject>
  </PropertyGroup>

  <!-- IMPORTANT: When these values are changed, the CI counter number should also be reset. -->
  <PropertyGroup Label="Version of Builds">
    <!-- IMPORTANT: VersionPrefix must always be the same as the Lucene version this is based on.
      Never increment it for an individual build - only increment this when an entire version's changes
      are ported over from Lucene. This is what determines the version of all of the NuGet packages and binaries. 
      For patching a production build, we will add a 4th segment (4.8.0.1) since it would be confusing to increment to 
      4.8.1 if we haven't actually ported over the changes from Lucene 4.8.1. -->
    <VersionPrefix>4.8.0</VersionPrefix>

    <!-- .NET enforces AssemblyVersion as the "major" version (when strong-named),
      so AssemblyVersion should only be changed for each major version release. -->
    <AssemblyVersion>4.0.0</AssemblyVersion>
  </PropertyGroup>

  <PropertyGroup Label="Assembly Signing">
    <AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)Lucene.Net.snk</AssemblyOriginatorKeyFile>
    <PublicKey>002400000480000094000000060200000024000052534131000400000100010075a07ce602f88ef263c7db8cb342c58ebd49ecdcc210fac874260b0213fb929ac3dcaf4f5b39744b800f99073eca72aebfac5f7284e1d5f2c82012a804a140f06d7d043d83e830cdb606a04da2ad5374cc92c0a49508437802fb4f8fb80a05e59f80afb99f4ccd0dfe44065743543c4b053b669509d29d332cd32a0cb1e97e84</PublicKey>
    <SignAssembly>true</SignAssembly>
  </PropertyGroup>

  <PropertyGroup Label="Assembly Publishing">
    <IsPublishable>false</IsPublishable>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  </PropertyGroup>

  <PropertyGroup Label="NuGet Package Defaults">
    <IsPackable>false</IsPackable>
    <IncludeSymbols>true</IncludeSymbols>
    <!-- This is the new symbols format (the only one currently supported at NuGet.org) -->
    <SymbolPackageFormat>snupkg</SymbolPackageFormat>
  </PropertyGroup>

  <PropertyGroup Label="Copyright Info">
    <Product>Lucene.Net</Product>
    <Company>The Apache Software Foundation</Company>
    <CurrentYear Condition=" '$(CurrentYear)' == '' ">$([System.DateTime]::UtcNow.Year.ToString())</CurrentYear>
    <BeginCopyrightYear>2006</BeginCopyrightYear>
    <CopyrightYearRange>$(BeginCopyrightYear) - $(CurrentYear)</CopyrightYearRange>
    <CopyrightYearRange Condition=" '$(BeginCopyrightYear)' == '$(CurrentYear)' ">$(CurrentYear)</CopyrightYearRange>
    <Copyright>Copyright © $(CopyrightYearRange) $(Company)</Copyright>
  </PropertyGroup>

  <PropertyGroup Label="SourceLink Settings: https://github.com/dotnet/sourcelink/blob/main/README.md">
    <PublishRepositoryUrl>true</PublishRepositoryUrl>
    <EmbedUntrackedSources>true</EmbedUntrackedSources>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(BUILD_REPOSITORY_PROVIDER)' == 'GitHub' Or '$(BUILD_REPOSITORY_PROVIDER)' == 'TfsGit' " Label="Deterministic builds: https://github.com/clairernovotny/DeterministicBuilds#readme">
    <ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
  </PropertyGroup>

  <!-- Settings to override the above Version of Builds. These can be used to 
      "freeze" the build number for a release, so whether building within 
      an IDE or from the commmand line, the version is always what is 
      in Version.props, if it exists and the PrepareForBuild argument 
      passed into build.ps1 is 'false'. -->
  <Import Project="version.props" Condition="Exists('version.props')" />
</Project>