<!--
  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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>cloud-console-proxy</artifactId>
  <name>Apache CloudStack Console Proxy</name>
  <parent>
    <groupId>org.apache.cloudstack</groupId>
    <artifactId>cloud-service-console-proxy</artifactId>
    <version>4.2.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>
  <properties>
    <mkisofs>mkisofs</mkisofs>
  </properties>
  <dependencies>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${cs.log4j.version}</version>
    </dependency>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>${cs.gson.version}</version>
    </dependency>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>${cs.codec.version}</version>
    </dependency>
    <!-- required deps for the systemvm -->
    <dependency>
      <groupId>org.apache.cloudstack</groupId>
      <artifactId>cloud-agent</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.cloudstack</groupId>
      <artifactId>cloud-patches</artifactId>
      <version>${project.version}</version>
      <type>pom</type>
    </dependency>
  </dependencies>
  <build>
    <defaultGoal>install</defaultGoal>
    <sourceDirectory>src</sourceDirectory>
    <resources>
      <resource>
        <directory>certs</directory>
        <excludes>
          <exclude>realhostip.csr</exclude>
        </excludes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <finalName>systemvm</finalName>
          <appendAssemblyId>false</appendAssemblyId>
          <descriptors>
            <descriptor>systemvm-descriptor.xml</descriptor>
          </descriptors>
        </configuration>
        <executions>
          <execution>
            <id>make-systemvm</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
        <executions>
          <execution>
            <id>copy-resources</id>
            <!-- here the phase you need -->
            <phase>package</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>dist</outputDirectory>
              <resources>          
                <resource>
                  <directory>target</directory>
                  <includes>
                    <include>systemvm.zip</include>
                  </includes>
                </resource>
                <resource>
                  <directory>../../../patches/systemvm/debian/config/root/.ssh</directory>
                  <includes>
                    <include>authorized_keys</include>
                  </includes>
                </resource>
              </resources>              
            </configuration>            
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>copy-cloud-scripts</id>
            <phase>package</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <copy overwrite="true" file="../../../patches/target/cloud-scripts.tgz" tofile="${basedir}/dist/cloud-scripts.tgz"/>  
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>
<!-- Leave this to the systemvm profile
     Enable using the -P systemvm flag
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>exec</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <executable>mkisofs</executable>
          <workingDirectory>dist</workingDirectory>
          <arguments>
            <argument>-quiet</argument>
            <argument>-r</argument>
            <argument>-o</argument>
            <argument>systemvm.iso</argument>
            <argument>systemvm.zip</argument>
            <argument>cloud-scripts.tgz</argument>
            <argument>authorized_keys</argument>
          </arguments>
        </configuration>
      </plugin>
-->
    </plugins>
  </build>
  <profiles>
    <!-- Debian will never distribute mkisofs due to licensing issues.
         Fortunately genisoimage is a work-alike -->
    <profile>
      <id>genisoimage</id>
      <activation>
        <file>
          <exists>/usr/bin/genisoimage</exists>
        </file>
      </activation>
      <properties>
        <mkisofs>genisoimage</mkisofs>
      </properties>
    </profile>
    <profile>
      <id>vmware</id>
      <activation>
        <property>
          <name>nonoss</name>
        </property>
      </activation>
        <dependencies>
            <dependency>
                <groupId>org.apache.cloudstack</groupId>
                <artifactId>cloud-plugin-hypervisor-vmware</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.cloudstack</groupId>
                <artifactId>cloud-vmware-base</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    </profile>
    <profile>
      <id>systemvm</id>
      <activation>
        <property>
          <name>systemvm</name>
        </property>
      </activation>
      <build>
      <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>exec</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <executable>${mkisofs}</executable>
          <workingDirectory>dist</workingDirectory>
          <arguments>
            <argument>-quiet</argument>
            <argument>-r</argument>
            <argument>-o</argument>
            <argument>systemvm.iso</argument>
            <argument>systemvm.zip</argument>
            <argument>cloud-scripts.tgz</argument>
            <argument>authorized_keys</argument>
          </arguments>
        </configuration>
      </plugin>
      </plugins>
      </build>
    </profile>
  </profiles>

</project>
