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

    <target name="help">
        <echo>
Apache Harmony Tools Build

Usage:

  ant build
    Compiles the java and native code and populates the hdk.

  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 fetch-depends
    Fetches dependencies. Note: Some of Harmony's dependencies are
    licensed under terms other than the Apache License v2.

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

The 'build' and 'test' targets can be configured to only build/test a
single module by setting the 'build.module' property. For example, to
run the tests for the "jdktools" module:

  ant test -Dbuild.module=jdktools

The 'test' target can further be configured to run a single test by setting
the 'test.case' property. For example, to run a specific test in the "luni"
module:

  ant test -Dbuild.module=jdktools -Dtest.case=org/apache/harmony/tests/tools/javac/MainTest
        </echo>
    </target>

    <property file="${user.home}/.harmony-jdktools.properties" />
    <property name="common.resources" location="../common_resources" />
    <property name="hy.target" location="target" />
    <property name="hy.component" value="jdktools" />
    <property name="hy.module" value="toplevel" />
    <fail message="Property 'hy.target' is not defined">
        <condition>
            <not><isset property="hy.target" /></not>
        </condition>
    </fail>
    <fail message="Property 'common.resources' is not defined">
        <condition>
            <not><isset property="common.resources" /></not>
        </condition>
    </fail>

    <mkdir dir="${hy.target}/hdk/build/ant" />
    <copy todir="${hy.target}/hdk/build/ant" preservelastmodified="true">
        <fileset dir="${common.resources}/make" includes="*.xml"/>
    </copy>

    <!-- import properties for snapshot targets -->
    <import file="${hy.target}/hdk/build/ant/properties.xml" />
    <init-hdk/>

    <!-- ================================
	 target : rebuild
	     
	 builds with a clean first
	 ================================= -->
    <target name="rebuild" depends="clean,build"
        description="Performs a full build - that is 'clean' then 'build'" />
	
    <target name="build" description="Compiles the java, natives and tests">
        <poll-modules target="build" />
    </target>

    <target name="clean"
            description="Removes all the files generated by a build" >
        <poll-modules target="clean" />
    </target>

    <target name="test" depends="clean-test-output,-test-modules"
            description="Runs all tests" />

    <target name="-test-modules">
        <poll-modules target="test" />
    </target>

    <target name="clean-test-output">
        <delete dir="${tests.output}" />
    </target>

    <target name="findbugs" depends="check-depends"
            description="Runs FindBugs on all modules">
        <echo>
========================================
Finding bugs in all class libraries...
========================================
</echo>
        <poll-modules target="findbugs" />
    </target>

    <target name="check-depends"
            description="Report on whether the dependencies are met">
        <poll-modules target="check-depends" />
    </target>

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

    <target name="properties" depends="echo"
        description="Display the properties that are use by this build" />

</project>

