<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 2016 The Netty Project
  ~
  ~ The Netty Project 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>io.netty</groupId>
    <artifactId>netty-tcnative-parent</artifactId>
    <version>2.0.3.Final</version>
  </parent>
  <artifactId>netty-tcnative-libressl-static</artifactId>
  <packaging>jar</packaging>

  <name>Netty/TomcatNative [LibreSSL - Static]</name>
  <description>
    A Mavenized fork of Tomcat Native which incorporates various patches. This artifact is statically linked
    to LibreSSL and Apache APR.
  </description>

  <properties>
    <libresslCheckoutDir>${project.build.directory}/libressl-${libresslVersion}</libresslCheckoutDir>
    <libresslBuildDir>${libresslCheckoutDir}/build-ninja</libresslBuildDir>
    <libresslArchive>libressl-${libresslVersion}.tar.gz</libresslArchive>
    <linkStatic>true</linkStatic>
    <!-- Don't deploy this artifact to Maven Central -->
    <maven.deploy.skip>true</maven.deploy.skip>
  </properties>

  <build>
    <plugins>
      <!-- Configure the distribution statically linked against OpenSSL and APR -->
      <plugin>
        <groupId>org.fusesource.hawtjni</groupId>
        <artifactId>maven-hawtjni-plugin</artifactId>
        <executions>
          <execution>
            <id>build-native-lib</id>
            <goals>
              <goal>generate</goal>
              <goal>build</goal>
            </goals>
            <phase>compile</phase>
            <configuration>
              <name>netty-tcnative</name>
              <nativeSourceDirectory>${project.basedir}/src/main/c</nativeSourceDirectory>
              <libDirectory>${nativeLibOnlyDir}</libDirectory>
              <forceAutogen>${forceAutogen}</forceAutogen>
              <forceConfigure>${forceConfigure}</forceConfigure>
              <windowsBuildTool>msbuild</windowsBuildTool>
              <configureArgs>
                <configureArg>--with-ssl=${sslHome}</configureArg>
                <configureArg>--with-apr=${aprHome}</configureArg>
              </configureArgs>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- Add the LibreSSL version to the manifest. -->
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <configuration>
          <instructions>
            <Apr-Version>${aprVersion}</Apr-Version>
            <LibreSSL-Version>${libresslVersion}</LibreSSL-Version>
          </instructions>
        </configuration>
      </plugin>

      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <!-- Build the additional JAR that contains the native library. -->
          <execution>
            <id>native-jar</id>
            <phase>package</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <copy todir="${nativeJarWorkdir}">
                  <zipfileset src="${defaultJarFile}" />
                </copy>
                <copy todir="${nativeJarWorkdir}" includeEmptyDirs="false">
                  <zipfileset dir="${nativeLibOnlyDir}/META-INF/native" />
                  <regexpmapper handledirsep="yes" from="^(?:[^/]+/)*([^/]+)$" to="META-INF/native/\1" />
                </copy>
                <jar destfile="${nativeJarFile}" manifest="${nativeJarWorkdir}/META-INF/MANIFEST.MF" basedir="${nativeJarWorkdir}" index="true" excludes="META-INF/MANIFEST.MF,META-INF/INDEX.LIST" />
                <attachartifact file="${nativeJarFile}" classifier="${os.detected.classifier}" type="jar" />
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>build-libressl-windows</id>
      <activation>
        <os>
          <family>windows</family>
        </os>
      </activation>
      <properties>
        <msvcSslLibs>libssl-39.lib; libcrypto-38.lib; libtls-11.lib</msvcSslLibs>
        <msvcSslLibDirs>${sslHome}/x${archBits}</msvcSslLibDirs>
        <libresslWindows>libressl-${libresslVersion}-windows</libresslWindows>
        <libresslWindowsZip>${libresslWindows}.zip</libresslWindowsZip>
      </properties>
      <build>
        <plugins>
          <!-- Download the LibreSSL source -->
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <id>build-libressl-windows</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target>
                    <get src="http://192.168.2.16:8090/download/l/libressl/${libresslWindowsZip}" dest="${project.build.directory}/${libresslWindowsZip}" verbose="on" />
                    <unzip src="${project.build.directory}/${libresslWindowsZip}" dest="${project.build.directory}/" />
                    <move file="${project.build.directory}/${libresslWindows}" tofile="${sslHome}" />
                  </target>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>build-libressl-linux-mac</id>
      <activation>
        <os>
          <family>!windows</family>
        </os>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <!-- Download and build LibreSSL -->
              <execution>
                <id>build-libressl-linux-mac</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target>
                    <get src="http://192.168.2.16:8090/download/l/libressl/${libresslArchive}" dest="${project.build.directory}/${libresslArchive}" verbose="on" />
                    <checksum file="${project.build.directory}/${libresslArchive}" algorithm="SHA-256" property="${libresslSha256}" verifyProperty="isEqual" />
                    <exec executable="tar" failonerror="true" dir="${project.build.directory}/" resolveexecutable="true">
                      <arg value="xfv" />
                      <arg value="${libresslArchive}" />
                    </exec>
                    <mkdir dir="${sslHome}" />
                    <exec executable="configure" failonerror="true" dir="${libresslCheckoutDir}" resolveexecutable="true">
                      <arg line="--disable-shared --prefix=${sslHome} CFLAGS='-O3 -fno-omit-frame-pointer -fPIC'" />
                    </exec>
                    <exec executable="make" failonerror="true" dir="${libresslCheckoutDir}" resolveexecutable="true" />
                    <exec executable="make" failonerror="true" dir="${libresslCheckoutDir}" resolveexecutable="true">
                      <arg line="install" />
                    </exec>
                  </target>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
