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

    <property name="hy.component" value="classlib" />
    <property name="hy.module" value="crypto" />
    <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,-test-jar" />

    <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">
        <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}_test_support.jar">
            <fileset dir="${hy.build.mod}/test/support" />
        </hy.jar.bin>

        <hy.jar.bin destfile="${tests.hdk.dir}/${hy.module}_api_tests.jar">
            <fileset dir="${hy.build.mod}/test/api" />
        </hy.jar.bin>
        <hy.jar.bin destfile="${tests.hdk.dir}/${hy.module}_api_boot_tests.jar">
            <fileset dir="${hy.build.mod}/test/api.injected" />
        </hy.jar.bin>

        <hy.jar.bin destfile="${tests.hdk.dir}/${hy.module}_impl_tests.jar">
            <fileset dir="${hy.build.mod}/test/impl" />
        </hy.jar.bin>
        <hy.jar.bin destfile="${tests.hdk.dir}/${hy.module}_impl_boot_tests.jar">
            <fileset dir="${hy.build.mod}/test/impl.injected" />
        </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} test support files"
                       destdir="${hy.build.mod}/test/support">
            <javac-elements>
                <src>
                    <pathelement location="src/test/support/common/java"/>

                    <!-- FIXME: CRYPTO tests should not reach into security module code -->
                    <pathelement location="../security/src/test/support/common/java"/>
                </src>

                <include name="**/*.java" />
            </javac-elements>
        </compile-tests>

        <compile-tests description="${hy.module} api tests"
                       destdir="${hy.build.mod}/test/api">
            <javac-elements>
                <src path="src/test/api/java"/>
                <include name="**/*Test.java" />
                <classpath>
                    <pathelement path="${hy.build.mod}/test/support" />
                </classpath>
            </javac-elements>
        </compile-tests>

        <compile-tests description="${hy.module} api injected tests"
                       destdir="${hy.build.mod}/test/api.injected">
            <javac-elements>
                <src path="src/test/api/java.injected"/>
                <include name="**/*Test.java" />
                <classpath>
                    <pathelement path="${hy.build.mod}/test/support" />
                </classpath>
            </javac-elements>
        </compile-tests>

        <compile-tests description="${hy.module} impl injected tests"
                       destdir="${hy.build.mod}/test/impl.injected">
            <javac-elements>
                <src path="src/test/impl/java.injected"/>
                <include name="**/*Test.java" />
            </javac-elements>
        </compile-tests>

        <compile-tests description="${hy.module} impl tests"
                       destdir="${hy.build.mod}/test/impl">
            <javac-elements>
                <src path="src/test/impl/java"/>
                <include name="**/*Test.java" />
                <classpath>
                    <pathelement path="${hy.build.mod}/test/support" />
                </classpath>
            </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>
