<?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>frameworks</artifactId>
    <version>0.9.10</version>
  </parent>

  <artifactId>projects</artifactId>
  <version>0.9.10</version>
  <packaging>pom</packaging>

  <properties>
      <project.compiler.options>
        ${repo.compiler.options};
        -js-default-initializers=false;
        -source-map=${source.map};
        -source-map-source-root=/frameworks/projects/${project.artifactId}/src/main/royale/
        -js-complex-implicit-coercions=false;
        -js-vector-index-checks=false;
        -js-resolve-uncertain=false;
      </project.compiler.options>
  <project.build.outputTimestamp>2023-02-06T16:33:50Z</project.build.outputTimestamp></properties>
  
  <name>Apache Royale: Framework: Libs</name>

  <modules>
    <module>Ace</module>
    <module>Basic</module>
    <module>Binding</module>
    <module>Charts</module>
    <module>Collections</module>
    <module>Core</module>
    <module>CreateJS</module>
    <module>Crux</module>
    <module>DragDrop</module>
    <module>Effects</module>
    <module>Express</module>
    <module>Flat</module>
    <module>FontAwesome</module>
    <module>Formatters</module>
    <module>GoogleMaps</module>
    <module>Graphics</module>
    <module>HTML</module>
    <module>HTML5</module>
    <module>Icons</module>
    <module>Jewel</module>
    <module>JQuery</module>
    <module>Language</module>
    <module>MaterialDesignLite</module>
    <module>Mobile</module>
    <module>MXRoyaleBase</module>
    <module>MXRoyale</module>
    <module>Network</module>
    <module>Reflection</module>
    <module>RoyaleSite</module>
    <module>RoyaleUnit</module>
    <module>RoyaleUnitUI</module>
    <module>SparkRoyale</module>
    <module>Storage</module>
    <module>Text</module>
    <module>TLF</module>
    <module>XML</module>
  </modules>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.royale.compiler</groupId>
        <artifactId>royale-maven-plugin</artifactId>
        <configuration>
          <!-- We don't want dependencies to be linked into the resulting libraries -->
          <forceSwcExternalLibraryPath>true</forceSwcExternalLibraryPath>
          <additionalCompilerOptions>${project.compiler.options}</additionalCompilerOptions>
          <targets>${royale.targets}</targets>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.apache.royale.typedefs</groupId>
      <artifactId>royale-typedefs-gcl</artifactId>
      <version>${royale.typedefs.version}</version>
      <type>swc</type>
      <classifier>typedefs</classifier>
    </dependency>
    <!--
      By declaring this dependency here, we force the royale-externs-js to be
      added to the external library path of all modules. Without this it would
      have gone to the library path.
    -->
    <dependency>
      <groupId>org.apache.royale.typedefs</groupId>
      <artifactId>royale-typedefs-js</artifactId>
      <version>${royale.typedefs.version}</version>
      <type>swc</type>
      <classifier>typedefs</classifier>
      <scope>runtime</scope>
    </dependency>
  </dependencies>

</project>
