<?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/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.datasketches</groupId>
    <artifactId>datasketches-memory-root</artifactId>
    <version>2.1.0</version>
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.apache.datasketches</groupId>
      <artifactId>datasketches-memory</artifactId>
      <version>${project.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <!-- Used for UTF8 testing -->
      <groupId>com.google.protobuf</groupId>
      <artifactId>protobuf-java</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <!-- Used for xxHash testing -->
      <groupId>net.openhft</groupId>
      <artifactId>zero-allocation-hashing</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <artifactId>datasketches-memory-resources</artifactId>
  <name>${project.artifactId}</name>

  <!-- The tests in the following profiles run against the assembled MR-JAR.  Hence, they
       only run during the Maven package phase. Different profiles are selected based on
       the environment-specific version of Java that was used to run `mvn package`.  This
       is because the new JPMS runtime arguments result in a catastrophic system error whilst
       using Java 8. Tests are scanned from dependency JARs using `dependenciesToScan`. -->
  <profiles>
    <profile>
      <id>java8</id>
      <activation>
        <jdk>[1.8,1.9),8</jdk>
        <property>
          <name>environment</name>
          <value>ci</value>
        </property>
      </activation>

      <properties>
        <jdk-toolchain.version>1.8</jdk-toolchain.version>
        <java.version>8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
      </properties>

      <dependencies>
        <dependency>
          <groupId>org.apache.datasketches</groupId>
          <artifactId>datasketches-memory-java8-tests</artifactId>
          <version>${project.version}</version>
          <classifier>tests</classifier>
          <scope>test</scope>
        </dependency>
      </dependencies>

      <build>
          <plugins>

            <plugin>
              <!-- Apache Parent pom, pluginManagement-->
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>${maven-surefire-plugin.version}</version>
              <executions>
                <execution>
                  <id>package-test</id>
                  <phase>package</phase>
                  <goals>
                    <goal>test</goal>
                  </goals>
                  <!-- does not provide JPMS runtime arguments -->
                  <configuration>
                    <skip>false</skip>
                    <dependenciesToScan>
                      <dependency>org.apache.datasketches:datasketches-memory-java8-tests</dependency>
                    </dependenciesToScan>
                    <reportsDirectory>${project.build.directory}/test-output/${maven.build.timestamp}</reportsDirectory>
                    <argLine />
                  </configuration>
                </execution>
              </executions>
            </plugin>

          </plugins>
      </build>
    </profile>

    <profile>
      <id>java11to13</id>
      <activation>
        <jdk>[11,14)</jdk>
        <property>
          <name>environment</name>
          <value>ci</value>
        </property>
      </activation>

      <properties>
        <!--suppress UnresolvedMavenProperty -->
        <jdk-toolchain.version>${matrix.jdk.version}</jdk-toolchain.version>
        <!--suppress UnresolvedMavenProperty -->
        <java.version>${matrix.jdk.version}</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
      </properties>

      <dependencies>
        <dependency>
          <groupId>org.apache.datasketches</groupId>
          <artifactId>datasketches-memory-java8-tests</artifactId>
          <version>${project.version}</version>
          <classifier>tests</classifier>
          <scope>test</scope>
        </dependency>
      </dependencies>

      <build>
        <plugins>

          <plugin>
            <!-- Apache Parent pom, pluginManagement-->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>${maven-surefire-plugin.version}</version>
            <executions>
              <execution>
                <id>package-test</id>
                <phase>package</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <skip>false</skip>
                  <argLine>
                    --add-exports java.base/jdk.internal.misc=ALL-UNNAMED
                    --add-exports java.base/jdk.internal.ref=ALL-UNNAMED
                    --add-opens java.base/java.nio=ALL-UNNAMED
                    --add-opens java.base/sun.nio.ch=ALL-UNNAMED
                  </argLine>
                  <dependenciesToScan>
                    <dependency>org.apache.datasketches:datasketches-memory-java8-tests</dependency>
                  </dependenciesToScan>
                  <reportsDirectory>${project.build.directory}/test-output/${maven.build.timestamp}</reportsDirectory>
                </configuration>
              </execution>
            </executions>
          </plugin>

        </plugins>
      </build>
    </profile>

  </profiles>
</project>
