<?xml version="1.0" ?>

<!--

  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="formatter" default="main" basedir=".">

    <!-- 

        PROPERTIES

    -->

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

    <property name="sdk" value="${compiler}/lib"/>

    <!-- Properties can be overridden locally by loading a local.properties file -->
    <!-- Java 8 users probably need javadoc.params=-Xdoclint:none -->
    <property file="${formatter}/local.properties"/>
    <property file="${basedir}/../env.properties"/>
    
    <property name="src.depend" value="true"/>

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

    <!-- JAR manifest entries -->
    <property name="manifest.sealed" value="false"/>
    <property name="manifest.Implementation-Title" value="Apache Royale ActionScript Formatter"/>
    <property name="manifest.Implementation-Version" value="${release.version}"/>
    <property name="manifest.Implementation-Vendor" value="Apache Software Foundation"/>
    
    <!-- label is set by CruiseControl script based on P4 label incrementer -->
    <condition property="build.number" value="${env.BUILD_NUMBER}">
        <isset property="env.BUILD_NUMBER"/>
    </condition>
    
    <!--

        formatter

    -->
    
    <target name="compile">
        <mkdir dir="${formatter}/target/classes"/>
        <javac debug="${javac.debug}" deprecation="${javac.deprecation}" destdir="${formatter}/target/classes" includeAntRuntime="true" includes="**/*.java"
            source="${javac.src}" target="${javac.src}">
            <compilerarg value="-Xlint:all,-path,-fallthrough"/>
            <src path="${formatter}/src/main/java"/>
            <classpath>
                <fileset dir="${formatter}/../compiler/lib" includes="compiler.jar"/>
            </classpath>
        </javac>
    </target>
    
    <target name="prebuild">
        <mkdir dir="${formatter}/target/classes" />
        <mkdir dir="${formatter}/target/classes/META-INF" />
    </target>
    
    <target name="main" depends="prebuild,compile" >
        <mkdir dir="${sdk}"/>
        <copy file="${basedir}/../LICENSE.base" tofile="${formatter}/target/classes/META-INF/LICENSE"/>
        <copy file="${basedir}/../NOTICE.base" tofile="${formatter}/target/classes/META-INF/NOTICE"/>
        <jar file="${sdk}/formatter.jar" basedir="${formatter}/target/classes" includes="**/*.properties,org/apache/**/*,META-INF/**/*">
            <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="Main-Class" value="org.apache.royale.formatter.FORMATTER" />
                <attribute name="Class-Path" value="compiler.jar"/>
            </manifest>
        </jar>
        <antcall target="test" />
        <antcall target="jar-test" />
    </target>

    <target name="test" >
        <ant dir="src/test" />
    </target>
    
    <target name="jar-test" >
        <echo>using formatter.jar from ${sdk}</echo>
        <java jar="${sdk}/formatter.jar" fork="true" resultproperty="formatter.result"/>
        <fail message="Starting Failed">
            <condition>
                <not>
                    <equals arg1="${formatter.result}" arg2="1"/>
                </not>
            </condition>
        </fail>
    </target>
    
    <!--

        CLEANUP

    -->

    <target name="clean" description="clean">
        <delete dir="${formatter}/target/classes"/>
    </target>

    <target name="wipe" depends="clean" description="Wipes everything that didn't come from Git.">
        <delete dir="${formatter}/target"/>
    </target>

 </project>
