﻿<!--

 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>

    <!-- .NET 8 SDK has a breaking change where they automatically add the commit hash to InformationalVersion unless it is explicitly disabled. -->
    <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
  </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>
