langtools/make/netbeans/langtools/build.xml
changeset 1873 658385834998
child 2212 1d3dc0e0ba0c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/make/netbeans/langtools/build.xml	Fri Jan 23 11:23:10 2009 -0800
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2007-2008 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.
+-->
+
+<project name="langtools-netbeans" default="build" basedir="../../..">
+    
+    <property name="langtools.properties" 
+        location="make/netbeans/langtools/nbproject/private/langtools.properties"/>
+    
+    <!-- 
+        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"/> 
+    
+    <!-- Build project. (action: build; F11)
+        If langtools.tool.name is set, then just build that tool; otherwise
+        build all tools.
+    -->
+    
+    <target name="build" depends="-get-tool-if-set,-build-tool,-build-all" 
+        description="Build one or all langtools tools"
+        />
+        
+    <target name="-build-tool" if="langtools.tool.name">
+        <echo level="info" message="Building ${langtools.tool.name}"/>
+        <echo level="verbose" message="(Unset langtools.tool.name to build all tools)"/>
+        <antcall target="build-${langtools.tool.name}"/>
+    </target>
+    
+    <target name="-build-all" unless="langtools.tool.name">
+        <echo level="info" message="Building all tools"/>
+        <echo level="verbose" message="(Set langtools.tool.name to build a single tool)"/>
+        <antcall target="build-all-tools"/>
+    </target>
+    
+    <!-- Compile a single file. (action: compile.single; F9) -->
+    
+    <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="${javac.target}"
+               debug="${javac.debug}" 
+               debuglevel="${javac.debuglevel}"/>
+    </target>
+    
+    <!-- Run tool. (action: run; F6) 
+        Use langtools.tool.name and langtools.tool.args properties if set; otherwise prompt
+        the user.
+    -->
+    
+    <target name="run" depends="-check-target.java.home,build,-def-run,-get-tool-and-args" 
+            description="run tool">
+        <echo level="info" message="Run ${langtools.tool.name} with args ${langtools.tool.args}"/>
+        <run mainclass="com.sun.tools.${langtools.tool.name}.Main" args="${langtools.tool.args}"/>
+    </target>
+    
+    <!-- Run a selected class. (action: run.single;  shift-F6) -->
+    
+    <target name="run-single" depends="-check-target.java.home,-def-run">
+        <fail unless="run.classname">Must set property 'run.classname' </fail>
+        <echo level="info" message="run ${run.classname}"/>
+        <run mainclass="${run.classname}" args=""/>
+    </target>
+    
+    <!-- Test project, and display results if tests failed. (action: test; Alt-F6)
+        If langtools.tool.name is set, then just test that tool; otherwise
+        test all tools.
+    -->
+    
+    <target name="jtreg" depends="-get-tool-if-set,-jtreg-tool,-jtreg-all" 
+        description="Test one or all langtools tools"
+        />
+    
+    <target name="-jtreg-tool" if="langtools.tool.name">
+        <echo level="info" message="Testing ${langtools.tool.name}"/>
+        <echo level="verbose" message="(Unset langtools.tool.name to test all tools)"/>
+        <antcall>
+            <target name="jtreg-${langtools.tool.name}"/>
+            <target name="-show-jtreg"/>
+        </antcall>
+    </target>
+    
+    <target name="-jtreg-all" unless="langtools.tool.name">
+        <echo level="info" message="Testing all tools"/>
+        <echo level="verbose" message="(Set langtools.tool.name to test a single tool)"/>
+        <antcall>
+            <target name="langtools.jtreg"/>
+            <target name="-show-jtreg"/>
+        </antcall>
+    </target>
+    
+    <target name="-show-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" depends="-check-target.java.home,-def-run,-def-start-debugger,-get-tool-and-args,build" if="netbeans.home">
+        <echo level="info" message="Debug ${langtools.tool.name} with args ${langtools.tool.args}"/>
+        <start-debugger/>
+        <run mainclass="com.sun.tools.${langtools.tool.name}.Main" args="${langtools.tool.args}" jpda.jvmargs="${jpda.jvmargs}"/>
+    </target>
+    
+    <!-- Debug a selected class . -->
+    <target name="debug-single" depends="-check-target.java.home,-def-start-debugger,-def-run">
+        <fail unless="debug.classname">Must set property 'debug.classname'</fail>
+        <start-debugger/>
+        <run mainclass="${debug.classname}" default.args="" jpda.jvmargs="${jpda.jvmargs}"/>
+    </target>
+    
+    <!-- Debug a jtreg test. -->
+    <target name="debug-jtreg" depends="-check-target.java.home,-def-start-debugger,-def-jtreg">
+        <fail unless="jtreg.tests">Must set property 'jtreg.tests'</fail>
+        <start-debugger/>
+        <jtreg-tool name="debug" samevm="false" tests="${jtreg.tests}" jpda.jvmargs="${jpda.jvmargs}"/>
+    </target>
+    
+    <!-- Update a class being debugged. -->
+    
+    <target name="debug-fix" if="langtools.tool.name">
+        <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>
+    
+    <!-- Generate javadoc for one or all tools. (action: javadoc; Alt-F6)
+        If langtools.tool.name is set, then just test that tool; otherwise
+        test all tools.
+    -->
+    
+    <target name="javadoc" depends="-javadoc-tool,-javadoc-all" 
+        description="Generate javadoc for one or all langtools tools"
+        />
+        
+    <target name="-javadoc-tool" if="langtools.tool.name">
+        <echo level="info" message="Generate javadoc for ${langtools.tool.name}"/>
+        <echo level="verbose" message="(Unset langtools.tool.name to generate javadoc for all tools)"/>
+        <antcall>
+            <target name="javadoc-${langtools.tool.name}"/>
+            <target name="-show-javadoc"/>
+        </antcall>
+    </target>
+    
+    <target name="-javadoc-all" unless="langtools.tool.name">
+        <echo level="info" message="Generate javadoc for all tools"/>
+        <echo level="verbose" message="(Set langtools.tool.name to generate javadoc for a single tool)"/>
+        <antcall>
+            <target name="langtools.javadoc"/>
+            <target name="-show-javadoc"/>
+        </antcall>
+    </target>
+    
+    <target name="-show-javadoc" if="netbeans.home">
+        <!-- what if doing javadoc for all? -->
+        <nbbrowse file="${build.javadoc.dir}/${langtools.tool.name}/index.html"/>
+    </target>
+    
+    <!-- Prompt for values. -->
+    
+    <target name="-get-tool-if-set" depends="-def-select-tool">
+        <select-tool 
+            toolproperty="langtools.tool.name" 
+            propertyfile="${langtools.properties}"
+            askIfUnset="false"
+            />
+    </target>
+    
+    <target name="-get-tool-and-args" depends="-def-select-tool">
+        <select-tool 
+            toolproperty="langtools.tool.name" 
+            argsproperty="langtools.tool.args" 
+            propertyfile="${langtools.properties}"
+            askIfUnset="true"
+            />
+    </target>
+
+    <!-- Macro to run a tool or selected class - used by run* and debug* tasks -->
+    <target name="-def-run">
+        <macrodef name="run">
+            <attribute name="mainclass"/>
+            <attribute name="args" default=""/>
+            <attribute name="jpda.jvmargs" default=""/>
+            <sequential>
+                <java fork="true" jvm="${target.java}" classname="@{mainclass}">
+                    <jvmarg line="-Xbootclasspath/p:${build.classes.dir}"/>
+                    <jvmarg line="@{jpda.jvmargs}"/>
+                    <arg line="@{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>
+    
+    <target name="-def-select-tool">
+        <mkdir dir="${build.toolclasses.dir}"/>
+        <javac srcdir="${make.tools.dir}/SelectTool"
+               destdir="${build.toolclasses.dir}/"
+               classpath="${ant.home}/lib/ant.jar"
+               debug="${javac.debug}" 
+               debuglevel="${javac.debuglevel}">
+                   <compilerarg line="-Xlint"/>
+        </javac>
+        <taskdef name="select-tool"
+                 classname="SelectToolTask" 
+                 classpath="${build.toolclasses.dir}/"/>
+    </target>
+        
+    <target name="select-tool" depends="-def-select-tool">
+        <select-tool propertyfile="${langtools.properties}"/>
+    </target>
+</project>