<!--
  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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.directory.server</groupId>
    <artifactId>apacheds-parent</artifactId>
    <version>2.0.0.AM26-SNAPSHOT</version>
  </parent>
  
  <artifactId>apacheds-installers</artifactId>
  <name>ApacheDS Installers</name>
  <packaging>pom</packaging>

  <description>Generates installers for ApacheDS</description>
  
  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>apacheds-service</artifactId>
    </dependency>  
    
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>apacheds-wrapper</artifactId>
    </dependency>
    
    <!--
      Forcing the scope of this dependency as 'provided' to avoid
      it being bundled in the final installers, as it is already 
      bundled in the 'apacheds-service' artifact.
    -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <profiles>
    <profile>
      <id>installers</id>
      <build>
        <plugins>
          <!-- Generating installers -->
          <plugin>
            <groupId>${project.groupId}</groupId>
            <artifactId>apacheds-installers-maven-plugin</artifactId>
            <configuration>
              
              <!-- Targets for Mac OS X .pkg installer packages -->
              <macOsXPkgTargets>
                <macOsXPkgTarget>
                  <id>apacheds-macosx-32bit</id>
                  <finalName>apacheds-${project.version}-32bit.dmg</finalName>
                  <osArch>x86</osArch>
                </macOsXPkgTarget>
                
                <macOsXPkgTarget>
                  <id>apacheds-macosx-64bit</id>
                  <finalName>apacheds-${project.version}-64bit.dmg</finalName>
                  <osArch>x86_64</osArch>
                </macOsXPkgTarget>
              </macOsXPkgTargets>
    
              <!-- Target for Windows installer package -->
              <nsisTargets>
                <nsisTarget>
                  <id>apacheds-win32</id>
                  <finalName>apacheds-${project.version}.exe</finalName>
                </nsisTarget>
              </nsisTargets>
    
              <!-- Targets for Archive installer -->
              <archiveTargets>
                <archiveTarget>
                  <id>apacheds-archive-zip</id>
                  <finalName>apacheds-${project.version}.zip</finalName>
                  <archiveType>zip</archiveType>
                </archiveTarget>
                
                <archiveTarget>
                  <id>apacheds-archive-tar.gz</id>
                  <finalName>apacheds-${project.version}.tar.gz</finalName>
                  <archiveType>tar.gz</archiveType>
                </archiveTarget>
              </archiveTargets>
              
              <!-- Targets for Linux .bin installer -->
              <binTargets>
                <binTarget>
                 <id>apacheds-bin-installer-32bit</id>
                  <finalName>apacheds-${project.version}-32bit.bin</finalName>
                  <osArch>x86</osArch>
                </binTarget>
                
                <binTarget>
                  <id>apacheds-bin-installer-64bit</id>
                  <finalName>apacheds-${project.version}-64bit.bin</finalName>
                  <osArch>x86_64</osArch>
                </binTarget>
              </binTargets>
              
              <!-- Targets for Linux .deb installer package -->
              <debTargets>
                <debTarget>
                 <id>apacheds-debian-i386</id>
                  <finalName>apacheds-${project.version}-i386.deb</finalName>
                  <osArch>i386</osArch>
                </debTarget>
                
                <debTarget>
                 <id>apacheds-debian-amd64</id>
                  <finalName>apacheds-${project.version}-amd64.deb</finalName>
                  <osArch>amd64</osArch>
                </debTarget>
              </debTargets>
              
              <!-- Targets for Linux .rpm installer package -->
              <rpmTargets>
                <rpmTarget>
                  <id>apacheds-rpm-i386</id>
                  <finalName>apacheds-${project.version}-i386.rpm</finalName>
                  <osArch>i386</osArch>
                </rpmTarget>
                
                <rpmTarget>
                  <id>apacheds-rpm-x86_64</id>
                  <finalName>apacheds-${project.version}-x86_64.rpm</finalName>
                  <osArch>x86_64</osArch>
                </rpmTarget>
              </rpmTargets>
            </configuration>

            <executions>
              <execution>
                <goals>
                  <goal>generate</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
        
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>${project.groupId}</groupId>
              <artifactId>apacheds-installers-maven-plugin</artifactId>
              <version>${project.version}</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>
    
    <profile>
      <id>debian</id>
      <build>
        <plugins>
          <!-- Generating installers -->
          <plugin>
            <groupId>${project.groupId}</groupId>
            <artifactId>apacheds-installers-maven-plugin</artifactId>
            <configuration>
              
              <!-- Targets for Linux .deb installer package -->
              <debTargets>
                <debTarget>
                 <id>apacheds-debian-i386</id>
                  <finalName>apacheds-${project.version}-i386.deb</finalName>
                  <osArch>i386</osArch>
                </debTarget>
                
                <debTarget>
                 <id>apacheds-debian-amd64</id>
                  <finalName>apacheds-${project.version}-amd64.deb</finalName>
                  <osArch>amd64</osArch>
                </debTarget>
              </debTargets>
            </configuration>

            <executions>
              <execution>
                <goals>
                  <goal>generate</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
        
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>${project.groupId}</groupId>
              <artifactId>apacheds-installers-maven-plugin</artifactId>
              <version>${project.version}</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>

    <profile>
      <id>rpm</id>
      <build>
        <plugins>
          <!-- Generating installers -->
          <plugin>
            <groupId>${project.groupId}</groupId>
            <artifactId>apacheds-installers-maven-plugin</artifactId>
            <configuration>
              <!-- Targets for Linux .rpm installer package -->
              <rpmTargets>
                <rpmTarget>
                  <id>apacheds-rpm-i386</id>
                  <finalName>apacheds-${project.version}-i386.rpm</finalName>
                  <osArch>i386</osArch>
                </rpmTarget>
                
                <rpmTarget>
                  <id>apacheds-rpm-x86_64</id>
                  <finalName>apacheds-${project.version}-x86_64.rpm</finalName>
                  <osArch>x86_64</osArch>
                </rpmTarget>
              </rpmTargets>
            </configuration>

            <executions>
              <execution>
                <goals>
                  <goal>generate</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
        
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>${project.groupId}</groupId>
              <artifactId>apacheds-installers-maven-plugin</artifactId>
              <version>${project.version}</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>
    
    <profile>
      <id>windows</id>
      <build>
        <plugins>
          <!-- Generating installers -->
          <plugin>
            <groupId>${project.groupId}</groupId>
            <artifactId>apacheds-installers-maven-plugin</artifactId>
            <configuration>
              <!-- Target for Windows installer package -->
              <nsisTargets>
                <nsisTarget>
                  <id>apacheds-win32</id>
                  <finalName>apacheds-${project.version}.exe</finalName>
                </nsisTarget>
              </nsisTargets>
            </configuration>

            <executions>
              <execution>
                <goals>
                  <goal>generate</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
        
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>${project.groupId}</groupId>
              <artifactId>apacheds-installers-maven-plugin</artifactId>
              <version>${project.version}</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>
    
    <profile>
      <id>mac</id>
      <build>
        <plugins>
          <!-- Generating installers -->
          <plugin>
            <groupId>${project.groupId}</groupId>
            <artifactId>apacheds-installers-maven-plugin</artifactId>
            <configuration>
              
              <!-- Targets for Mac OS X .pkg installer packages -->
              <macOsXPkgTargets>
                <macOsXPkgTarget>
                  <id>apacheds-macosx-32bit</id>
                  <finalName>apacheds-${project.version}-32bit.dmg</finalName>
                  <osArch>x86</osArch>
                </macOsXPkgTarget>
                
                <macOsXPkgTarget>
                  <id>apacheds-macosx-64bit</id>
                  <finalName>apacheds-${project.version}-64bit.dmg</finalName>
                  <osArch>x86_64</osArch>
                </macOsXPkgTarget>
              </macOsXPkgTargets>
            </configuration>

            <executions>
              <execution>
                <goals>
                  <goal>generate</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
        
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>${project.groupId}</groupId>
              <artifactId>apacheds-installers-maven-plugin</artifactId>
              <version>${project.version}</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>

    <profile>
      <id>bin</id>
      <build>
        <plugins>
          <!-- Generating installers -->
          <plugin>
            <groupId>${project.groupId}</groupId>
            <artifactId>apacheds-installers-maven-plugin</artifactId>
            <configuration>
              <!-- Targets for Linux .bin installer -->
              <binTargets>
                <binTarget>
                 <id>apacheds-bin-installer-32bit</id>
                  <finalName>apacheds-${project.version}-32bit.bin</finalName>
                  <osArch>x86</osArch>
                </binTarget>
                
                <binTarget>
                  <id>apacheds-bin-installer-64bit</id>
                  <finalName>apacheds-${project.version}-64bit.bin</finalName>
                  <osArch>x86_64</osArch>
                </binTarget>
              </binTargets>
            </configuration>

            <executions>
              <execution>
                <goals>
                  <goal>generate</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
        
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>${project.groupId}</groupId>
              <artifactId>apacheds-installers-maven-plugin</artifactId>
              <version>${project.version}</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>

    <profile>
      <id>archive</id>
      <build>
        <plugins>
          <!-- Generating installers -->
          <plugin>
            <groupId>${project.groupId}</groupId>
            <artifactId>apacheds-installers-maven-plugin</artifactId>
            <configuration>
              <!-- Targets for Archive installer -->
              <archiveTargets>
                <archiveTarget>
                  <id>apacheds-archive-zip</id>
                  <finalName>apacheds-${project.version}.zip</finalName>
                  <archiveType>zip</archiveType>
                </archiveTarget>
                
                <archiveTarget>
                  <id>apacheds-archive-tar.gz</id>
                  <finalName>apacheds-${project.version}.tar.gz</finalName>
                  <archiveType>tar.gz</archiveType>
                </archiveTarget>
              </archiveTargets>
            </configuration>

            <executions>
              <execution>
                <goals>
                  <goal>generate</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
        
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>${project.groupId}</groupId>
              <artifactId>apacheds-installers-maven-plugin</artifactId>
              <version>${project.version}</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>

    <profile>
      <id>docker</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
              <resources>
                <resource>
                  <directory>src/test/docker</directory>
                  <filtering>true</filtering>
                </resource>
              </resources>
              <outputDirectory>${project.build.directory}/docker</outputDirectory>
            </configuration>
            <executions>
              <execution>
                <phase>generate-test-resources</phase>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

  </profiles>
  
  <build>
    <plugins>
      <!-- Forcing the creation of Eclipse project files -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <configuration>
          <!-- Workaround for http://jira.codehaus.org/browse/MECLIPSE-94 -->
          <eclipseProjectDir>.</eclipseProjectDir>
        </configuration>
      </plugin>
    </plugins>
  </build>
  
</project>
