<?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.8-SNAPSHOT</version>
  </parent>

  <artifactId>Basic</artifactId>
  <version>0.9.8-SNAPSHOT</version>
  <packaging>swc</packaging>

  <name>Apache Royale: Framework: Libs: Basic</name>
  
  <build>
    <sourceDirectory>src/main/royale</sourceDirectory>
    <plugins>
      <plugin>
        <groupId>org.apache.royale.compiler</groupId>
        <artifactId>royale-maven-plugin</artifactId>
        <version>${royale.compiler.version}</version>
        <extensions>true</extensions>
        <configuration>
          <namespaces>
            <namespace>
              <uri>library://ns.apache.org/royale/basic</uri>
              <manifest>${project.basedir}/src/main/resources/basic-manifest.xml</manifest>
            </namespace>
            <namespace>
              <type>as</type>
              <uri>library://ns.apache.org/royale/basic</uri>
              <manifest>${project.basedir}/src/main/resources/basic-as-manifest.xml</manifest>
            </namespace>
            <namespace>
              <uri>library://ns.apache.org/royale/svg</uri>
              <manifest>${project.basedir}/src/main/resources/svg-manifest.xml</manifest>
            </namespace>
          </namespaces>
          <includeClasses>
            <includeClass>BasicClasses</includeClass>
          </includeClasses>
          <includeFiles>
            <include-file>
              <name>defaults.css</name>
              <path>../src/main/resources/defaults.css</path>
            </include-file>
          </includeFiles>
          <allowSubclassOverrides>true</allowSubclassOverrides>
          <skipExtern>true</skipExtern>
          <skipAS>${royale.skipAS}</skipAS>
          <additionalCompilerOptions>${project.compiler.options};-compiler.fxg-base-class=flash.display.Sprite</additionalCompilerOptions>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.apache.royale.framework</groupId>
      <artifactId>Core</artifactId>
      <version>0.9.8-SNAPSHOT</version>
      <type>swc</type>
      <classifier>js</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.royale.framework</groupId>
      <artifactId>Binding</artifactId>
      <version>0.9.8-SNAPSHOT</version>
      <type>swc</type>
      <classifier>js</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.royale.framework</groupId>
      <artifactId>Graphics</artifactId>
      <version>0.9.8-SNAPSHOT</version>
      <type>swc</type>
      <classifier>js</classifier>
    </dependency>
    <dependency>
      <groupId>org.apache.royale.framework</groupId>
      <artifactId>Collections</artifactId>
      <version>0.9.8-SNAPSHOT</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.8-SNAPSHOT</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>Binding</artifactId>
          <version>0.9.8-SNAPSHOT</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>Graphics</artifactId>
          <version>0.9.8-SNAPSHOT</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
        <dependency>
          <groupId>org.apache.royale.framework</groupId>
          <artifactId>Collections</artifactId>
          <version>0.9.8-SNAPSHOT</version>
          <type>swc</type>
          <classifier>swf</classifier>
        </dependency>
      </dependencies>
    </profile>
  </profiles>

<properties /></project>
