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