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

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

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

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

    <target name="clean" depends="-clean-java,-clean-native,-clean-test" />

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

    <!-- Build native code -->
    <target name="-build-native" unless="skip.native.build">
        <make dir="src/main/native/${hy.module}/${hy.os.family}" />
    </target>
    
    <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-native" unless="skip.native.build">
        <make dir="src/main/native/instrument/${hy.os.family}" target="clean" />
    </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">
        <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>

        <copy todir="${tests.resources.hdk.dir}" includeemptydirs="false">
            <fileset dir="src/test/resources">
                <exclude name="**/*.java" />
            </fileset>
        </copy>
    </target>

    <target name="-compile-tests" unless="skip.test.build">
        <compile-tests description="${hy.module} 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>
