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

    <property name="hy.component" value="classlib" />
    <property name="hy.module" value="prefs" />
    <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 natives. Currently there are only windows natives for
     prefs, so we check if we are on a windows platform -->
    <target name="-build-native" if="is.windows" unless="skip.native.build">
        <make dir="src/main/native/prefs/${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>

    <!-- Clean natives. Currently there are only windows natives for
         prefs, so we check if we are on a windows platform -->
    <target name="-clean-native" if="is.windows" unless="skip.native.build">
        <make dir="src/main/native/prefs/${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}">
            <fileset dir="src/test/resources" />
        </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>
