<?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.compiler</groupId>
    <artifactId>royale-compiler-parent</artifactId>
    <version>0.9.4</version>
  </parent>

  <artifactId>compiler-externc</artifactId>
  <version>0.9.4</version>

  <name>Apache Royale: Compiler: Externc</name>
  <description>The Apache Royale Compiler Externs Compiler</description>

  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.royale.compiler</groupId>
            <artifactId>compiler-build-tools</artifactId>
            <version>${compiler-build-tools.version}</version>
            <executions>
                <execution>
                    <id>unpack-closure-externs</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>unpack-resources</goal>
                    </goals>
                    <configuration>
                        <resource>externs.zip</resource>
                    </configuration>
                </execution>
            </executions>
            <!--
             Dependency to the closure compiler externs artifact so
             the "unpack-resources" goal can find the externs.zip
             -->
            <dependencies>
                <dependency>
                    <groupId>com.google.javascript</groupId>
                    <artifactId>closure-compiler-externs</artifactId>
                    <version>v20170626</version>
                </dependency>
            </dependencies>
        </plugin>
        <!-- Make the surefire execute all unit-tests -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19</version>
            <configuration>
                <includes>
                    <include>org/**/TestExternES3.java</include>
                    <include>org/**/TestExternChrome.java</include>
                    <include>org/**/TestExternJSMissing.java</include>
                    <include>org/**/TestAnnotationEnum.java</include>
                    <include>org/**/TestCollectImports.java</include>
                    <include>org/**/TestConstructor.java</include>
                    <include>org/**/TestPackageNamespace.java</include>
                    <include>org/**/TestReferenceModel.java</include>
                    <include>org/**/TestTypeTypedefs.java</include>
                    <include>org/**/TestTypeInheritance.java</include>
                </includes>
                <excludes>
                </excludes>
            </configuration>
        </plugin>
        
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <includes>
                    <include>org/**/TestExternES3.java</include>
                    <include>org/**/TestExternChrome.java</include>
                    <include>org/**/TestExternJSMissing.java</include>
                    <include>org/**/TestAnnotationEnum.java</include>
                    <include>org/**/TestCollectImports.java</include>
                    <include>org/**/TestConstructor.java</include>
                    <include>org/**/TestPackageNamespace.java</include>
                    <include>org/**/TestReferenceModel.java</include>
                    <include>org/**/TestTypeTypedefs.java</include>
                    <include>org/**/TestTypeInheritance.java</include>
                </includes>
                <excludes>
                </excludes>
            </configuration>
        </plugin>
        
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.2</version>
            <executions>
                <execution>
                    <goals>
                        <goal>test-jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
  </build>


  <dependencies>
    <dependency>
      <groupId>org.apache.royale.compiler</groupId>
      <artifactId>compiler-common</artifactId>
      <version>0.9.4</version>
    </dependency>
    <dependency>
      <groupId>com.google.javascript</groupId>
      <artifactId>closure-compiler</artifactId>
      <version>v20170626</version>
    </dependency>

    <dependency>
      <groupId>org.apache.royale.compiler</groupId>
      <artifactId>compiler-test-utils</artifactId>
      <version>0.9.4</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

</project>
