<?xml version="1.0"?>
<!--

    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.bookkeeper</groupId>
    <artifactId>bookkeeper</artifactId>
    <version>4.10.0</version>
    <relativePath>..</relativePath>
  </parent>

  <artifactId>circe-checksum</artifactId>
  <packaging>nar</packaging>
  <name>Apache BookKeeper :: Circe Checksum Library</name>
  <description>Circe Checksum Library</description>

  <properties>
    <nar.runtime>dynamic</nar.runtime>
    <nar.cpp.optionSet>-msse4.2 -mpclmul</nar.cpp.optionSet>
  </properties>

  <dependencies>

    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
    </dependency>

    <dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty-buffer</artifactId>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven-compiler-plugin.version}</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <compilerArgs>
            <!-- Object.finalize() is deprecated at java 9 -->
            <!-- <compilerArg>-Werror</compilerArg> -->
            <compilerArg>-Xlint:deprecation</compilerArg>
            <compilerArg>-Xlint:unchecked</compilerArg>
            <!-- https://issues.apache.org/jira/browse/MCOMPILER-205 -->
            <compilerArg>-Xpkginfo:always</compilerArg>
          </compilerArgs>
        </configuration>
      </plugin>
      <plugin>
        <groupId>com.github.maven-nar</groupId>
        <artifactId>nar-maven-plugin</artifactId>
        <version>${nar-maven-plugin.version}</version>
        <extensions>true</extensions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>${maven-assembly-plugin.version}</version>
        <configuration>
          <descriptors>
            <descriptor>src/main/assembly/assembly.xml</descriptor>
          </descriptors>
          <appendAssemblyId>false</appendAssemblyId>
          <tarLongFileMode>posix</tarLongFileMode>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>${jacoco-maven-plugin.version}</version>
        <configuration>
            <excludes>
                <!-- this class is generated -->
                <exclude>com/scurrilous/circe/checksum/NarSystem*</exclude>
            </excludes>
        </configuration>
       </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <!-- from JDK10 javah command is not available
           see http://openjdk.java.net/jeps/313
      -->
      <id>jdk-without-javah</id>
      <activation>
         <jdk>[10,)</jdk>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>com.github.maven-nar</groupId>
            <artifactId>nar-maven-plugin</artifactId>
            <version>${nar-maven-plugin.version}</version>
            <extensions>true</extensions>
            <executions>
               <execution>
               <!-- javah is not present in JDK10 onwards,
                    you have to to use javac -h -->
                  <id>default-nar-javah</id>
                  <phase>none</phase>
               </execution>
             </executions>
          </plugin>
          <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-compiler-plugin</artifactId>
             <version>${maven-compiler-plugin.version}</version>
             <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <compilerArgs>
                  <!-- Object.finalize() is deprecated at java 9 -->
                  <!-- <compilerArg>-Werror</compilerArg> -->
                  <compilerArg>-Xlint:deprecation</compilerArg>
                  <compilerArg>-Xlint:unchecked</compilerArg>
                   <!-- https://issues.apache.org/jira/browse/MCOMPILER-205 -->
                  <compilerArg>-Xpkginfo:always</compilerArg>
                  <!-- add -h flag to javac -->
                  <compilerArg>-h</compilerArg>
                  <compilerArg>${project.build.directory}/nar/javah-include</compilerArg>
                </compilerArgs>
             </configuration>
          </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
      <id>mac</id>
      <activation>
        <os>
          <name>Mac OS X</name>
        </os>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>com.github.maven-nar</groupId>
            <artifactId>nar-maven-plugin</artifactId>
            <version>${nar-maven-plugin.version}</version>
            <extensions>true</extensions>
            <configuration>
              <runtime>${nar.runtime}</runtime>
              <output>circe-checksum</output>
              <libraries>
                <library>
                  <type>jni</type>
                  <narSystemPackage>com.scurrilous.circe.checksum</narSystemPackage>
                </library>
              </libraries>
              <cpp>
                <optionSet>${nar.cpp.optionSet}</optionSet>
                <exceptions>false</exceptions>
                <rtti>false</rtti>
                <optimize>full</optimize>
              </cpp>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>Linux</id>
      <activation>
        <os>
          <name>Linux</name>
        </os>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>com.github.maven-nar</groupId>
            <artifactId>nar-maven-plugin</artifactId>
            <version>${nar-maven-plugin.version}</version>
            <extensions>true</extensions>
            <configuration>
              <runtime>${nar.runtime}</runtime>
              <output>circe-checksum</output>
              <libraries>
                <library>
                  <type>jni</type>
                  <narSystemPackage>com.scurrilous.circe.checksum</narSystemPackage>
                </library>
              </libraries>
              <cpp>
                <optionSet>${nar.cpp.optionSet}</optionSet>
                <exceptions>false</exceptions>
                <rtti>false</rtti>
                <optimize>full</optimize>
              </cpp>
              <linker>
                <libSet>rt</libSet>
              </linker>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
