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

    <property name="hy.component" value="classlib" />
    <property name="hy.module" value="sql" />
    <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="clean" depends="-clean-java,-clean-test" />

    <target name="check-depends">
        <check-one-file src="${derby.url}" dest="${derby.jar}" />
    </target>

    <target name="fetch-depends">
        <mkdir dir="${derby.dir}" />
        <download-one-file src="${derby.url}" dest="${derby.jar}"
                           md5="${derby.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-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 dir="${hy.hdk}/build/test/derby" /> 
        <delete failonerror="false" dir="bin"/>
    </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>

        <copy todir="${hy.hdk}/build/test/derby"> 
            <fileset dir="${derby.dir}">
                <include name="*.jar" />
            </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>
