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

    Copyright 2016 Yahoo Inc.

    Licensed 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
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.yahoo.pulsar</groupId>
    <artifactId>pulsar</artifactId>
    <version>1.18</version>
    <relativePath>..</relativePath>
  </parent>

  <artifactId>pulsar-checksum</artifactId>
  <packaging>nar</packaging>
  <name>Pulsar Checksum</name>
  <description>Checksum library</description>

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

  <dependencies>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </dependency>

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

    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
    </dependency>
    
    <dependency>
      <groupId>com.googlecode.jmockit</groupId>
      <artifactId>jmockit</artifactId>
      <scope>test</scope>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>com.github.maven-nar</groupId>
        <artifactId>nar-maven-plugin</artifactId>
        <version>3.1.0</version>
        <extensions>true</extensions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4.1</version>
        <configuration>
          <descriptors>
            <descriptor>src/main/assembly/assembly.xml</descriptor>
          </descriptors>
          <appendAssemblyId>false</appendAssemblyId>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <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>3.1.0</version>
            <extensions>true</extensions>
            <configuration>
              <runtime>${nar.runtime}</runtime>
              <output>pulsar-checksum</output>
              <libraries>
                <library>
                  <type>jni</type>
                </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>3.1.0</version>
            <extensions>true</extensions>
            <configuration>
              <runtime>${nar.runtime}</runtime>
              <output>pulsar-checksum</output>
              <libraries>
                <library>
                  <type>jni</type>
                </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>
