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

    <property name="hy.module" value="logging" />
    <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, copy-properties" />

    <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/logging.jar" />
        <delete file="${hy.jdk}/jre/lib/boot/logging-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/logging.jar"
            excludeFilter="make/findbugs-exclude-filter.xml"
            outputFile="${findBugs.report}/logging.xml"/>
    </target>

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

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

        <jar destfile="${hy.jdk}/jre/lib/boot/logging-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="copy-properties">
        <copy todir="${hy.jdk}/jre/lib" flatten="yes">
            <fileset dir="src/main/java">
                <include name="**/logging.properties" />
            </fileset>
        </copy>
    </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}/logging_tests.jar">
            <fileset dir="bin/test" />
            <manifest>
                <attribute name="Implementation-Version" value="${svn.info}"/> 
            </manifest>
            <metainf refid="hy.required.metainf-files"/>
        </jar>
        <jar destfile="${tests.hdk.dir}/logging_boot_tests.jar">
            <fileset dir="bin/test-internal" />
            <manifest>
                <attribute name="Implementation-Version" value="${svn.info}"/> 
            </manifest>
            <metainf refid="hy.required.metainf-files"/>
        </jar>

        <copy file="../../support/src/test/resources/config/testing.policy"
              todir="${hy.hdk}/build/test" outputencoding="UTF-8" />

        <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}">
            <fileset dir="src/test/resources" />
        </copy>

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

    <target name="compile-tests">
        <compile-tests description="logging internal tests"
                       destdir="bin/test-internal">
            <javac-elements>
                <src>
                    <pathelement location="src/test/java-internal" />
                </src>
            </javac-elements>
        </compile-tests>
        <compile-tests description="logging api tests">
            <javac-elements>
                <bootclasspath>
                    <pathelement path="bin/test-internal"/>
                </bootclasspath>
                <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">
        <make-patternset module="${hy.module}" />
    </target>

</project>
