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

    <!-- import common properties -->
    <property name="tests.build.output" location="${basedir}/../../build/tests" />
    <import file="../../make/properties.xml" />

    <property name="tests.output" location="../../build/test_report" />

    <!-- set global properties for this build. -->
    <xmlproperty file="make/hyproperties.xml" semanticAttributes="true" />
    
    <!-- filename for tests exclude list -->
    <property name="jpda.exclude.file" location="${hy.hdk}/build/jdktools.jpda.exclude" />

    <fileset id="classes" dir="${hy.build}">
        <or>
            <present targetdir="${hy.jpda.src.main.java}" />
            <present targetdir="${hy.jpda.src.main.java}">
                <mapper type="regexp"
                        from="^(.*?)(\$$[^/\\\.]*)?\.class$$"
                        to="\1.java"/>
            </present>
        </or>
    </fileset>

    <target name="fetch-depends">
        <fetch dep="jdt.jdi.jar"/>
        <fetch dep="jdt.jdimodel.jar"/>
        <fetch dep="icu"/>
    </target>

    <target name="check-depends">
        <check-one-file src="${jdt.jdi.jar.url}"
                        dest="${jdt.jdi.jar}" />
        <check-one-file src="${jdt.jdimodel.jar.url}"
                        dest="${jdt.jdimodel.jar}" />
        <check-one-file src="${icu.url}" dest="${icu.jar}" />
    </target>

    <target name="build" depends="check-depends, build-java, build-native" />

    <target name="clean" depends="clean-java, clean-native" />

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

    <!-- Build Java code -->
    <target name="build-java" depends="compile-java, build-jar, copy-jars" />

    <target name="compile-java">
        <echo message="Compiling JPDA classes" />
        <ensure-javac/>
        <mkdir dir="${hy.build}" />

        <hy.javac sourcepath=""
               srcdir="${hy.jpda.src.main.java}"
               destdir="${hy.build}">

            <!-- HDK class library -->
            <classpath>
                <fileset dir="${hy.hdk}/jdk/jre/lib/boot">
                    <include name="**/*.jar" />
                    <exclude name="**/*-src.jar" />
                </fileset>
            </classpath>

            <classpath>
                <pathelement path="${jdt.jdi.jar}"/>
                <pathelement path="${jdt.jdimodel.jar}"/>
            </classpath>
        </hy.javac>
    </target>

    <!-- create jdtstub.jar to resolve JDI implementation dependency -->
    <target name="build-jar" depends="svn-info">
        <mkdir dir="${jdktools.deploy.dir}/lib" />

        <jar destfile="${jdktools.deploy.dir}/lib/jdtstub.jar"
             manifest="${hy.jpda}/META-INF/MANIFEST.MF">

            <fileset refid="classes" />

            <manifest>
                <attribute name="Implementation-Version" value="${svn.info}"/> 
            </manifest>

            <metainf file="${hy.hdk}/NOTICE"/>
            <metainf file="${hy.hdk}/LICENSE"/>
        </jar>

        <jar destfile="${jdktools.deploy.dir}/lib/jdtstub-src.jar">
            <fileset dir="${hy.jpda.src.main.java}" />
            <manifest>
                <attribute name="Implementation-Version" value="${svn.info}"/> 
            </manifest>

            <metainf file="${hy.hdk}/NOTICE"/>
            <metainf file="${hy.hdk}/LICENSE"/>
        </jar>
    </target>

    <!-- copy all required jars with JDI implementation and dependent classes -->
    <target name="copy-jars">
        <mkdir dir="${jdktools.deploy.dir}/lib" />
        <copy todir="${jdktools.deploy.dir}/lib" flatten="true">
            <fileset file="${icu.jar}"/>
            <fileset file="${jdt.jdimodel.jar}"/>
        </copy>
    </target>

    <!-- Build native code -->
    <target name="build-native">
        
        <echo message="Compiling JPDA natives" />

        <!-- Build agent shared lib -->
        <make dir="${hy.jpda.src.main.native}/jdwp/${hy.os.family}/agent" />
        
        <!-- Build socket transport shared lib -->
        <make dir="${hy.jpda.src.main.native}/jdwp/${hy.os.family}/transport/dt_socket" />

        <antcall target="-build-native-windows" />

        <!-- copy to our local jdk skeleton -->
        <copy todir="${jdktools.deploy.dir}/jre/bin" overwrite="yes">
            <fileset dir="${hy.jpda.src.main.native}/jdwp/${hy.os.family}">
                <include name="*${shlib.suffix}"/>
                <include name="*${progdb.suffix}" if="is.windows" />
            </fileset>
        </copy>
    </target>

    <target name="-build-native-windows" if="is.windows">
        <!-- Build shared memory transport shared lib on Windows -->
        <make dir="${hy.jpda.src.main.native}/jdwp/${hy.os.family}/transport/dt_shmem" />
    </target>

    <!-- internal target for local and global test run sequence -->
    <target name="test-module" depends="build-tests, prepare-exclude, run-tests" />

    <!-- Clean Java -->
    <target name="clean-java">
        <echo message="Cleaning JPDA classes" />

        <delete file="${jdktools.deploy.dir}/lib/jdtstub.jar" />
        <delete file="${jdktools.deploy.dir}/lib/jdtstub-src.jar" />

        <delete includeemptydirs="true" failonerror="false">
            <!--fileset refid="classes" /-->
            <fileset dir="${hy.build}" />
            <fileset dir="${tests.build.output}/classes" />
        </delete>
    </target>

    <!-- Clean natives -->
    <target name="clean-native">
        <echo message="Cleaning JPDA natives" />
        <make dir="${hy.jpda.src.main.native}/jdwp/${hy.os.family}/agent" target="clean" />
        <make dir="${hy.jpda.src.main.native}/jdwp/${hy.os.family}/transport/dt_socket" target="clean" />
        <antcall target="-clean-native-windows" />
    </target>

    <target name="-clean-native-windows" if="is.windows">
        <make dir="${hy.jpda.src.main.native}/jdwp/${hy.os.family}/transport/dt_shmem" target="clean" />
    </target>

    <!-- Compile JDWP tests always with debug info included -->
    <target name="build-tests" >
        <echo message="Compiling JPDA tests" />
        <ensure-javac/>
        <mkdir dir="${tests.build.output}/classes" />
        <hy.javac
            srcdir="${hy.jpda.src.test}"
            destdir="${tests.build.output}/classes"
            sourcepath=""
            debug="on">

            <!-- HDK class library -->
            <classpath>
                <fileset dir="${hy.hdk}/jdk/jre/lib/boot">
                    <include name="**/*.jar" />
                    <exclude name="**/*-src.jar" />
                </fileset>
            </classpath>
            
            <classpath>
                <pathelement path="${tests.build.output}/classes"/>
                <pathelement path="${junit.jar}"/>
            </classpath>
        </hy.javac>
    </target>

    <target name="prepare-exclude">
        <echo message="JPDA exclude list: ${jpda.exclude.file}" />
        <prepare-exclude-list moduleName="jpda" dir="./make"
                             result="${jpda.exclude.file}" />
    </target>

    <target name="run-tests" depends="build-tests, prepare-exclude">

        <property name="test.jre.home" value="${jdktools.deploy.dir}/jre" />
        <property name="test.jre.jvm" value="${test.jre.home}/bin/java" />
        <property name="test.debugger.jvm" value="${test.jre.jvm}" />
        <property name="test.debuggee.jvm" value="${test.jre.jvm}" />
	
        <echo message="Running JPDA tests" />
        <echo message="  Debugger JVM=${test.debugger.jvm}" />
        <echo message="  Debuggee JVM=${test.debuggee.jvm}" />

        <mkdir dir="${tests.output}" />

        <junit fork="yes"
                       forkmode="${hy.test.forkmode}"
                       timeout="${hy.test.timeout}"
                       printsummary="withOutAndErr"
                       errorproperty="test.errors"
                       failureproperty="test.failures"
                       showoutput="off"
                       dir="${tests.output}"
                       jvm="${test.debugger.jvm}">

            <!-- JVM arguments for debugger process -->
            <jvmarg line="${hy.test.vmargs}" />
            
            <!-- JVM path and arguments for debuggee process -->
            <jvmarg value="-Djpda.settings.debuggeeJavaPath=${test.debuggee.jvm}" />
            <jvmarg value="-Djpda.settings.debuggeeVMExtraOptions=${hy.test.vmargs}" />

            <classpath>
                <pathelement path="${tests.build.output}/classes"/>
            </classpath>

            <formatter type="xml" />

            <test name="${test.case}" todir="${tests.output}" if="test.case" />

            <!-- short running tests-->
            <batchtest todir="${tests.output}" haltonfailure="off" unless="test.case">

                <fileset dir="${hy.jpda.src.test}">
                    <!-- if ${test.case}     -->
                    <include name="${converted.tc}" if="test.case" />

                    <!-- unless ${test.case} -->
                    <include name="**/*Test.java" unless="test.case" />
                    <exclude name="**/org/apache/harmony/jpda/tests/jdwp/MultiSession/*Test.java" unless="test.case" />
                    <exclude name="**/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StopTest.java" unless="test.case" />
                    <exclude name="**/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/HoldEventsTest.java" unless="test.case" />
                    <excludesfile name="${jpda.exclude.file}" unless="test.case" />
                </fileset>
            </batchtest>

            <!-- long running tests-->
            <batchtest todir="${tests.output}" haltonfailure="off" unless="test.case">
                <fileset dir="${hy.jpda.src.test}">
                    <!-- if ${test.case}     -->
                    <include name="${converted.tc}" if="test.case" />

                    <!-- unless ${test.case} -->
                    <include name="**/org/apache/harmony/jpda/tests/jdwp/MultiSession/*Test.java" unless="test.case" />
                    <include name="**/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StopTest.java" unless="test.case" />
                    <include name="**/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/HoldEventsTest.java" unless="test.case" />
                    <excludesfile name="${jpda.exclude.file}" unless="test.case" />
                </fileset>
            </batchtest>
        </junit>

        <antcall target="touch-failures-file" />
        <antcall target="touch-errors-file" />
    </target>

    <target name="touch-failures-file" if="test.failures">
        <echo file="${tests.output}/test.failures"
            append="true">jpda${line.separator}</echo>
    </target>

    <target name="touch-errors-file" if="test.errors">
        <echo file="${tests.output}/test.errors"
            append="true">jpda${line.separator}</echo>
    </target>

</project>
