<?xml version="1.0" encoding="UTF-8"?>

<!-- 
  This is ant (http://ant.apache.org) build script to build the
  "jmx-scandir" sample. Either this build.xml can be used standalone 
  with "ant" tool or can be opened as a project with NetBeans IDE
  (http://www.netbeans.org).
-->

<project name="jmx-scandir" default="jar" basedir=".">

    <import file="nbproject/jdk.xml"/>
    

    <target name="-prop-init">
        <property file="user.build.properties"/>
        <property file="build.properties"/>
    </target>

    <target name="-init" depends="-prop-init,-jdk-init"/>

    <target name="compile" depends="-init" description="Compile main sources.">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${classes.dir}" debug="${debug}" deprecation="${deprecation}">
            <classpath path="${cp}"/>
        </javac>
        <copy todir="${classes.dir}">
            <fileset dir="${src.dir}"/>
        </copy>
    </target>

    <target name="jar" depends="compile" description="Build JAR file for main sources.">
        <mkdir dir="${dist.dir}" />
        <jar jarfile="${jar}" compress="true">
            <manifest>
                <attribute name="Main-Class" value="${main.agent.class}"/>
            </manifest>
            <fileset dir="${classes.dir}"/>
        </jar>
    </target>

    <target name="run-client" depends="compile" description="Run client.">
        <fail unless="main.client.class">Must set property 'main.client.class' (e.g. in build.properties)</fail>
        <java classname="${main.client.class}" fork="true" failonerror="true">
            <classpath path="${run.cp}"/>
            <jvmarg line="${client.jvmargs}" />
            <arg line="${client.args}" />
        </java>
    </target>

    <target name="run-agent" depends="compile" description="Run agent.">
        <fail unless="main.agent.class">Must set property 'main.agent.class' (e.g. in build.properties)</fail>
        <java classname="${main.agent.class}" fork="true" failonerror="true">
            <classpath path="${run.cp}"/>
            <jvmarg line="${agent.jvmargs}" />
        </java>
    </target>

    <target name="run" depends="run-agent" description="Run agent." />

    <target name="run-single" depends="-init,compile">
        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
        <java classname="${run.class}" fork="true" failonerror="true">
            <classpath path="${run.cp}"/>
        </java>
    </target>

    <target name="javadoc" depends="-init" description="Build Javadoc.">
        <mkdir dir="${javadoc.dir}"/>
        <javadoc destdir="${javadoc.dir}">
            <classpath path="${cp}"/>
            <sourcepath>
                <pathelement location="${src.dir}"/>
            </sourcepath>
            <fileset dir="${src.dir}"/>
        </javadoc>
    </target>

    <target name="clean" depends="-init" description="Clean build products.">
        <delete dir="${build.dir}"/>
        <delete file="${jar}"/>
        <delete dir="${dist.dir}"/>
    </target>

    <target name="profile">
        <ant antfile="nbproject/netbeans-targets.xml" target="profile"/>
    </target>

    <!-- JUnit targets -->

    <target name="compile-test" depends="-init,compile">
        <fail unless="libs.junit.classpath">Must set libs.junit.classpath variable to the JUnit classpath in the build.properties file.</fail>
        <mkdir dir="${build.test.classes.dir}"/>
        <javac srcdir="${test.src.dir}" destdir="${build.test.classes.dir}" debug="${debug}" classpath="${javac.test.classpath}"/>
        <copy todir="${build.test.classes.dir}">
            <fileset dir="${test.src.dir}" excludes="**/*.java"/>
        </copy>
    </target>

    <target name="-do-test-run" depends="-init,compile-test">
        <mkdir dir="${build.test.results.dir}"/>
        <junit showoutput="true" fork="true" dir="${basedir}" failureproperty="tests.failed" errorproperty="tests.failed">
            <batchtest todir="${build.test.results.dir}">
                <fileset dir="${test.src.dir}" includes="**/*Test.java"/>
            </batchtest>
            <classpath>
                <path path="${run.test.classpath}"/>
            </classpath>
            <syspropertyset>
                <propertyref prefix="test-sys-prop."/>
                <mapper type="glob" from="test-sys-prop.*" to="*"/>
            </syspropertyset>
            <formatter type="brief" usefile="false"/>
            <formatter type="xml"/>
            <jvmarg line="${run.jvmargs}"/>
        </junit>
        <fail if="tests.failed">Some tests failed; see details above.</fail>
    </target>
    
    <target name="test" depends="-init,compile-test,-do-test-run" description="Run unit tests."/>

    <target name="-do-test-run-single" depends="-init,compile-test">
        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
        <junit showoutput="true" fork="true" dir="${basedir}" failureproperty="tests.failed" errorproperty="tests.failed">
            <batchtest todir="${build.test.results.dir}">
                <fileset dir="${test.src.dir}" includes="${test.includes}"/>
            </batchtest>
            <classpath>
                <path path="${run.test.classpath}"/>
            </classpath>
            <syspropertyset>
                <propertyref prefix="test-sys-prop."/>
                <mapper type="glob" from="test-sys-prop.*" to="*"/>
            </syspropertyset>
            <formatter type="brief" usefile="false"/>
            <formatter type="xml"/>
            <jvmarg line="${run.jvmargs}"/>
        </junit>
        <fail if="tests.failed">Some tests failed; see details above.</fail>
    </target>

    <target name="test-single" depends="-init,compile-test,-do-test-run-single" description="Run single unit test."/>
</project>
