<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 2014 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>org.sonatype.oss</groupId>
    <artifactId>oss-parent</artifactId>
    <version>9</version>
  </parent>

  <groupId>io.netty</groupId>
  <artifactId>netty-tcnative-parent</artifactId>
  <version>2.0.74.Final</version>
  <packaging>pom</packaging>

  <name>Netty/TomcatNative [Parent]</name>
  <url>https://github.com/netty/netty-tcnative/</url>
  <description>
    A Mavenized fork of Tomcat Native which incorporates various patches
  </description>

  <scm>
    <url>https://github.com/netty/netty-tcnative</url>
    <connection>scm:git:git://github.com/netty/netty-tcnative.git</connection>
    <developerConnection>scm:git:ssh://git@github.com/netty/netty-tcnative.git</developerConnection>
    <tag>HEAD</tag>
  </scm>

  <developers>
    <developer>
      <id>netty.io</id>
      <name>The Netty Project Contributors</name>
      <email>netty@googlegroups.com</email>
      <url>https://netty.io/</url>
      <organization>The Netty Project</organization>
      <organizationUrl>https://netty.io/</organizationUrl>
    </developer>
  </developers>

  <organization>
    <name>The Netty Project</name>
    <url>https://netty.io/</url>
  </organization>

  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <distributionManagement>
    <snapshotRepository>
      <name>Central Portal Snapshots</name>
      <id>central-portal-snapshots</id>
      <url>https://central.sonatype.com/repository/maven-snapshots/</url>
    </snapshotRepository>
  </distributionManagement>

  <properties>
    <maven.javadoc.failOnError>false</maven.javadoc.failOnError>
    <checkstyle.skip>true</checkstyle.skip>
    <enforcer.plugin.version>1.4.1</enforcer.plugin.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.release>8</maven.compiler.release>
    <netty.build.version>31</netty.build.version>
    <junit.version>5.9.0</junit.version>
    <animal.sniffer.skip>true</animal.sniffer.skip>
    <forceAutogen>false</forceAutogen>
    <forceConfigure>false</forceConfigure>
    <opensslDynamicDir>../openssl-dynamic</opensslDynamicDir>
    <vsStaticTemplateFile>../vs2010.vcxproj.static.template</vsStaticTemplateFile>
    <defaultJarFile>${project.build.directory}/${project.build.finalName}.jar</defaultJarFile>
    <nativeJarFile>${project.build.directory}/${project.build.finalName}-${os.detected.classifier}.jar</nativeJarFile>
    <nativeLibOnlyDir>${project.build.directory}/native-lib-only</nativeLibOnlyDir>
    <nativeJarWorkdir>${project.build.directory}/native-jar-work</nativeJarWorkdir>
    <nativeLibOsParts>${os.detected.name}_${os.detected.arch}</nativeLibOsParts>
    <aprVersion>1.7.5</aprVersion>
    <aprSha256>3375fa365d67bcf945e52b52cba07abea57ef530f40b281ffbe977a9251361db</aprSha256>
    <boringsslBranch>main</boringsslBranch>
    <!--
      See https://boringssl.googlesource.com/boringssl/+/refs/heads/main for the latest commit
    -->
    <boringsslCommitSha>0226f30467f540a3f62ef48d453f93927da199b6</boringsslCommitSha>
    <libresslVersion>3.4.3</libresslVersion>
    <!--
      See https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/SHA256 for the SHA256 signature
    -->
    <libresslSha256>ff88bffe354818b3ccf545e3cafe454c5031c7a77217074f533271d63c37f08d</libresslSha256>
    <opensslMinorVersion>3.1</opensslMinorVersion>
    <opensslPatchVersion>6</opensslPatchVersion>
    <opensslVersion>${opensslMinorVersion}.${opensslPatchVersion}</opensslVersion>
    <opensslSha256>5d2be4036b478ef3cb0a854ca9b353072c3a0e26d8a56f8f0ab9fb6ed32d38d7</opensslSha256>
    <aprHome>${project.build.directory}/apr</aprHome>
    <aprSourceDir>${project.build.directory}/apr-source</aprSourceDir>
    <aprBuildDir>${project.build.directory}/apr-build</aprBuildDir>
    <archBits>64</archBits>
    <linkStatic>false</linkStatic>
    <crossCompile>false</crossCompile>
    <sslHome>${project.build.directory}/ssl</sslHome>
    <msvcSslIncludeDirs>${sslHome}/include</msvcSslIncludeDirs>
    <msvcSslLibDirs>${sslHome}/lib</msvcSslLibDirs>
    <msvcSslLibs>libssl.lib;libcrypto.lib</msvcSslLibs>
    <strip.skip>false</strip.skip>
    <generatedSourcesDir>${project.build.directory}/generated-sources</generatedSourcesDir>
    <macOsxDeploymentTarget>MACOSX_DEPLOYMENT_TARGET=10.9</macOsxDeploymentTarget>
    <cmakeOsxDeploymentTarget>-DCMAKE_OSX_DEPLOYMENT_TARGET=10.9</cmakeOsxDeploymentTarget>
    <jniArch>${os.detected.arch}</jniArch>
    <jniClassifier>${os.detected.name}-${os.detected.arch}</jniClassifier>
    <skipJapicmp>false</skipJapicmp>
    <compileLibrary>false</compileLibrary>
    <jniUtilIncludeDir>${project.build.directory}/netty-jni-util/</jniUtilIncludeDir>
    <jniUtilVersion>0.0.10.Final</jniUtilVersion>
    <javaDefaultModuleName>io.netty.internal.tcnative</javaDefaultModuleName>
    <javaModuleName>${javaDefaultModuleName}</javaModuleName>
    <javaModuleNameClassifier>${os.detected.name}.${os.detected.arch}</javaModuleNameClassifier>
    <javaModuleNameNative>${javaDefaultModuleName}.openssl.${javaModuleNameClassifier}</javaModuleNameNative>
  </properties>

  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>

    <extensions>
      <!-- Generate os.detected.classifier property -->
      <extension>
        <groupId>kr.motd.maven</groupId>
        <artifactId>os-maven-plugin</artifactId>
        <version>1.7.1</version>
      </extension>
    </extensions>

    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-enforcer-plugin</artifactId>
          <version>${enforcer.plugin.version}</version>
          <dependencies>
            <!-- Provides the 'requireFilesContent' enforcer rule. -->
            <dependency>
              <groupId>com.ceilfors.maven.plugin</groupId>
              <artifactId>enforcer-rules</artifactId>
              <version>1.2.0</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>org.fusesource.hawtjni</groupId>
          <artifactId>hawtjni-maven-plugin</artifactId>
          <version>1.18</version>
        </plugin>
        <plugin>
          <artifactId>maven-scm-plugin</artifactId>
          <version>1.11.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>buildnumber-maven-plugin</artifactId>
          <version>1.4</version>
        </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>3.1.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.8</version>
          <dependencies>
            <dependency>
              <groupId>org.apache.ant</groupId>
              <artifactId>ant</artifactId>
              <version>1.10.11</version>
            </dependency>
            <dependency>
              <groupId>org.apache.ant</groupId>
              <artifactId>ant-commons-net</artifactId>
              <version>1.9.6</version>
            </dependency>
            <dependency>
              <groupId>ant-contrib</groupId>
              <artifactId>ant-contrib</artifactId>
              <version>1.0b3</version>
            </dependency>
          </dependencies>
        </plugin>
      </plugins>
    </pluginManagement>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>3.3.1</version>
        <executions>
          <execution>
            <id>attach-javadocs</id>
            <goals>
              <goal>jar</goal>
            </goals>
            <configuration>
              <additionalparam>-Xdoclint:none</additionalparam>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.13.0</version>
        <configuration>
          <source>${maven.compiler.source}</source>
          <target>${maven.compiler.target}</target>
          <release>${maven.compiler.release}</release>
        </configuration>
      </plugin>

      <plugin>
        <groupId>io.github.dmlloyd.module-info</groupId>
        <artifactId>module-info</artifactId>
        <version>2.1</version>
        <executions>
          <execution>
            <id>default-jar-module-info</id>
            <phase>process-classes</phase>
            <configuration>
              <moduleName>${javaModuleName}</moduleName>
              <outputDirectory>${project.build.outputDirectory}/META-INF/versions/11/</outputDirectory>
            </configuration>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
          <execution>
            <id>native-jar-module-info</id>
            <phase>process-classes</phase>
            <configuration>
              <moduleName>${javaModuleNameNative}</moduleName>
              <outputDirectory>${nativeJarWorkdir}//META-INF/versions/11/</outputDirectory>
            </configuration>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.22.2</version>
        <configuration combine.self="override">
          <includes>
            <include>**/*Test*.java</include>
            <include>**/*Benchmark*.java</include>
          </includes>
          <excludes>
            <exclude>**/Abstract*</exclude>
            <exclude>**/*TestUtil*</exclude>
          </excludes>
          <runOrder>random</runOrder>
          <!-- Ensure the whole stacktrace is preserved when an exception is thrown. See https://issues.apache.org/jira/browse/SUREFIRE-1457 -->
          <trimStackTrace>false</trimStackTrace>
          <!-- Always check JNI during test run so we catch bugs that could cause crashes -->
          <argLine>-ea -Xcheck:jni</argLine>
        </configuration>
      </plugin>

     <plugin>
        <groupId>com.github.siom79.japicmp</groupId>
        <artifactId>japicmp-maven-plugin</artifactId>
        <version>0.15.4</version>
        <configuration>
          <parameter>
            <ignoreMissingOldVersion>true</ignoreMissingOldVersion>
            <breakBuildOnBinaryIncompatibleModifications>true</breakBuildOnBinaryIncompatibleModifications>
            <breakBuildOnSourceIncompatibleModifications>true</breakBuildOnSourceIncompatibleModifications>
            <oldVersionPattern>\d+\.\d+\.\d+\.Final</oldVersionPattern>
          </parameter>
          <skip>${skipJapicmp}</skip>
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>cmp</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <!-- unpack netty-jni-util files -->
          <execution>
            <id>unpack</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>unpack-dependencies</goal>
            </goals>
            <configuration>
              <includeGroupIds>io.netty</includeGroupIds>
              <includeArtifactIds>netty-jni-util</includeArtifactIds>
              <classifier>sources</classifier>
              <outputDirectory>${jniUtilIncludeDir}</outputDirectory>
              <includes>**.h,**.c</includes>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>true</overWriteSnapshots>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
           <id>copy-src</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target if="${compileLibrary}">
                <!-- Copy all of the code from the dynamic module -->
                <delete dir="${generatedSourcesDir}" quiet="true" />
                <copy todir="${generatedSourcesDir}" verbose="true">
                  <fileset dir="${opensslDynamicDir}/src/main" />
                </copy>

                <copy todir="${generatedSourcesDir}/c" verbose="true">
                  <fileset dir="${jniUtilIncludeDir}" />
                </copy>
              </target>
            </configuration>
          </execution>
          <!-- Generate the source for a statically-linked modules by copying from the template -->
          <execution>
            <id>setup-template</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target if="${linkStatic}">

                <!-- Convert the paths to windows format -->
                <pathconvert property="aprHomeWindowsPath" targetos="windows">
                  <path location="${aprHome}" />
                </pathconvert>
                <pathconvert property="sslIncludeDirsWindowsPath" targetos="windows">
                  <path location="${msvcSslIncludeDirs}" />
                </pathconvert>
                <pathconvert property="sslLibDirsWindowsPath" targetos="windows">
                  <path location="${msvcSslLibDirs}" />
                </pathconvert>
                <property name="aprIncludeDir" value="${aprHomeWindowsPath}\include" />
                <property name="aprLibDir" value="${aprHomeWindowsPath}\lib" />

                <echo message="Setting APR_INCLUDE_DIR=${aprIncludeDir}" />
                <echo message="Setting APR_LIB_DIR=${aprLibDir}" />
                <echo message="Setting SSL_INCLUDE_DIRS=${sslIncludeDirsWindowsPath}" />
                <echo message="Setting SSL_LIB_DIRS=${sslLibDirsWindowsPath}" />
                <echo message="Setting SSL_LIBS=${msvcSslLibs}" />

                <!-- Copy and filter the template MSVC project -->
                <filter token="APR_INCLUDE_DIR" value="${aprIncludeDir}" />
                <filter token="APR_LIB_DIR" value="${aprLibDir}" />
                <filter token="SSL_INCLUDE_DIRS" value="${sslIncludeDirsWindowsPath}" />
                <filter token="SSL_LIB_DIR" value="${sslLibDirsWindowsPath}" />
                <filter token="SSL_LIBS" value="${msvcSslLibs}" />
                <copy file="${vsStaticTemplateFile}" tofile="${generatedSourcesDir}/native-package/vs2010.vcxproj" filtering="true" overwrite="true" verbose="true" />
              </target>
            </configuration>
          </execution>

          <!-- Generate bnd bundle manifest. -->
          <execution>
            <id>native-manifest</id>
            <phase>initialize</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <exportAntProperties>true</exportAntProperties>
              <target>
                <condition property="tcnative.snippet" value="libnetty_tcnative_${nativeLibOsParts}.so;osname=linux">
                  <equals arg1="${os.detected.name}" arg2="linux" />
                </condition>
                <!-- In OSGi specification, the alias of Windows family is win32, case insensitive -->
                <condition property="tcnative.snippet" value="netty_tcnative_${nativeLibOsParts}.dll;osname=win32">
                  <equals arg1="${os.detected.name}" arg2="windows" />
                </condition>
                <!-- In OSGi specification, the alias of OSX family is macos or macosx, case insensitive -->
                <condition property="tcnative.snippet" value="libnetty_tcnative_${nativeLibOsParts}.jnilib;osname=macosx;">
                  <equals arg1="${os.detected.name}" arg2="osx" />
                </condition>

                <!-- In OSGi specification, the alias of x86_32 is x86... -->
                <condition property="nativeCode.processor" value="x86">
                  <equals arg1="${os.detected.arch}" arg2="x86_32" />
                </condition>
                <!-- ... and aarch_64 is aarch64 -->
                <condition property="nativeCode.processor" value="aarch64" else="${os.detected.arch}">
                  <equals arg1="${os.detected.arch}" arg2="aarch_64" />
                </condition>

                <property name="tcnativeManifest" value="META-INF/native/${tcnative.snippet};processor=${nativeCode.processor}" />
                <echo message="Bundle-NativeCode: ${tcnativeManifest}" />

              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- This artifact exports the classes whose names are different from the artifactId. -->
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>5.1.1</version>
        <executions>
          <execution>
            <id>generate-manifest</id>
            <phase>process-classes</phase>
            <goals>
              <goal>manifest</goal>
            </goals>
            <configuration>
              <supportedProjectTypes>
                <supportedProjectType>jar</supportedProjectType>
              </supportedProjectTypes>
              <instructions>
                <Export-Package>io.netty.internal.tcnative.*</Export-Package>
              </instructions>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.0.2</version>
        <executions>
          <execution>
            <id>default-jar</id>
            <configuration>
              <archive>
                <manifest>
                  <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                  <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                </manifest>
                <manifestEntries>
                  <Multi-Release>true</Multi-Release>
                </manifestEntries>
                <index>true</index>
                <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
              </archive>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <!-- Override the parent POM's configuration -->
      <plugin>
        <artifactId>maven-release-plugin</artifactId>
        <configuration>
          <!-- Specifying a profile here will disable the all profile, since it's activeByDefault -->
          <arguments>-Prestricted-release,sonatype-oss-release -DmoduleSelector=none</arguments>
          <tagNameFormat>@{project.artifactId}-@{project.version}</tagNameFormat>
          <autoVersionSubmodules>true</autoVersionSubmodules>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.sonatype.central</groupId>
        <artifactId>central-publishing-maven-plugin</artifactId>
        <version>0.7.0</version>
        <configuration>
          <publishingServerId>central</publishingServerId>
          <skipPublishing>true</skipPublishing>
          <autoPublish>false</autoPublish>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.sonatype.plugins</groupId>
        <artifactId>nexus-staging-maven-plugin</artifactId>
        <version>1.7.0</version>
        <configuration>
          <serverId>central-portal-snapshots</serverId>
          <nexusUrl>https://central.sonatype.com/repository/maven-snapshots</nexusUrl>
          <skipRemoteStaging>true</skipRemoteStaging>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty-jni-util</artifactId>
      <version>${jniUtilVersion}</version>
      <classifier>sources</classifier>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty-build-common</artifactId>
      <version>${netty.build.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <profiles>
    <profile>
      <id>disable-autogen-windows</id>
      <activation>
        <os>
          <family>windows</family>
        </os>
      </activation>
    </profile>

    <!-- Build the static APR library -->
    <profile>
      <id>build-apr-windows</id>
      <activation>
        <os>
          <family>windows</family>
        </os>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <id>source-apr</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target if="${linkStatic}">
                    <!-- Add the ant tasks from ant-contrib -->
                    <taskdef resource="net/sf/antcontrib/antcontrib.properties" />

                    <if>
                      <available file="${aprSourceDir}" />
                      <then>
                        <echo message="APR was already downloaded, skipping the build step." />
                      </then>
                      <else>
                        <echo message="Downloading APR" />

                        <property name="aprArchiveFile" value="apr-${aprVersion}-win32-src.zip" />
                        <get src="https://archive.apache.org/dist/apr/${aprArchiveFile}" dest="${project.build.directory}/${aprArchiveFile}" verbose="on" />
                        <unzip src="${project.build.directory}/${aprArchiveFile}" dest="${project.build.directory}" />
                        <condition property="windowsRelease" value="Win32 Release" else="x64 Release">
                          <equals arg1="${archBits}" arg2="32" />
                        </condition>
                        <move file="${project.build.directory}/apr-${aprVersion}" tofile="${aprSourceDir}" />
                      </else>
                    </if>
                  </target>
                </configuration>
              </execution>
              <execution>
                <id>build-apr</id>
                <phase>compile</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target if="${linkStatic}">
                    <!-- Add the ant tasks from ant-contrib -->
                    <taskdef resource="net/sf/antcontrib/antcontrib.properties" />

                    <if>
                      <available file="${aprHome}" />
                      <then>
                        <echo message="APR was already build, skipping the build step." />
                      </then>
                      <else>
                        <echo message="Building APR" />
                        <mkdir dir="${aprBuildDir}" />

                        <exec executable="cmake" failonerror="true" dir="${aprBuildDir}" resolveexecutable="true">
                          <arg value="-DCMAKE_BUILD_TYPE=RELEASE" />
                          <arg value="-DCMAKE_POSITION_INDEPENDENT_CODE=TRUE" />
                          <arg value="-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded" />
                          <arg value="-DCMAKE_POLICY_VERSION_MINIMUM=3.5" />
                          <arg value="-DCMAKE_INSTALL_PREFIX=apr" />
                          <arg value="-DAPR_BUILD_SHARED=OFF" />
                          <arg value="-DMIN_WINDOWS_VER=0x0600" />
                          <arg value="-GNinja" />
                          <arg value="${aprSourceDir}" />
                        </exec>

                        <!-- On Windows, force building APR with /MT for static linking -->
                        <replace dir="${aprBuildDir}" token="/MD" value="/MT">
                          <include name="build.ninja" />
                        </replace>

                        <exec executable="ninja" failonerror="true" dir="${aprBuildDir}" resolveexecutable="true" />

                        <copy todir="${aprHome}/lib">
                          <fileset dir="${aprBuildDir}/" includes="*.lib" />
                        </copy>
                        <copy todir="${aprHome}/include">
                          <fileset dir="${aprBuildDir}/" includes="*.h" />
                        </copy>
                        <copy todir="${aprHome}/include">
                          <fileset dir="${aprSourceDir}/include/arch/win32" includes="*.h" />
                        </copy>
                        <copy todir="${aprHome}/include">
                          <fileset dir="${aprSourceDir}/include" includes="*.h" />
                        </copy>
                      </else>
                    </if>
                  </target>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>build-apr-linux-mac</id>
      <activation>
        <os>
          <family>!windows</family>
        </os>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <id>source-apr-linux-mac</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target if="${linkStatic}">
                    <!-- Add the ant tasks from ant-contrib -->
                    <taskdef resource="net/sf/antcontrib/antcontrib.properties" />

                    <if>
                      <available file="${aprSourceDir}" />
                      <then>
                        <echo message="APR was already downloaded, skipping the build step." />
                      </then>
                      <else>
                        <echo message="Downloading and unpacking APR" />

                        <property name="aprTarGzFile" value="apr-${aprVersion}.tar.gz" />
                        <property name="aprTarFile" value="apr-${aprVersion}.tar" />
                        <get src="https://archive.apache.org/dist/apr/${aprTarGzFile}" dest="${project.build.directory}/${aprTarGzFile}" verbose="on" />
                        <checksum file="${project.build.directory}/${aprTarGzFile}" algorithm="SHA-256" property="${aprSha256}" verifyProperty="isEqual" />
                        <gunzip src="${project.build.directory}/${aprTarGzFile}" dest="${project.build.directory}" />
                        <!-- Use the tar command (rather than the untar ant task) in order to preserve file permissions. -->
                        <exec executable="tar" failonerror="true" dir="${project.build.directory}/" resolveexecutable="true">
                          <arg line="xfvz ${aprTarGzFile}" />
                        </exec>
                        <move file="${project.build.directory}/apr-${aprVersion}" tofile="${aprSourceDir}" />
                      </else>
                    </if>
                  </target>
                </configuration>
              </execution>
              <execution>
                <id>build-apr-linux-mac</id>
                <phase>compile</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target if="${linkStatic}">
                    <!-- Add the ant tasks from ant-contrib -->
                    <taskdef resource="net/sf/antcontrib/antcontrib.properties" />

                    <if>
                      <available file="${aprHome}" />
                      <then>
                        <echo message="APR was already build, skipping the build step." />
                      </then>
                      <else>
                        <echo message="Building APR" />
                        <mkdir dir="${aprHome}" />
                        <echo message="Patching APR to not link against libcrypt" />
                        <patch patchfile="../patches/apr_crypt.patch" strip="0" dir="${aprSourceDir}" />

                        <exec executable="buildconf" failonerror="true" dir="${aprSourceDir}" resolveexecutable="true" />

                        <if>
                          <equals arg1="${crossCompile}" arg2="mac" />
                          <then>
                            <!--
+                             We need to set some extra variables as otherwise the configure of apr will fail when trying to cross-compile.
+                             See https://stackoverflow.com/a/1605497/1074097
+                           -->
                            <exec executable="configure" failonerror="true" dir="${aprSourceDir}" resolveexecutable="true">
                              <arg line="--disable-shared --prefix=${aprHome} CFLAGS='-O3 -fno-omit-frame-pointer -fPIC -target arm64-apple-macos11' --host=aarch64-apple-darwin ${macOsxDeploymentTarget} ac_cv_have_decl_sys_siglist=no ac_cv_file__dev_zero=yes apr_cv_process_shared_works=yes apr_cv_mutex_robust_shared=no apr_cv_tcp_nodelay_with_cork=yes" />
                            </exec>
                            <!--
                              Make will fail when it tries to use the gen_test_char program.
                              We work around this by compile gen_test_char separate, execute and than rerun make.
                              See https://stackoverflow.com/a/56262330/1074097
                            -->
                            <exec executable="make" failonerror="false" dir="${aprSourceDir}" resolveexecutable="true" />
                            <exec executable="gcc" failonerror="true" dir="${aprSourceDir}" resolveexecutable="true">
                              <arg line="-Wall -O2 -DCROSS_COMPILE tools/gen_test_char.c -o tools/gen_test_char" />
                            </exec>
                            <exec executable="tools/gen_test_char" failonerror="true" dir="${aprSourceDir}" resolveexecutable="true" output="${aprSourceDir}/include/private/apr_escape_test_char.h" />
                            <exec executable="make" failonerror="true" dir="${aprSourceDir}" resolveexecutable="true" />
                            <exec executable="make" failonerror="true" dir="${aprSourceDir}" resolveexecutable="true">
                              <arg line="install" />
                            </exec>
                          </then>
                          <elseif>
                            <equals arg1="${crossCompile}" arg2="linux" />
                            <then>
                              <!--
  +                             We need to set some extra variables as otherwise the configure of apr will fail when trying to cross-compile.
  +                             See https://stackoverflow.com/a/1605497/1074097
  +                           -->
                              <exec executable="configure" failonerror="true" dir="${aprSourceDir}" resolveexecutable="true">
                                <arg line="--disable-shared --prefix=${aprHome} --host=aarch64-linux-gnu CC=aarch64-none-linux-gnu-gcc CFLAGS='-O3 -fno-omit-frame-pointer -fPIC' ac_cv_have_decl_sys_siglist=no ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes apr_cv_tcp_nodelay_with_cork=yes ac_cv_sizeof_struct_iovec=8" />
                              </exec>
                              <!--
                                Make will fail when it tries to use the gen_test_char program.
                                We work around this by compile gen_test_char separate, execute and than rerun make.
                                See https://stackoverflow.com/a/56262330/1074097
                              -->
                              <exec executable="make" failonerror="false" dir="${aprSourceDir}" resolveexecutable="true" />
                              <exec executable="gcc" failonerror="true" dir="${aprSourceDir}" resolveexecutable="true">
                                <arg line="-Wall -O2 -DCROSS_COMPILE tools/gen_test_char.c -o tools/gen_test_char" />
                              </exec>
                              <exec executable="tools/gen_test_char" failonerror="true" dir="${aprSourceDir}" resolveexecutable="true" output="${aprSourceDir}/include/private/apr_escape_test_char.h" />
                              <exec executable="make" failonerror="true" dir="${aprSourceDir}" resolveexecutable="true" />
                              <exec executable="make" failonerror="true" dir="${aprSourceDir}" resolveexecutable="true">
                                <arg line="install" />
                              </exec>
                            </then>
                          </elseif>
                          <else>
                            <exec executable="configure" failonerror="true" dir="${aprSourceDir}" resolveexecutable="true">
                              <!--
                                Disable the detection of sys_siglist and just use apr's own implementation to workaround problems when trying to use static jars on alpine linux
                                See https://github.com/netty/netty-tcnative/issues/853
                              -->
                              <arg line="--disable-shared --prefix=${aprHome} CFLAGS='-O3 -fno-omit-frame-pointer -fPIC' ${macOsxDeploymentTarget} ac_cv_have_decl_sys_siglist=no" />
                            </exec>
                            <exec executable="make" failonerror="true" dir="${aprSourceDir}" resolveexecutable="true" />
                            <exec executable="make" failonerror="true" dir="${aprSourceDir}" resolveexecutable="true">
                              <arg line="install" />
                            </exec>
                          </else>
                        </if>
                      </else>
                    </if>
                  </target>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!--
      netty-tcnative must be released from RHEL 6.6 x86_64 or compatible so that:

      1) we ship x86_64 version of epoll transport officially, and
      2) we ensure the ABI compatibility with older GLIBC versions.

         The shared library built on a distribution with newer GLIBC
         will not run on older distributions.
    -->
    <profile>
      <id>restricted-release</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
              <execution>
                <id>enforce-release-environment</id>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <requireJavaVersion>
                      <!-- Enforce JDK 1.8+ for compilation. -->
                      <!-- This is needed because of java.util.zip.Deflater and NIO UDP multicast. -->
                      <version>[1.8.0,)</version>
                    </requireJavaVersion>
                    <requireProperty>
                      <regexMessage>
                        Release process must be performed on linux-x86_64.
                      </regexMessage>
                      <property>os.detected.classifier</property>
                      <regex>^linux-x86_64$</regex>
                    </requireProperty>
                    <requireFilesContent>
                      <message>
                        Release process must be performed on RHEL 6.8 or its derivatives.
                      </message>
                      <files>
                        <file>/etc/redhat-release</file>
                      </files>
                      <content>release 6.</content>
                    </requireFilesContent>
                  </rules>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <!-- Provides the 'requireFilesContent' enforcer rule. -->
              <dependency>
                <groupId>com.ceilfors.maven.plugin</groupId>
                <artifactId>enforcer-rules</artifactId>
                <version>1.2.0</version>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
      <modules>
        <!-- When doing a release we only want to deploy dynamic openssl version and the static boring one. -->
        <module>openssl-classes</module>
        <module>openssl-dynamic</module>
        <module>boringssl-static</module>
      </modules>
    </profile>

    <profile>
      <id>stage</id>
      <modules>
        <!-- When stage we only want to deploy dynamic openssl version and the static boring one. -->
        <module>openssl-classes</module>
        <module>openssl-dynamic</module>
        <module>boringssl-static</module>
      </modules>
    </profile>

    <!--
      Profile for building all modules. This is enabled by default so if any profile is manually specified,
      this will be disabled automatically.
    -->
    <profile>
      <id>all</id>
      <activation>
        <property>
          <name>!moduleSelector</name>
        </property>
      </activation>
      <modules>
        <module>openssl-classes</module>
        <module>openssl-dynamic</module>
        <module>openssl-static</module>
        <module>boringssl-static</module>
        <module>libressl-static</module>
      </modules>
    </profile>

    <profile>
      <id>java9</id>
      <activation>
        <jdk>9</jdk>
      </activation>
      <properties>
        <!-- Needed because of https://issues.apache.org/jira/browse/MENFORCER-275 -->
        <enforcer.plugin.version>3.0.0</enforcer.plugin.version>
      </properties>
    </profile>

    <profile>
      <id>java10</id>
      <activation>
        <jdk>10</jdk>
      </activation>
      <properties>
        <!-- Needed because of https://issues.apache.org/jira/browse/MENFORCER-275 -->
        <enforcer.plugin.version>3.0.0</enforcer.plugin.version>
      </properties>
    </profile>

    <profile>
      <id>java11</id>
      <activation>
        <jdk>11</jdk>
      </activation>
      <properties>
        <!-- Needed because of https://issues.apache.org/jira/browse/MENFORCER-275 -->
        <enforcer.plugin.version>3.0.0</enforcer.plugin.version>
      </properties>
    </profile>

    <profile>
      <id>java12</id>
      <activation>
        <jdk>12</jdk>
      </activation>
      <properties>
        <!-- Needed because of https://issues.apache.org/jira/browse/MENFORCER-275 -->
        <enforcer.plugin.version>3.0.0</enforcer.plugin.version>

        <!-- This is the minimum supported by Java12 -->
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
      </properties>
    </profile>

    <profile>
      <id>java13</id>
      <activation>
        <jdk>13</jdk>
      </activation>
      <properties>
        <!-- Needed because of https://issues.apache.org/jira/browse/MENFORCER-275 -->
        <enforcer.plugin.version>3.0.0</enforcer.plugin.version>

        <!-- This is the minimum supported by Java12 -->
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
      </properties>
    </profile>

    <profile>
      <id>java14</id>
      <activation>
        <jdk>14</jdk>
      </activation>
      <properties>
        <!-- Needed because of https://issues.apache.org/jira/browse/MENFORCER-275 -->
        <enforcer.plugin.version>3.0.0</enforcer.plugin.version>

        <!-- This is the minimum supported by Java12 -->
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
      </properties>
    </profile>

    <profile>
      <id>java15</id>
      <activation>
        <jdk>15</jdk>
      </activation>
      <properties>
        <!-- Needed because of https://issues.apache.org/jira/browse/MENFORCER-275 -->
        <enforcer.plugin.version>3.0.0</enforcer.plugin.version>

        <!-- This is the minimum supported by Java12 -->
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
      </properties>
    </profile>

    <profile>
      <id>java16</id>
      <activation>
        <jdk>16</jdk>
      </activation>
      <properties>
        <!-- Needed because of https://issues.apache.org/jira/browse/MENFORCER-275 -->
        <enforcer.plugin.version>3.0.0</enforcer.plugin.version>

        <!-- This is the minimum supported by Java12 -->
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
      </properties>
    </profile>

    <profile>
      <id>java17</id>
      <activation>
        <jdk>17</jdk>
      </activation>
      <properties>
        <!-- Needed because of https://issues.apache.org/jira/browse/MENFORCER-275 -->
        <enforcer.plugin.version>3.0.0</enforcer.plugin.version>

        <!-- This is the minimum supported by Java12 -->
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
      </properties>
    </profile>
  </profiles>
</project>
