<?xml version="1.0" encoding="UTF-8"?>
<!--
 Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.

 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions
 are met:

   - Redistributions of source code must retain the above copyright
     notice, this list of conditions and the following disclaimer.

   - Redistributions in binary form must reproduce the above copyright
     notice, this list of conditions and the following disclaimer in the
     documentation and/or other materials provided with the distribution.

   - Neither the name of Sun Microsystems nor the names of its
     contributors may be used to endorse or promote products derived
     from this software without specific prior written permission.

 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->

<!--
 The file contains targets for NetBeans action that are shared across
 all langtools projects.
-->

<project name="shared" default="build" basedir="../../..">
    <!-- 
       Instead of importing the main build file, we could call it when needed.
       That would reduce the list of Ant targets that get displayed for this
       file, but it also complicates the interface between the project build 
       file and the main build file. For example, some imported targets
       would have to be reclared, properties would have to be restructured,
       and it would be harder to run results (e.g. in properties) from nested 
       targets.
     -->
    <import file="../../build.xml"/> 
    
    <property name="tool.mainclass" value="com.sun.tools.${tool.name}.Main"/>
    <property name="tool.default.args" value="-version"/>
    
    <!-- compile a single file -->
 
    <!-- for compile-single, etc, we might want different targets for 
         javac and not javac, because of bootstrap issues -->
    <target name="compile-single" depends="build-bootstrap-javac">
        <fail unless="includes">Must set property 'includes'</fail>
        <javac fork="true" executable="${build.bootstrap.dir}/bin/javac"
               srcdir="${src.classes.dir}"
               destdir="${build.classes.dir}"
               includes="${includes}"
               sourcepath=""
               includeAntRuntime="no"
               target="${target}"
               debug="${javac.debug}" 
               debuglevel="${javac.debuglevel}"/>
    </target>
    
    <!-- run tool -->
    
    <target name="run" depends="build,-def-run" description="run ${tool.description}">
        <run/>
    </target>
    
    <!-- run a selected class -->
    
    <target name="run-single" depends="-def-run">
        <fail unless="run.classname">Must set property 'run.classname'</fail>
        <run name="${run.classname}" mainclass="${run.classname}" default.args=""/>
    </target>
    
    <!-- run jtreg tests, and display results in NetBeans -->
    
    <target name="-jtreg-nb" depends="-jtreg" if="netbeans.home" unless="jtreg.passed">
        <nbbrowse file="${jtreg.report}/report.html"/>
        <fail>Some tests failed; see report for details.</fail>
    </target>
    
    <!-- debug tool in NetBeans -->
    
    <target name="-debug-nb" depends="build,-def-run,-def-start-debugger" if="netbeans.home">
        <start-debugger/>
        <run jpda.jvmargs="${jpda.jvmargs}"/>
    </target>
    
    <!-- debug a selected class -->
    
    <target name="debug-single-nb" depends="-def-start-debugger,-def-run">
        <fail unless="debug.classname">Must set property 'debug.classname'</fail>
        <start-debugger/>
        <run name="${debug.classname}" mainclass="${debug.classname}" default.args=""
             jpda.jvmargs="${jpda.jvmargs}"/>
    </target>
    
    <!-- debug a jtreg test -->
    
    <target name="debug-jtreg-nb" depends="-def-start-debugger,-def-jtreg"> 
        <fail unless="jtreg.tests">Must set property 'jtreg.tests'</fail>
        <start-debugger/>
        <jtreg-tool name="${tool.name}" samevm="false" tests="${jtreg.tests}" 
                    jpda.jvmargs="${jpda.jvmargs}"/>
    </target>
    
    <!-- update a class being debugged -->
    
    <target name="debug-fix">
        <fail unless="class">Must set property 'class'</fail>
        <antcall target="compile-single">
            <param name="includes" value="${class}.java"/>
        </antcall>
        <nbjpdareload>
            <fileset dir="${build.classes.dir}">
                <include name="${class}.class"/>
            </fileset>
        </nbjpdareload>
    </target>
    
    
    <!-- create javadoc documentation -->
    
    <target name="-javadoc-nb" depends="-javadoc" if="netbeans.home">
        <nbbrowse file="${build.javadoc.dir}/${tool.name}/index.html"/>
    </target>
    
    <!-- default target for those projects that don't have public API docs;
         override as needed for projects with public API docs.-->
    <target name="-javadoc"/>
    
    <!-- macro to run a tool or selected class - used by run* and debug* tasks -->
    
    <target name="-def-run">
        <macrodef name="run">
            <attribute name="name" default="${tool.name}"/>
            <attribute name="mainclass" default="${tool.mainclass}"/>
            <attribute name="default.args" default="${tool.default.args}"/>
            <attribute name="jpda.jvmargs" default=""/>
            <sequential>
                <input addproperty="run.args" message="Run @{name} with options" defaultvalue="@{default.args}"/>
                <java fork="true" jvm="${target.java}" classname="@{mainclass}">
                    <bootclasspath>
                        <pathelement location="${build.classes.dir}"/>
                        <pathelement location="${target.java.home}/jre/lib/rt.jar"/>
                    </bootclasspath>
                    <jvmarg line="@{jpda.jvmargs}"/> 
                    <arg line="${run.args}"/>
                </java>
            </sequential>
        </macrodef>
    </target>
    
    <!-- macro to start the debugger and set a property containg the args needed by the run task -->
    
    <target name="-def-start-debugger" if="netbeans.home">
        <macrodef name="start-debugger">
            <attribute name="jpda.jvmargs.property" default="jpda.jvmargs"/>
            <sequential>
                <nbjpdastart name="${ant.project.name}" addressproperty="jpda.address" transport="dt_socket">
                    <bootclasspath>
                        <pathelement location="${build.classes.dir}"/>
                        <pathelement location="${target.java.home}/jre/lib/rt.jar"/>
                    </bootclasspath>
                    <sourcepath>
                        <pathelement location="${src.classes.dir}"/>
                    </sourcepath>
                </nbjpdastart>
                <property 
                    name="@{jpda.jvmargs.property}" 
                    value="-Xdebug -Xnoagent -Djava.compiler=none -Xrunjdwp:transport=dt_socket,address=${jpda.address}"
                />
            </sequential>
        </macrodef>
    </target>
    
    
</project>
