<?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>1.1.33.Fork13</version>
  </parent>
  <artifactId>netty-tcnative-boringssl-static</artifactId>
  <packaging>jar</packaging>

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

  <properties>
    <boringsslCheckoutDir>${project.build.directory}/boringssl-${boringsslBranch}</boringsslCheckoutDir>
    <boringsslBuildDir>${boringsslCheckoutDir}/build</boringsslBuildDir>
    <linkStatic>true</linkStatic>
    <msvcSslIncludeDirs>${boringsslCheckoutDir}/include</msvcSslIncludeDirs>
    <msvcSslLibDirs>${boringsslBuildDir}/ssl;${boringsslBuildDir}/crypto;${boringsslBuildDir}/decrepit</msvcSslLibDirs>
    <msvcSslLibs>ssl.lib;crypto.lib;decrepit.lib</msvcSslLibs>
  </properties>

  <build>
    <plugins>
      <!-- Download the BoringSSL source -->
      <plugin>
        <artifactId>maven-scm-plugin</artifactId>
        <executions>
          <execution>
            <id>get-boringssl</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>checkout</goal>
            </goals>
            <configuration>
              <checkoutDirectory>${boringsslCheckoutDir}</checkoutDirectory>
              <connectionType>developerConnection</connectionType>
              <developerConnectionUrl>scm:git:https://boringssl.googlesource.com/boringssl</developerConnectionUrl>
              <scmVersion>${boringsslBranch}</scmVersion>
              <scmVersionType>branch</scmVersionType>
              <skipCheckoutIfExists>true</skipCheckoutIfExists>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- Determine the commit ID of the source code. -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <executions>
          <execution>
            <phase>generate-sources</phase>
            <goals>
              <goal>create</goal>
            </goals>
            <configuration>
              <scmDirectory>${boringsslCheckoutDir}</scmDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- Add the commit ID and branch to the manifest. -->
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <configuration>
          <instructions>
            <Apr-Version>${aprVersion}</Apr-Version>
            <BoringSSL-Revision>${buildNumber}</BoringSSL-Revision>
            <BoringSSL-Branch>${boringsslBranch}</BoringSSL-Branch>
          </instructions>
        </configuration>
      </plugin>

      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>

          <!-- Only deploy to Maven Central if on centos (fedora). -->
          <execution>
            <id>skip-deploy</id>
            <phase>initialize</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <exportAntProperties>true</exportAntProperties>
              <target>
                <condition property="maven.deploy.skip" value="false" else="true">
                  <isset property="os.detected.release.like.fedora" />
                </condition>
              </target>
            </configuration>
          </execution>

          <!-- Build the BoringSSL static libs -->
          <execution>
            <id>build-boringssl</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <mkdir dir="${boringsslBuildDir}" />
                <exec executable="cmake" failonerror="true" dir="${boringsslBuildDir}" resolveexecutable="true">
                  <arg value="-DCMAKE_POSITION_INDEPENDENT_CODE=TRUE" />
                  <arg value="-DCMAKE_BUILD_TYPE=Release" />
                  <arg value="-GNinja" />
                  <arg value=".." />
                </exec>
                <exec executable="ninja" failonerror="true" dir="${boringsslBuildDir}" resolveexecutable="true" />
              </target>
            </configuration>
          </execution>

          <!-- 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>

      <!-- 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=no</configureArg>
                <configureArg>--with-apr=${aprHome}</configureArg>
                <configureArg>CPPFLAGS=-DHAVE_OPENSSL -I${boringsslCheckoutDir}/include</configureArg>
                <configureArg>LDFLAGS=-L${boringsslBuildDir}/ssl -L${boringsslBuildDir}/crypto -L${boringsslBuildDir}/decrepit -ldecrepit -lssl -lcrypto</configureArg>
              </configureArgs>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
