<?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 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache</groupId>
        <artifactId>apache</artifactId>
        <version>21</version>
        <relativePath></relativePath> <!-- fixes dumb maven warning -->
    </parent>

    <groupId>org.apache.datasketches</groupId>
    <artifactId>datasketches-memory</artifactId>

    <version>1.1.0-incubating</version>
    
    <name>${project.groupId}:${project.artifactId}</name>
    <description>High-performance native memory access.</description>
    <url>https://datasketches.apache.org/</url>
    <inceptionYear>2015</inceptionYear>
    <packaging>jar</packaging> <!-- jar is the default -->

    <!-- With the 3.6.1 version of Maven this causes a warning to obsolete this in
         favor of using the enforcer plugin (which we do).  But removing this
         causes the command "mvn versions:display-plugin-updates" to issue an error 
         and not work properly. So this will stay for the time being. -->
    <prerequisites>
        <maven>3.2.0</maven>
    </prerequisites>

    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <scm>
        <connection>scm:git:ssh://git@github.com/apache/incubator-datasketches-memory.git</connection>
        <developerConnection>scm:git:ssh://git@github.com/apache/incubator-datasketches-memory.git</developerConnection>
        <url>https://github.com/apache/incubator-datasketches-memory</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/incubator-datasketches-memory/issues</url>
    </issueManagement>

    <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 Commits</name>
          <subscribe>commits-subscribe@datasketches.apache.org</subscribe>
          <unsubscribe>commits-unsubscribe@datasketches.apache.org</unsubscribe>
          <post>commits@datasketches.apache.org</post>
          <archive>http://www.mail-archive.com/commits%datasketches.apache.org</archive>
        </mailingList>
        <mailingList>
            <name>sketches-user</name>
            <archive>https://groups.google.com/forum/#!forum/sketches-user</archive>
            <subscribe>mailto:sketches-user%2Bsubscribe@googlegroups.com</subscribe>
            <unsubscribe>mailto:sketches-user%2Bunsubscribe@googlegroups.com</unsubscribe>
            <post>mailto:sketches-user@googlegroups.com</post>
        </mailingList>
    </mailingLists>

    <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>
        <!-- System-wide properties -->
        <argLine>-Xmx4g -Duser.language=en -Duser.country=US -Dfile.encoding=UTF-8</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>
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>

        <!-- Dependencies -->
        <testng.version>6.14.3</testng.version>
        <slf4j-api.version>1.7.27</slf4j-api.version>
        <protobuf-java.version>3.6.0</protobuf-java.version> <!-- Used for UTF8 testing -->
        <zero-allocation-hashing.version>0.8</zero-allocation-hashing.version>

        <!-- org.codehaus.plexus used for strict profile testing-->
        <plexus-compiler-javac-errorprone.version>2.8.5</plexus-compiler-javac-errorprone.version>
        
        <!--  Maven Plugins -->
        <maven-assembly-plugin.version>3.1.1</maven-assembly-plugin.version>
        <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
        <maven-deploy-plugin.version>3.0.0-M1</maven-deploy-plugin.version>
        <maven-enforcer-plugin.version>3.0.0-M2</maven-enforcer-plugin.version>
        <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
        <maven-jar-plugin.version>3.1.2</maven-jar-plugin.version>
        <maven-javadoc-plugin.version>3.1.1</maven-javadoc-plugin.version>
        <maven-release-plugin.version>2.5.3</maven-release-plugin.version>
        <maven-remote-resources-plugin.version>[1.0,)</maven-remote-resources-plugin.version>
        <maven-source-plugin.version>3.1.0</maven-source-plugin.version>
        <maven-surefire-plugin.version>3.0.0-M3</maven-surefire-plugin.version>
        
        <!-- Apache Plugins -->
        <apache-rat-plugin.version>0.13</apache-rat-plugin.version>
            

        <!-- org.jacoco Maven Plugins -->
        <jacoco-maven-plugin.version>0.8.4</jacoco-maven-plugin.version>

        <!-- org.eluder Maven Plugins -->
        <coveralls-maven-plugin.version>4.3.0</coveralls-maven-plugin.version>
        
        <!-- other -->
        <reproducible-build-maven-plugin.version>0.4</reproducible-build-maven-plugin.version>
        <lifecycle-mapping.version>1.0.0</lifecycle-mapping.version>
        <git-commit-id-plugin.version>3.0.0</git-commit-id-plugin.version>
    </properties>

    <repositories>
        <repository>
            <id>apache.snapshots</id>
            <name>Apache Snapshot Repository</name>
            <url>https://repository.apache.org/content/groups/snapshots</url>
            <releases>
              <enabled>false</enabled>
            </releases>
            <snapshots>
              <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
              <id>apache</id>
              <name>Apache Repository</name>
              <url>https://repository.apache.org/content/repositories/releases/</url>
              <releases>
                <enabled>true</enabled>
              </releases>
              <snapshots>
                <enabled>false</enabled>
              </snapshots>
            </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j-api.version}</version>
        </dependency>

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

        <dependency>
            <!-- Used for UTF8 testing -->
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>${protobuf-java.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <!-- Used for xxHash testing -->
            <groupId>net.openhft</groupId>
            <artifactId>zero-allocation-hashing</artifactId>
            <version>${zero-allocation-hashing.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

            <!-- Apache Parent pom, pluginManagement-->
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-release-plugin</artifactId>
              <version>${maven-release-plugin.version}</version>
            </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>
                      <manifestEntries>
                          <Build-Jdk>${java.version} (${java.vendor} ${java.vm.version})</Build-Jdk>
                          <Build-OS>${os.name} ${os.arch} ${os.version}</Build-OS>
                          <Build-Timestamp>${git.build.time}</Build-Timestamp>
                          <Build-Version>${git.build.version}</Build-Version>
                          <Build-Revision>${git.commit.id}</Build-Revision>
                          <Build-Revision-Describe>${git.commit.id.describe}</Build-Revision-Describe>
                      </manifestEntries>
                  </archive>
              </configuration>
            </plugin>

            <!-- Extends Apache Parent pom, apache-release profile -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>${maven-javadoc-plugin.version}</version>
                <configuration>
                  <docfilessubdirs>true</docfilessubdirs>
                </configuration>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </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>1.8.0</version>
                                </requireJavaVersion>
                                <requireMavenVersion>
                                    <version>3.2,</version>
                                </requireMavenVersion>
                                <bannedDependencies>
                                    <excludes>
                                        <!--LGPL licenced library-->
                                        <exclude>com.google.code.findbugs:annotations</exclude>
                                    </excludes>
                                </bannedDependencies>
                            </rules>
                            <fail>true</fail>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- Apache Parent pom, pluginManagement-->
            <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>**/test/resources/**/*.txt</exclude>
                  <exclude>LICENSE</exclude>
                  <exclude>NOTICE</exclude>
                  <exclude>DISCLAIMER</exclude>
                </excludes>
              </configuration>
            </plugin>

            <!-- Extends Apache Parent pom, apache-release profile -->
            <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>

            <!-- Apache Parent pom, pluginManagement-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire-plugin.version}</version>
                <configuration>
                  <trimStackTrace>false</trimStackTrace>
                  <useManifestOnlyJar>false</useManifestOnlyJar>
                  <redirectTestOutputToFile>true</redirectTestOutputToFile>
                </configuration>
            </plugin>

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

             <!-- Submit code coverage report to Coveralls.io. -->
            <plugin>
                <groupId>org.eluder.coveralls</groupId>
                <artifactId>coveralls-maven-plugin</artifactId>
                <version>${coveralls-maven-plugin.version}</version>
                <configuration>
                    <!-- Since we use Travis CI we do not have to put a Coveralls token here. -->
                </configuration>
            </plugin>

            <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>
                    <failOnNoGitDirectory>true</failOnNoGitDirectory>
                    <failOnUnableToExtractRepoInfo>true</failOnUnableToExtractRepoInfo>
                    <commitIdGenerationMode>full</commitIdGenerationMode>
                    <includeOnlyProperties>
                        <includeProperty>git.branch</includeProperty>
                        <includeProperty>git.build.version</includeProperty>
                        <includeProperty>git.closest.tag.name</includeProperty>
                        <includeProperty>git.commit.id.describe</includeProperty>
                        <includeProperty>git.commit.id.full</includeProperty>
                        <includeProperty>git.commit.message.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>

        </plugins>
    </build>

    <profiles>
        <!-- Ignore nuisance warning from Apache parent plugin: 
          "maven-remote-resources-plugin (goal "process") is ignored by m2e".
          This also should fix the Maven warning that it can't find the lifecycle-mapping jar.
          This profile is only active when the property "m2e.version" is set, 
          which is the case when building in Eclipse with m2e.
          The ignore below tells m2eclipse to skip the execution.
        -->
        <profile>
            <id>m2e</id>
            <activation>
              <property>
                <name>m2e.version</name>
              </property>
            </activation>
            <build>
                <pluginManagement>
                  <plugins>
                    <plugin>
                      <groupId>org.eclipse.m2e</groupId>
                      <artifactId>lifecycle-mapping</artifactId>
                      <version>${lifecycle-mapping.version}</version>
                      <configuration>
                        <lifecycleMappingMetadata>
                          <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>org.apache.maven.plugins</groupId>
                                    <artifactId>maven-remote-resources-plugin</artifactId>
                                    <versionRange>${maven-remote-resources-plugin.version}</versionRange>
                                    <goals>
                                        <goal>process</goal>
                                    </goals>
                                </pluginExecutionFilter>
                              <action>
                                <ignore />
                              </action>
                            </pluginExecution>
                          </pluginExecutions>
                        </lifecycleMappingMetadata>
                      </configuration>
                    </plugin>
                  </plugins>
                </pluginManagement>
            </build>
        </profile>

        <profile>
            <id>strict</id>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-compiler-plugin</artifactId>
                            <version>${maven-compiler-plugin.version}</version>
                            <configuration>
                                <source>${maven.compiler.source}</source>
                                <target>${maven.compiler.target}</target>
                                <compilerId>javac-with-errorprone</compilerId>
                                <forceJavacCompilerUse>true</forceJavacCompilerUse>
                            </configuration>
                            <dependencies>
                                <dependency>
                                    <groupId>org.codehaus.plexus</groupId>
                                    <artifactId>plexus-compiler-javac-errorprone</artifactId>
                                    <version>${plexus-compiler-javac-errorprone.version}</version>
                                </dependency>
                            </dependencies>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>
        
        <profile>
          <id>sign</id>
          <build>
            <plugins>
              <!-- We want to sign the artifacts, POM, and all attached artifacts -->
              <!-- Apache Parent pom, PM, apache-release profile -->
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-gpg-plugin</artifactId>
                <version>${maven-gpg-plugin.version}</version>
                <executions>
                  <execution>
                    <id>sign-release-artifacts</id>
                    <goals>
                      <goal>sign</goal>
                    </goals>
                    <phase>verify</phase>
                  </execution>
                </executions>
              </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>
        
    </profiles>
</project>
