<?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. -->

<!-- ====================================================================== 
     Build source and lay out results in the required format
     ====================================================================== -->
<project name="jdktools" default="build" basedir=".">
    <description>
    	Build jdktools
    </description>

    <import file="make/properties.xml"/>
        
    <target name="help">
        <echo>
Apache Harmony Ant Build

Usage:

  ant build
    Compiles the java and native code to produce a jdk in
    "deploy/jdk".

  ant clean
    Removes all the files generated by a build.

  ant rebuild
    Performs a full build - that is 'clean' then 'build'.

  ant test
    Runs all the tests.

  ant doc
    Generates the javadoc.

  ant properties
    Display the common properties that are use in the ant build files.

The 'build' and 'test' targets can be restricted to processing only
a single module by defining the 'build.module' variable on the ant
command line.  For example, to run only the luni tests:

  ant -Dbuild.module=jdktools test

        </echo>
    </target>
    
    <target name="rebuild" depends="clean,build"
        description="Performs a full build - that is 'clean' then 'build'" />

    <target name="build" depends="build-java,build-native"
        description="Compiles the java and native code to produce a jdk">
    </target>

    <target name="clean" depends="clean-java,clean-native,clean-tests"
            description="Removes all the files generated by a build" />

    <target name="rebuild-java" depends="clean-java,build-java"
            description="Like 'rebuild' but for java code only" />

    <target name="build-java" 
            description="Compiles the java code only" >
        <echo>
========================================
Building Java component archives...
========================================
        </echo>
        <ant antfile="make/build-java.xml" inheritall="false" target="build">
            <property name="hy.hdk" value="${hy.hdk}"/>
            <property name="hy.jdk" value="${hy.jdk}"/>
            <property name="harmony.jdktools" value="${harmony.jdktools}"/>
            <property name="external.resources" value="${external.resources}"/>
        </ant>
    </target>

    <target name="clean-java" 
            description="Removes the compiled java code" >
        <echo>
========================================
Cleaning Java component archives...
========================================
        </echo>
        <ant antfile="make/build-java.xml" inheritall="false" target="clean">
            <property name="hy.hdk" value="${hy.hdk}"/>
            <property name="hy.jdk" value="${hy.jdk}"/>
            <property name="harmony.jdktools" value="${harmony.jdktools}"/>
            <property name="external.resources" value="${external.resources}"/>
        </ant>
    </target>

    <target name="rebuild-native" depends="clean-native,build-native"
            description="Like 'rebuild' but for native code only" />

    <target name="build-native" 
            description="Compiles the native code only" >
        <echo>
========================================
Building native libs and executables...
========================================
        </echo>
        <ant antfile="make/build-native.xml" inheritall="false" target="build">
            <property name="hy.hdk" value="${hy.hdk}"/>
            <property name="hy.jdk" value="${hy.jdk}"/>
            <property name="harmony.jdktools" value="${harmony.jdktools}"/>
            <property name="external.resources" value="${external.resources}"/>
        </ant>
    </target>

    <target name="clean-native"
        description="Removes the compiled native code" >
        <echo>
========================================
Cleaning native libs and executables...
========================================
        </echo>
        <ant antfile="make/build-native.xml" inheritall="false" target="clean">
            <property name="hy.hdk" value="${hy.hdk}"/>
            <property name="hy.jdk" value="${hy.jdk}"/>
            <property name="harmony.jdktools" value="${harmony.jdktools}"/>
            <property name="external.resources" value="${external.resources}"/>
        </ant>
    </target>

    <target name="clean-tests"
        description="Removes the compiled tests and results" >
        <echo>
========================================
Cleaning compiled tests and results...
========================================
        </echo>
        <ant antfile="make/build-test.xml" inheritall="false" target="clean">
            <property name="hy.hdk" value="${hy.hdk}"/>
            <property name="hy.jdk" value="${hy.jdk}"/>
            <property name="harmony.jdktools" value="${harmony.jdktools}"/>
            <property name="external.resources" value="${external.resources}"/>
        </ant>
    </target>

    <target name="test"
            description="Runs all tests">
        <echo>
========================================
Testing jdktools binaries...
========================================
</echo>
        <ant antfile="make/build-test.xml" inheritall="false" target="test-all">
            <property name="hy.hdk" value="${hy.hdk}"/>
            <property name="hy.jdk" value="${hy.jdk}"/>
            <property name="harmony.jdktools" value="${harmony.jdktools}"/>
            <property name="external.resources" value="${external.resources}"/>
        </ant>
    </target>

    <target name="check-depends"
            description="Report on whether the dependencies are met">
        <ant antfile="make/depends.xml" target="check"/>
    </target>

    <target name="fetch-depends"
        description="Fetches dependencies. Note: Some of Harmony's dependencies are licensed under terms other than the Apache License v2.">
        <ant antfile="make/depends.xml" target="fetch"/>
    </target>

    <target name="properties" depends="tools-echo"
        description="Display the properties that are use in the ant build files"/>

</project>

