<?xml version="1.0" encoding="UTF-8"?>
<!--
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 xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             https://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>32</version>
  </parent>

  <groupId>org.apache.datasketches</groupId>
  <artifactId>datasketches-java</artifactId>
  <version>7.0.1</version>
  <packaging>jar</packaging>

  <name>${project.artifactId}</name>
  <description>Core sketch algorithms used alone and by other Java repositories in the DataSketches library.</description>
  <url>https://datasketches.apache.org/</url>
  <inceptionYear>2015</inceptionYear>

  <mailingLists>
    <mailingList>
      <name>DataSketches Developers</name>
      <subscribe>dev-subscribe@datasketches.apache.org</subscribe>
      <unsubscribe>dev-unsubscribe@datasketches.apache.org</unsubscribe>
      <post>dev@datasketches.apache.org</post>
      <archive>https://mail-archives.apache.org/mod_mbox/datasketches-dev</archive>
    </mailingList>
    <mailingList>
      <name>DataSketches Users</name>
      <subscribe>user-subscribe@datasketches.apache.org</subscribe>
      <unsubscribe>user-unsubscribe@datasketches.apache.org</unsubscribe>
      <post>user@datasketches.apache.org</post>
      <archive>https://mail-archives.apache.org/mod_mbox/datasketches-user</archive>
    </mailingList>
  </mailingLists>

  <scm>
    <connection>scm:git:ssh://git@github.com/apache/${project.artifactId}.git</connection>
    <developerConnection>scm:git:ssh://git@github.com/apache/${project.artifactId}.git</developerConnection>
    <url>https://github.com/apache/${project.artifactId}</url>
    <tag>HEAD</tag>
  </scm>

  <issueManagement>
    <!-- <system>jira</system>
      <url>https://issues.apache.org/jira/browse/DATASKETCHES</url> -->
    <system>GitHub</system>
    <url>https://github.com/apache/${project.artifactId}/issues</url>
  </issueManagement>

  <developers>
    <developer>
      <name>The Apache DataSketches Team</name>
      <email>dev@datasketches.apache.org</email>
      <url>https://datasketches.apache.org</url>
      <organization>Apache Software Foundation</organization>
      <organizationUrl>http://www.apache.org</organizationUrl>
    </developer>
  </developers>

  <properties>
    <datasketches-memory.version>4.1.0</datasketches-memory.version>

    <!-- Test -->
    <testng.version>7.10.2</testng.version>
    <!-- these are TestNG groups used for excluding / including groups of tests. See profiles section. -->
    <testng.generate-java-files>generate_java_files</testng.generate-java-files>
    <testng.check-cpp-files>check_cpp_files</testng.check-cpp-files>
    <testng.check-cpp-historical-files>check_cpp_historical_files</testng.check-cpp-historical-files>

    <!-- System-wide properties -->
    <maven.version>3.6.3</maven.version>
    <java.version>17</java.version>
    <add-modules>--add-modules=jdk.incubator.foreign</add-modules>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <argLine>-Xmx4g -Duser.language=en -Duser.country=US -Dfile.encoding=UTF-8 ${add-modules}</argLine>
    <charset.encoding>UTF-8</charset.encoding>
    <project.build.sourceEncoding>${charset.encoding}</project.build.sourceEncoding>
    <project.build.resourceEncoding>${charset.encoding}</project.build.resourceEncoding>
    <project.reporting.outputEncoding>${charset.encoding}</project.reporting.outputEncoding>
    <maven.build.timestamp.format>yyyy-MM-dd'T'HH-mm-ss'Z'</maven.build.timestamp.format>

    <!--  org.apache.maven plugins -->
    <maven-assembly-plugin.version>3.7.1</maven-assembly-plugin.version>
    <maven-compiler-plugin.version>3.13.0</maven-compiler-plugin.version>
    <maven-deploy-plugin.version>3.1.3</maven-deploy-plugin.version>
    <maven-enforcer-plugin.version>3.5.0</maven-enforcer-plugin.version>
    <maven-gpg-plugin.version>3.2.7</maven-gpg-plugin.version>
    <maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
    <maven-javadoc-plugin.version>3.11.2</maven-javadoc-plugin.version>
    <maven-release-plugin.version>3.1.1</maven-release-plugin.version>
    <maven-remote-resources-plugin.version>3.2.0</maven-remote-resources-plugin.version>
    <maven-source-plugin.version>3.3.1</maven-source-plugin.version>
    <maven-surefire-failsafe-plugins.version>3.5.2</maven-surefire-failsafe-plugins.version> <!-- for surefire, failsafe and surefire-report -->
    <maven-toolchains-plugin.version>3.2.0</maven-toolchains-plugin.version>
    <!-- com.github plugins -->
    <git-commit-id-plugin.version>4.9.10</git-commit-id-plugin.version>
    <!-- org.apache.creadur plugins -->
    <apache-rat-plugin.version>0.16.1</apache-rat-plugin.version>
    <!-- org.eluder maven plugins -->
    <coveralls-repo-token></coveralls-repo-token>
    <coveralls-maven-plugin.version>4.3.0</coveralls-maven-plugin.version>
    <!-- org.jacoco.maven plugins -->
    <jacoco-maven-plugin.version>0.8.12</jacoco-maven-plugin.version>
    <!-- org.mojohaus plugins -->
    <versions-maven-plugin.version>2.18.0</versions-maven-plugin.version>
    <!-- other -->
    <lifecycle-mapping.version>1.0.0</lifecycle-mapping.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.datasketches</groupId>
      <artifactId>datasketches-memory</artifactId>
      <version>${datasketches-memory.version}</version>
    </dependency>

    <!-- Test Scope -->
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>${testng.version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement>
      <plugins>

        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>${maven-assembly-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>${maven-compiler-plugin.version}</version>
          <configuration>
            <compilerArgs>
              <arg>${add-modules}</arg>
            </compilerArgs>
          </configuration>
        </plugin>

        <plugin>
          <!-- We want to deploy the artifacts to a staging location for perusal -->
          <!-- Apache Parent pom: apache-release profile -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>${maven-deploy-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-enforcer-plugin</artifactId>
          <version>${maven-enforcer-plugin.version}</version>
          <executions>
            <execution>
              <id>enforce-banned-dependencies</id>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <rules>
                  <requireJavaVersion>
                    <version>${java.version}</version>
                  </requireJavaVersion>
                  <requireMavenVersion>
                    <version>[${maven.version},4.0.0)</version>
                  </requireMavenVersion>
                  <bannedDependencies>
                    <excludes>
                      <!--LGPL licensed library-->
                      <exclude>com.google.code.findbugs:annotations</exclude>
                    </excludes>
                  </bannedDependencies>
                </rules>
                <fail>true</fail>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>${maven-jar-plugin.version}</version>
          <executions>
            <execution>
              <id>default-jar</id>
              <phase>package</phase>
              <goals>
                <goal>jar</goal>
              </goals>
            </execution>
            <execution>
              <id>default-test-jar</id>
              <phase>package</phase>
              <goals>
                <goal>test-jar</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>${maven-javadoc-plugin.version}</version>
          <configuration>
            <docfilessubdirs>true</docfilessubdirs>
            <show>public</show>
            <additionalOptions>
              <additionalOption>${add-modules}</additionalOption>
            </additionalOptions>
          </configuration>
          <executions>
            <execution>
              <id>attach-javadocs</id>
              <goals>
                <goal>jar</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <version>${maven-release-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>${maven-source-plugin.version}</version>
          <executions>
            <execution>
              <id>attach-sources</id>
              <phase>package</phase>
              <goals>
                <goal>jar-no-fork</goal>
              </goals>
            </execution>
            <execution>
              <id>attach-test-sources</id>
              <phase>package</phase>
              <goals>
                <goal>test-jar-no-fork</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${maven-surefire-failsafe-plugins.version}</version>
          <configuration>
            <argLine>${add-modules}</argLine>
            <trimStackTrace>false</trimStackTrace>
            <useManifestOnlyJar>false</useManifestOnlyJar>
            <redirectTestOutputToFile>true</redirectTestOutputToFile>
            <reportsDirectory>${project.build.directory}/test-output/${maven.build.timestamp}</reportsDirectory>
            <excludedGroups>${testng.generate-java-files},${testng.check-cpp-files}</excludedGroups>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-toolchains-plugin</artifactId>
          <version>${maven-toolchains-plugin.version}</version>
          <executions>
            <execution>
              <goals>
                <goal>toolchain</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <toolchains>
              <jdk>
                <version>${java.version}</version>
              </jdk>
            </toolchains>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <version>${apache-rat-plugin.version}</version>
          <executions>
            <execution>
              <phase>verify</phase>
              <goals>
                <goal>check</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <outputDirectory>${project.basedir}/rat</outputDirectory>
            <consoleOutput>true</consoleOutput>
            <useDefaultExcludes>true</useDefaultExcludes>
            <excludes>
              <!-- rat uses .gitignore for excludes by default -->
              <exclude>**/*.yaml</exclude>
              <exclude>**/*.yml</exclude>
              <exclude>**/.*</exclude>
              <exclude>**/test/resources/**/*.txt</exclude>
              <exclude>**/git.properties</exclude>
              <exclude>**/*.sk</exclude>
              <exclude>LICENSE</exclude>
              <exclude>NOTICE</exclude>
            </excludes>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>versions-maven-plugin</artifactId>
          <version>${versions-maven-plugin.version}</version>
        </plugin>

        <plugin>
          <!-- Submit code coverage report to Coveralls.io. -->
          <groupId>org.eluder.coveralls</groupId>
          <artifactId>coveralls-maven-plugin</artifactId>
          <version>${coveralls-maven-plugin.version}</version>
          <configuration>
            <repoToken>${coveralls-repo-token}</repoToken>
          </configuration>
        </plugin>

        <plugin>
          <!-- Generates code coverage report from website. -->
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>${jacoco-maven-plugin.version}</version>
          <executions>
            <execution>
              <id>default-prepare-agent</id>
              <goals>
                <goal>prepare-agent</goal>
              </goals>
            </execution>
            <execution>
              <id>default-report</id>
              <goals>
                <goal>report</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>pl.project13.maven</groupId>
          <artifactId>git-commit-id-plugin</artifactId>
          <version>${git-commit-id-plugin.version}</version>
        </plugin>

      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-toolchains-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.eluder.coveralls</groupId>
        <artifactId>coveralls-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>pl.project13.maven</groupId>
        <artifactId>git-commit-id-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

  <profiles>

    <!--  This profile is used to release signed jars to the Apache Nexus repository.
          This must be executed from a git repository set at the proper Release branch (e.g., 1.1.X)
          and at a Release Candidate tag (e.g., 1.1.0-RC1).
          The pom version in the release branch must be properly set to something like: "1.1.0".
          The pom version in the master would be set to something like: "1.2.0-SNAPSHOT".
          Test Command: mvn clean verify -Pnexus-jars -DskipTests=true
          Command: mvn clean deploy -Dnexus-jars
          Verify Command (from terminal): gpg -v &#45;&#45;verify $ASC $FILE # dashdashverify
    -->
    <profile>
      <id>nexus-jars</id>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>pl.project13.maven</groupId>
              <artifactId>git-commit-id-plugin</artifactId>
              <version>${git-commit-id-plugin.version}</version>
              <executions>
                <execution>
                  <goals>
                    <goal>revision</goal>
                  </goals>
                  <phase>initialize</phase>
                </execution>
              </executions>
              <configuration>
                <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
                <dateFormatTimeZone>UTC</dateFormatTimeZone>
                <verbose>false</verbose>
                <skipPoms>false</skipPoms>
                <format>json</format>
                <generateGitPropertiesFile>true</generateGitPropertiesFile>
                <generateGitPropertiesFilename>${project.build.directory}/git.properties</generateGitPropertiesFilename>
                <!-- Maven commands are sometimes run on the release artifact directly, which is not a Git repository -->
                <failOnNoGitDirectory>false</failOnNoGitDirectory>
                <failOnUnableToExtractRepoInfo>true</failOnUnableToExtractRepoInfo>
                <commitIdGenerationMode>full</commitIdGenerationMode>
                <includeOnlyProperties>
                  <includeProperty>git.branch</includeProperty>
                  <includeProperty>git.commit.id.full</includeProperty>
                  <includeProperty>git.commit.time</includeProperty>
                  <includeProperty>git.commit.user.email</includeProperty>
                  <includeProperty>git.tags</includeProperty>
                </includeOnlyProperties>
                <gitDescribe>
                  <skip>false</skip>
                  <always>true</always>
                  <abbrev>7</abbrev>
                  <dirty>-dirty</dirty>
                  <tags>true</tags>
                  <forceLongFormat>true</forceLongFormat>
                </gitDescribe>
              </configuration>
            </plugin>

            <!-- Extends Apache Parent pom, pluginManagement-->
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-jar-plugin</artifactId>
              <version>${maven-jar-plugin.version}</version>
              <executions>
                <execution>
                  <id>default-jar</id>
                  <goals>
                    <goal>jar</goal>
                  </goals>
                </execution>
                <execution>
                  <id>default-test-jar</id>
                  <goals>
                    <goal>test-jar</goal>
                  </goals>
                </execution>
              </executions>
              <configuration>
                <archive>
                  <manifest>
                    <addDefaultEntries>false</addDefaultEntries>
                    <addDefaultSpecificationEntries>false</addDefaultSpecificationEntries>
                    <addDefaultImplementationEntries>false</addDefaultImplementationEntries>
                  </manifest>
                  <manifestEntries>
                    <Build-Jdk>${java.version} (${java.vendor} ${java.vm.version})</Build-Jdk>
                    <Build-OS>${os.name} ${os.arch} ${os.version}</Build-OS>
                    <Implementation-Vendor>The Apache Software Foundation</Implementation-Vendor>
                    <GroupId-ArtifactId>${project.groupId}:${project.artifactId}</GroupId-ArtifactId>
                    <!-- these properties are generated by the git-commit-id-plugin during initialize -->
                    <!--suppress UnresolvedMavenProperty -->
                    <git-branch>${git.branch}</git-branch>
                    <!--suppress UnresolvedMavenProperty -->
                    <git-commit-id>${git.commit.id.full}</git-commit-id>
                    <!--suppress UnresolvedMavenProperty -->
                    <git-commit-time>${git.commit.time}</git-commit-time>
                    <!--suppress UnresolvedMavenProperty -->
                    <git-commit-user-email>${git.commit.user.email}</git-commit-user-email>
                    <!--suppress UnresolvedMavenProperty -->
                    <git-commit-tag>${git.tags}</git-commit-tag>
                  </manifestEntries>
                </archive>
              </configuration>
            </plugin>

            <!-- We want to sign the artifacts, POM, and all attached artifacts -->
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-gpg-plugin</artifactId>
              <version>${maven-gpg-plugin.version}</version>
              <executions>
                <execution>
                  <id>sign-artifacts</id>
                  <phase>verify</phase>
                  <goals>
                    <goal>sign</goal>
                  </goals>
                </execution>
              </executions>
              <configuration>
                <gpgArguments>
                  <arg>--verbose</arg>
                  <!-- prints the algorithm used -->
                  <arg>--personal-digest-preferences=SHA512</arg>
                </gpgArguments>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>

        <plugins>
          <plugin>
            <groupId>pl.project13.maven</groupId>
            <artifactId>git-commit-id-plugin</artifactId>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!-- Disable source release assembly for 'apache-release' profile.
             This is performed from a script outside Maven
    <profile>
      <id>apache-release</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>${maven-assembly-plugin.version}</version>
            <executions>
              <execution>
                <id>source-release-assembly</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile> -->

    <profile>
      <id>generate-java-files</id>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <!-- Apache Parent pom, pluginManagement-->
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <configuration>
                <groups>${testng.generate-java-files}</groups>
                <excludedGroups>${testng.check-cpp-files},${testng.check-cpp-historical-files}</excludedGroups>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>

    <profile>
      <id>check-cpp-files</id>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <!-- Apache Parent pom, pluginManagement-->
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <configuration>
                <groups>${testng.check-cpp-files}</groups>
                <excludedGroups>${testng.generate-java-files},${testng.check-cpp-historical-files}</excludedGroups>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>
    
    <profile>
      <id>check-cpp-historical-files</id>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <!-- Apache Parent pom, pluginManagement-->
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <configuration>
                <groups>${testng.check-cpp-historical-files}</groups>
                <excludedGroups>${testng.generate-java-files},${testng.check-cpp-files}</excludedGroups>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>
  </profiles>
</project>