<?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="ACCESSIBILITY Build" default="build" basedir=".">
    <description>Build for ACCESSIBILITY component</description>

    <property name="hy.module" value="accessibility" />
    <property name="hy.hdk" location="${basedir}/../../deploy" />
    <import file="${hy.hdk}/build/ant/properties.xml" />

    <property file="../../make/depends.properties" />

    <target name="build" depends="compile-java, build-jar" />

    <target name="test" depends="-test-module">
        <fail message="Some tests failed">
            <condition>
                <or>
                    <isset property="test.failures" />
                    <isset property="test.errors" />
                </or>
            </condition>
        </fail>
    </target>

    <!-- internal target for local and global test run sequence -->
    <target name="-test-module" depends="build, run-tests" />

    <target name="clean" depends="clean-java,clean-test" />
    
    <target name="clean-java" depends="class-patternset">
        <delete file="${hy.jdk}/jre/lib/boot/accessibility.jar" />
        <delete file="${hy.jdk}/jre/lib/boot/accessibility-src.jar" />
        <delete failonerror="false">
            <fileset refid="classes" />
        </delete>
        <delete-patternset module="${hy.module}" />
    </target>

    <target name="clean-test">
        <delete dir="${tests.hdk.dir}" failonerror="false" />
        <delete failonerror="false" dir="bin"/>
    </target>

    <target name="compile-java">
        <echo message="Compiling ${hy.module} classes" />

        <mkdir dir="../../build/classes" />

        <javac sourcepath=""
               srcdir="src/main/java" 
               destdir="../../build/classes"
               compiler="${hy.javac.compiler}"
               memoryMaximumSize="${hy.javac.maxmem}"
               source="${hy.javac.source}" 
               target="${hy.javac.target}"
               debug="${hy.javac.debug}">

            <compilerarg line="${build.compilerarg}" />

            <bootclasspath>
                <fileset dir="${hy.jdk}/jre/lib/boot">
                    <include name="**/*.jar" />
                </fileset>
            </bootclasspath>
        </javac>
    </target>

    <target name="findbugs" depends="build-jar">
        <run-findBugs
            jarFile="${hy.jdk}/jre/lib/boot/accessibility.jar"
            excludeFilter="make/findbugs-exclude-filter.xml"
            outputFile="${findBugs.report}/accessibility.xml"/>
    </target>

    <target name="build-jar" depends="svn-info,class-patternset">
        <mkdir dir="${hy.jdk}/jre/lib/boot"/>
        <jar destfile="${hy.jdk}/jre/lib/boot/accessibility.jar"
             manifest="META-INF/MANIFEST.MF"
             compress="${hy.jar.compress}">
            <fileset refid="classes" />
            <fileset refid="resources" />
            <manifest>
                <attribute name="Implementation-Version" value="${svn.info}"/> 
            </manifest>

            <metainf refid="hy.required.metainf-files"/>    
        </jar>

        <jar destfile="${hy.jdk}/jre/lib/boot/accessibility-src.jar">
            <fileset dir="src/main/java" />
            <manifest>
                <attribute name="Implementation-Version" value="${svn.info}"/> 
            </manifest>

            <metainf refid="hy.required.metainf-files"/>
        </jar>

    </target>

    <target name="test-jar" depends="svn-info,compile-tests">
	<mkdir dir="${tests.hdk.dir}" />

        <copy file="make/run-test.xml" tofile="${tests.hdk.dir}/build.xml" />

        <jar destfile="${tests.hdk.dir}/accessibility_tests.jar">
            <fileset dir="bin/test" />
            <manifest>
                <attribute name="Implementation-Version" value="${svn.info}"/> 
            </manifest>
            <metainf refid="hy.required.metainf-files"/>
        </jar>

        <mkdir dir="${tests.excludes.hdk.dir}"/>
        <copy todir="${tests.excludes.hdk.dir}">
            <fileset dir="make" includes="exclude*"/>
            <filterchain>
                <tokenfilter>
                    <replaceregex pattern="\.java" replace="\.class" flags="g"/>
                </tokenfilter>
            </filterchain>
        </copy>

        <copy file="../../${junit.jar}"
              tofile="${hy.hdk}/build/test/junit.jar" />
    </target>

    <target name="compile-tests">
        <compile-tests description="accessibility api tests">
            <javac-elements>
                <src>
                    <pathelement location="src/test/api/java/common" />
                </src>
            </javac-elements>
        </compile-tests>
    </target>

    <target name="run-tests" depends="test-jar">
        <ant dir="${tests.hdk.dir}" target="test-module" />
    </target>

    <target name="class-patternset">
        <make-patternset module="${hy.module}" />
    </target>

</project>
