<?xml version="1.0" encoding="UTF-8"?>
<!--

  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.royale.examples</groupId>
    <artifactId>ModuleExample</artifactId>
    <version>0.9.13-SNAPSHOT</version>
  </parent>

  <artifactId>Module</artifactId>
  <version>0.9.13-SNAPSHOT</version>
  <packaging>swf</packaging>

  <name>Apache Royale: Examples: Royale: ModuleExample: Module</name>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.royale.compiler</groupId>
        <artifactId>royale-maven-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <mainClass>Module.mxml</mainClass>
          <allowSubclassOverrides>true</allowSubclassOverrides>
          <targets>${royale.targets}</targets>
          <debug>false</debug>
          <additionalCompilerOptions>-js-compiler-option=--variable_map_input_file ../../../../../MainApp/target/javascript/bin/js-release/gccvars.txt;-js-compiler-option+=--property_map_input_file ../../../../../MainApp/target/javascript/bin/js-release/gccprops.txt</additionalCompilerOptions>
        </configuration>
      </plugin>

      <!-- copy module files from Module target folder to Application target folder-->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
          <!-- for js-release (copy all to 'modules' folder)-->
          <execution>
            <id>copy-resources-release</id>
            <phase>install</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <resources>
                <resource>
                  <directory>${project.basedir}/target/javascript/bin/js-release/</directory>
                </resource>
              </resources>
              <outputDirectory>${project.basedir}/../MainApp/target/javascript/bin/js-release/modules/</outputDirectory>
            </configuration>
          </execution>
          <!-- for js-debug (copy all to js-debug but will need a next step later (check **))-->
          <execution>
            <id>copy-resources-debug</id>
            <phase>install</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <resources>
                <resource>
                  <directory>${project.basedir}/target/javascript/bin/js-debug/</directory>
                </resource>
              </resources>
              <outputDirectory>${project.basedir}/../MainApp/target/javascript/bin/js-debug/</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- (**) for js-debug: we need to move two files from 'target/js-debug' to 'target/js-debug/modules' since Application expect to find it there -->
      <plugin>
        <groupId>com.coderplus.maven.plugins</groupId>
        <artifactId>copy-rename-maven-plugin</artifactId>
        <version>1.0</version>
        <executions>
          <execution>
            <id>debug-move-files</id>
            <phase>install</phase>
            <goals>
              <goal>rename</goal>
            </goals>
            <configuration>
              <fileSets>
                <fileSet>
                  <sourceFile>${project.basedir}/../MainApp/target/javascript/bin/js-debug/${project.artifactId}__deps.js</sourceFile>
                  <destinationFile>${project.basedir}/../MainApp/target/javascript/bin/js-debug/modules/${project.artifactId}__deps.js</destinationFile>
                </fileSet>
                <fileSet>
                  <sourceFile>${project.basedir}/../MainApp/target/javascript/bin/js-debug/${project.artifactId}.css</sourceFile>
                  <destinationFile>${project.basedir}/../MainApp/target/javascript/bin/js-debug/modules/${project.artifactId}.css</destinationFile>
                </fileSet>
              </fileSets>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

<properties /></project>
