<?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 name="royaleunit-ant-tasks" default="main" basedir=".">

  <!-- 

      PROPERTIES

  -->

  <!-- The 'royaleunittasks' property is the absolute path, with forward slashes, -->
  <!-- to the 'compiler' directory that contains this file. -->
  <!-- All input paths are expressed as absolute paths starting with ${royaleunittasks}. -->
  <pathconvert property="royaleunittasks" dirsep="/">
      <path location="${basedir}"/>
  </pathconvert>

  <!-- The 'env' property contains all the environment variables -->
  <property environment="env"/>
  
  <!-- Properties can be overridden locally by loading a local.properties file -->
  <!-- Java 8 users probably need javadoc.params=-Xdoclint:none -->
  <property file="${royaleunittasks}/local.properties"/>
  <property file="${royaleunittasks}/../build.properties"/>
  <property name="javadoc.params" value="" />
  
  <!-- The 'sdk' property is the absolute path, with forward slashes, to the compiler/lib directory -->
  <!-- where a Royale SDK is built -->
  <!-- All output paths are expressed as absolute paths starting with ${sdk} -->
  <property name="sdk" value="${royaleunittasks}/../compiler-jx/lib"/>

  <!-- Options for <javac> tasks -->
  <property name="javac.debug" value="true"/>
  <property name="javac.deprecation" value="false"/>
  <property name="javac.src" value="1.8"/>

  <!-- JAR manifest entries -->
  <property name="manifest.sealed" value="false"/>
  <property name="manifest.Implementation-Title" value="Apache Royale - RoyaleUnit Ant Tasks"/>
  <property name="manifest.Implementation-Version" value="${release.version}"/>
  <property name="manifest.Implementation-Vendor" value="Apache Software Foundation"/>

  <property name="royaleunittasks.ant.binaries" value="**/*.class"/>
  
  <!-- env.BUILD_NUMBER is set by Jenkins CI -->
  <condition property="build.number" value="nightly-${env.BUILD_NUMBER}">
      <isset property="env.BUILD_NUMBER"/>
  </condition>
      
  <!--

      CLASSPATHS

  -->

  <path id="classpath">
      <fileset dir="${sdk}" includes="**/*.jar"/>
  </path>

  <target name="download" description="Downloads third-party JARs">
      <ant antfile="${royaleunittasks}/src/main/resources/downloads.xml" dir="${royaleunittasks}/src/main/resources" inheritAll="false"/>
  </target>

  <target name="compile" description="compile" depends="download">
    <mkdir dir="${royaleunittasks}/target/classes"/>
    <javac debug="${javac.debug}" deprecation="${javac.deprecation}"
            includes="**/*.java" destdir="${royaleunittasks}/target/classes" classpathref="classpath" includeAntRuntime="true"
            source="${javac.src}" target="${javac.src}">
        <src path="${royaleunittasks}/src/main/java"/>
        <compilerarg value="-Xlint:all,-path,-fallthrough,-cast"/>
    </javac>
    <copy todir="${royaleunittasks}/target/classes">
        <fileset dir="${royaleunittasks}/src/main/resources" includes="**/*.properties"/>
    </copy>
  </target>
  
  <target name="set.royale.royaleunittasks.jar.uptodate">
    <uptodate property="royale.royaleunittasks.jar.uptodate"
              targetfile="${sdk}/royaleUnitTasks.jar">
      <srcfiles dir="${royaleunittasks}/target/classes">
        <include name="**/*.class"/>
        <include name="**/*.properties"/>
      </srcfiles>
    </uptodate>
  </target>
  
  <target name="royale.royaleunittasks.jar" depends="set.royale.royaleunittasks.jar.uptodate" unless="royale.royaleunittasks.jar.uptodate">
    <mkdir dir="${royaleunittasks}/target/classes/META-INF"/>
    <copy file="${basedir}/../LICENSE.base" tofile="${royaleunittasks}/target/classes/META-INF/LICENSE"/>
    <copy file="${basedir}/../NOTICE.base" tofile="${royaleunittasks}/target/classes/META-INF/NOTICE"/>
    <mkdir dir="${sdk}"/>
    <jar file="${sdk}/royaleUnitTasks.jar" basedir="${royaleunittasks}/target/classes" >
      <include name="META-INF/LICENSE"/>
      <include name="META-INF/NOTICE"/>
      <manifest>
        <attribute name="Sealed" value="${manifest.sealed}"/>
        <attribute name="Implementation-Title" value="${manifest.Implementation-Title}"/>
        <attribute name="Implementation-Version" value="${manifest.Implementation-Version}.${build.number}"/>
        <attribute name="Implementation-Vendor" value="${manifest.Implementation-Vendor}"/>
        <attribute name="Class-Path" value="royaleunit/dom4j.jar royaleunit/java-websocket.jar royaleunit/slf4j-api.jar royaleunit/gson.jar royaleunit/driver.jar royaleunit/driver-bundle.jar royaleunit/playwright.jar"/>
      </manifest>
      <fileset dir="${royaleunittasks}/src/main/resources" includes="royaleUnitTasks.tasks"/>
      <fileset dir="${royaleunittasks}/src/main/resources" includes="TestRunner.template"/>
      <fileset dir="${royaleunittasks}/src/main/resources" includes="royaleUnitDescriptor.template"/>
      <fileset dir="${royaleunittasks}/target/classes" includes="${royaleunittasks.ant.binaries}"/>
    </jar>
  </target>

  <target name="jar" depends="compile,royale.royaleunittasks.jar"
        description="Creates JAR files"/>
    
  <!--

      SDK

  -->
  
  <target name="sdk" depends="jar, test" description="Builds the royaleUnitTasks.jar"/>

  <target name="main" depends="sdk" description="Default target - Builds the royaleUnitTasks.jar">
    <tstamp>
      <format property="build.datetime" pattern="MM/dd/yyyy hh:mm:ss aa"/>
    </tstamp>
    <echo>RoyaleUnit Ant Tasks main completed on ${build.datetime}</echo>
  </target>

  <target name="test" depends="jar" description="Runs JUnit tests">
      <!--<ant dir="src/test" />-->
  </target>
  
  <!--

      CLEANUP

  -->

  <target name="clean" description="clean">
    <ant antfile="${basedir}/src/main/resources/downloads.xml" target="clean" dir="${basedir}" />
      <delete dir="${royaleunittasks}/target" failonerror="false"/>
      <delete file="${sdk}/royaleUnitTasks.jar" failonerror="false"/>
  </target>

  <target name="wipe" depends="clean" description="Wipes everything that didn't come from Git.">
  </target>
</project>