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

    <property name="hy.component" value="classlib" />
    <property name="hy.module" value="x-tools" />
    <property name="hy.target" location="${basedir}/../../target" />
    <import file="${hy.target}/hdk/build/ant/properties.xml" />
    <import file="${hy.hdk}/build/ant/depends.xml" />

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

    <target name="build" depends="check-depends,-build-no-check"/>
    <target name="-build-no-check" depends="-build-jar,-test-jar" />

    <target name="check-depends" unless="skip.java.build">
        <check-one-file src="${ecj.url}" dest="${ecj.jar}" />
        <copy file="${ecj.jar}" todir="${hy.jdk}/lib" />
    </target>

    <target name="fetch-depends" unless="skip.java.build">
        <mkdir dir="${ecj.dir}" />
        <download-one-file src="${ecj.url}" dest="${ecj.jar}" md5="${ecj.md5}"/>
    </target>

    <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" unless="skip.java.build"
            depends="-class-patternset">
        <delete file="${hy.jdk}/jre/lib/boot/${hy.module}.jar" />
        <delete file="${hy.jdk}/jre/lib/boot/${hy.module}-src.jar" />
        <delete failonerror="false">
            <fileset refid="classes" />
        </delete>
        <delete-patternset module="${hy.module}" />
    </target>

    <target name="-clean-test" unless="skip.test.build">
        <delete dir="${tests.hdk.dir}" failonerror="false" />
        <delete failonerror="false" dir="${hy.build.mod}/test"/>
    </target>

    <target name="-compile-java" unless="skip.java.build">
        <compile-classes description="${hy.module} classes">
            <javac-elements>
                <src path="src/main/java" />
            </javac-elements>
        </compile-classes>
    </target>

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

    <target name="-build-jar" unless="skip.java.build"
            depends="-svn-info,-compile-java,-class-patternset">
        <hy.jar.bin destfile="${hy.jdk}/jre/lib/boot/${hy.module}.jar"
                    manifest="META-INF/MANIFEST.MF">
            <fileset refid="classes" />
            <fileset refid="resources" />
        </hy.jar.bin>

        <hy.jar.src destfile="${hy.jdk}/jre/lib/boot/${hy.module}-src.jar">
            <fileset dir="src/main/java" />
        </hy.jar.src>
    </target>

    <target name="-test-jar" unless="skip.test.build"
            depends="-svn-info,-compile-tests" if="build.x.tools">
        <mkdir dir="${tests.hdk.dir}" />
        
        <copy file="make/run-test.xml" tofile="${tests.hdk.dir}/build.xml" />
        
        <hy.jar.bin destfile="${tests.hdk.dir}/${hy.module}_tests.jar">
            <fileset dir="${hy.build.mod}/test/api" />
        </hy.jar.bin>

        <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>
    </target>

    <target name="-compile-tests" unless="skip.test.build">
        <compile-tests description="${hy.module} api tests">
            <javac-elements>
                <src>
                    <pathelement location="src/test/java" />
                </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" unless="skip.java.build">
        <make-patternset module="${hy.module}" />
    </target>

</project>
