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

    <property name="hy.component" value="classlib" />
    <property name="hy.module" value="security" />
    <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" />

    <target name="-build-native" unless="skip.native.build">
        <make dir="src/main/native/security/${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/security/${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>
                    <pathelement location="src/main/java/common"/>
                    <pathelement location="src/main/java/${hy.os.family}" />
                </src>
            </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="common.resources" />
        </hy.jar.bin>

        <hy.jar.src destfile="${hy.jdk}/jre/lib/boot/${hy.module}-src.jar">
            <fileset dir="src/main/java/common" />
            <fileset dir="src/main/java/${hy.os.family}" />
        </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_api.jar">
            <fileset dir="${hy.build.mod}/test/api" />
        </hy.jar.bin>
        <hy.jar.bin destfile="${tests.hdk.dir}/${hy.module}_tests_api_in.jar">
            <fileset dir="${hy.build.mod}/test/api.injected" />
        </hy.jar.bin>
        <hy.jar.bin destfile="${tests.hdk.dir}/${hy.module}_tests_impl.jar">
            <fileset dir="${hy.build.mod}/test/impl" />
        </hy.jar.bin>
        <hy.jar.bin destfile="${tests.hdk.dir}/${hy.module}_tests_impl_in.jar">
            <fileset dir="${hy.build.mod}/test/impl.injected" />
        </hy.jar.bin>
        <hy.jar.bin destfile="${tests.hdk.dir}/${hy.module}_tests_support.jar">
            <fileset dir="${hy.build.mod}/test/support" />
        </hy.jar.bin>

        <copy todir="${tests.resources.hdk.dir}">
            <fileset dir="src/test/resources" />
        </copy>

        <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>
    </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"/>
                </src>
                <include name="**/*.java" />
            </javac-elements>
        </compile-tests>

        <compile-tests description="${hy.module} api tests" destdir="${hy.build.mod}/test/api">
            <javac-elements>
                <src>
                    <pathelement location="src/test/api/java"/>
                </src>

                <include name="**/*Test.java" />
                <classpath location="${hy.build.mod}/test/support" />
            </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 location="${hy.build.mod}/test/support" />
            </javac-elements>
        </compile-tests>

        <compile-tests description="${hy.module} impl injected tests"
                       destdir="${hy.build.mod}/test/impl.injected">
            <javac-elements>
                <src>
                    <pathelement location="src/test/impl/java.injected"/>
                </src>

                <include name="**/*Test.java" />
                <classpath location="${hy.build.mod}/test/support" />
            </javac-elements>
        </compile-tests>

        <compile-tests description="${hy.module} impl tests"
                       destdir="${hy.build.mod}/test/impl">
            <javac-elements>
                <src>
                    <pathelement location="src/test/impl/java"/>
                </src>

                <include name="**/*Test.java" />
                <classpath location="${hy.build.mod}/test/support" />
            </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>
