<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.royale.framework</groupId>
    <artifactId>projects</artifactId>
    <version>0.9.9</version>
  </parent>

  <artifactId>SparkRoyale</artifactId>
  <version>0.9.9</version>
  <packaging>swc</packaging>

  <name>Apache Royale: Framework: Libs: SparkRoyale</name>

  <build>
    <sourceDirectory>src/main/royale</sourceDirectory>
    <plugins>
      <plugin>
        <groupId>org.apache.royale.compiler</groupId>
        <artifactId>royale-maven-plugin</artifactId>
        <version>${project.royale.compiler.version}</version>
        <extensions>true</extensions>
        <configuration>
          <namespaces>
            <namespace>
              <uri>library://ns.apache.org/royale/spark</uri>
              <manifest>${project.basedir}/src/main/resources/spark-royale-manifest.xml</manifest>
            </namespace>
          </namespaces>
          <includeClasses>
            <includeClass>SparkRoyaleClasses</includeClass>
          </includeClasses>
          <includeFiles>
              <include-file>
                  <name>defaults.css</name>
                  <path>../src/main/resources/defaults.css</path>
              </include-file>
          </includeFiles>
          <skipExtern>true</skipExtern>
          <skipAS>${royale.skipAS}</skipAS>
          <defines>
              <define>
                  <name>GOOG::DEBUG</name>
                  <value>true</value>
              </define>
          </defines>
          <allowSubclassOverrides>true</allowSubclassOverrides>
          <includeLookupOnly>true</includeLookupOnly>
          <additionalCompilerOptions>
            ${project.compiler.options};
            -keep-as3-metadata+=SkinPart;
            -js-compiler-define=COMPILE::JS,true;
            -js-compiler-define=COMPILE::SWF,false;
            -js-compiler-define=GOOG::DEBUG,goog.DEBUG;
          </additionalCompilerOptions>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.apache.royale.framework</groupId>
      <artifactId>Core</artifactId>
      <version>0.9.9</version>
      <type>swc</type>
      <classifier>js</classifier>
    </dependency>
    <dependency>
        <groupId>org.apache.royale.framework</groupId>
        <artifactId>Basic</artifactId>
        <version>0.9.9</version>
        <type>swc</type>
        <classifier>js</classifier>
    </dependency>
    <dependency>
        <groupId>org.apache.royale.framework</groupId>
        <artifactId>MXRoyale</artifactId>
        <version>0.9.9</version>
        <type>swc</type>
        <classifier>js</classifier>
    </dependency>
    <dependency>
        <groupId>org.apache.royale.framework</groupId>
        <artifactId>Text</artifactId>
        <version>0.9.9</version>
        <type>swc</type>
        <classifier>js</classifier>
    </dependency>
    <dependency>
        <groupId>org.apache.royale.framework</groupId>
        <artifactId>TLF</artifactId>
        <version>0.9.9</version>
        <type>swc</type>
        <classifier>js</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.royale.framework</groupId>
      <artifactId>DragDrop</artifactId>
      <version>0.9.9</version>
      <type>swc</type>
      <classifier>js</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.royale.framework</groupId>
      <artifactId>Collections</artifactId>
      <version>0.9.9</version>
      <type>swc</type>
      <classifier>js</classifier>
    </dependency>
  </dependencies>

  <profiles>
    <profile>
      <id>option-with-swf</id>
      <dependencies>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>Core</artifactId>
          <version>0.9.9</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>Basic</artifactId>
          <version>0.9.9</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>Binding</artifactId>
          <version>0.9.9</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>Graphics</artifactId>
          <version>0.9.9</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>Reflection</artifactId>
          <version>0.9.9</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>Effects</artifactId>
          <version>0.9.9</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>HTML</artifactId>
          <version>0.9.9</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>MXRoyale</artifactId>
          <version>0.9.9</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>Text</artifactId>
          <version>0.9.9</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>TLF</artifactId>
          <version>0.9.9</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>DragDrop</artifactId>
          <version>0.9.9</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>Collections</artifactId>
          <version>0.9.9</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
      </dependencies>
    </profile>
  </profiles>

<properties><project.build.outputTimestamp>2022-03-17T08:05:21Z</project.build.outputTimestamp></properties></project>
