build.xml revision 553:9d9f26857129
1104477Ssam<?xml version="1.0" encoding="UTF-8"?>
2104477Ssam<!--
3139749Simp Copyright (c) 2007, 2009, Oracle and/or its affiliates. All rights reserved.
4104477Ssam DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5104477Ssam
6104477Ssam This code is free software; you can redistribute it and/or modify it
7104477Ssam under the terms of the GNU General Public License version 2 only, as
8104477Ssam published by the Free Software Foundation.  Oracle designates this
9120915Ssam particular file as subject to the "Classpath" exception as provided
10104477Ssam by Oracle in the LICENSE file that accompanied this code.
11104477Ssam
12104477Ssam This code is distributed in the hope that it will be useful, but WITHOUT
13104477Ssam ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14104477Ssam FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15104477Ssam version 2 for more details (a copy is included in the LICENSE file that
16104477Ssam accompanied this code).
17104477Ssam
18104477Ssam You should have received a copy of the GNU General Public License version
19104477Ssam 2 along with this work; if not, write to the Free Software Foundation,
20104477Ssam Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
21104477Ssam
22104477Ssam Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
23104477Ssam or visit www.oracle.com if you need additional information or have any
24104477Ssam questions.
25104477Ssam-->
26104477Ssam
27104477Ssam<!--
28104477Ssam This is the main build file for the complete langtools workspace.
29104477Ssam It is used both when working on the tools in NetBeans, and when building
30104477Ssam JDK itself, in which case it is invoked from the wrapper Makefile.
31104477Ssam -->
32104477Ssam
33104477Ssam<project name="langtools" default="build" basedir="..">
34104477Ssam
35104477Ssam    <!-- Force full debuginfo for javac if the debug.classfiles
36104477Ssam    property is set.  This must be BEFORE the include of
37104477Ssam    build.properties because it sets javac.debuglevel.  -->
38104477Ssam    <condition property="javac.debuglevel" value="source,lines,vars">
39104477Ssam        <equals arg1="${debug.classfiles}" arg2="true"/>
40104477Ssam    </condition>
41104477Ssam
42104477Ssam    <!-- The following locations can be used to override default property values. -->
43119418Sobrien
44119418Sobrien    <!-- Use this location for customizations specific to this instance of this workspace -->
45119418Sobrien    <property file="build.properties"/>
46104477Ssam
47120915Ssam    <!-- Use this location for customizations common to all OpenJDK langtools workspaces -->
48104477Ssam    <property file="${user.home}/.openjdk/${ant.project.name}-build.properties"/>
49112124Ssam
50104477Ssam    <!-- Use this location for customizations common to all OpenJDK workspaces -->
51104477Ssam    <property file="${user.home}/.openjdk/build.properties"/>
52104477Ssam
53104477Ssam    <!-- Convenient shorthands for standard locations within the workspace. -->
54104477Ssam    <property name="build.dir" location="build"/>
55104477Ssam    <property name="build.bootstrap.dir" location="${build.dir}/bootstrap"/>
56104477Ssam    <property name="build.coverage.dir" location="${build.dir}/coverage"/>
57129879Sphk    <property name="build.classes.dir" location="${build.dir}/classes"/>
58104477Ssam    <property name="build.gensrc.dir" location="${build.dir}/gensrc"/>
59104477Ssam    <property name="build.genstubs.dir" location="${build.dir}/genstubs"/>
60104477Ssam    <property name="build.javadoc.dir" location="${build.dir}/javadoc"/>
61104477Ssam    <property name="build.jtreg.dir" location="${build.dir}/jtreg"/>
62104477Ssam    <property name="build.toolclasses.dir" location="${build.dir}/toolclasses"/>
63104477Ssam    <property name="dist.dir" location="dist"/>
64104477Ssam    <property name="dist.bin.dir" location="${dist.dir}/bin"/>
65104477Ssam    <property name="dist.coverage.dir" location="${dist.dir}/coverage"/>
66104477Ssam    <property name="dist.findbugs.dir" location="${dist.dir}/findbugs"/>
67104477Ssam    <property name="dist.lib.dir" location="${dist.dir}/lib"/>
68104477Ssam    <property name="make.dir" location="make"/>
69104477Ssam    <property name="make.tools.dir" location="${make.dir}/tools"/>
70104477Ssam    <property name="src.dir" location="src"/>
71104477Ssam    <property name="src.bin.dir" location="${src.dir}/share/bin"/>
72104477Ssam    <property name="src.classes.dir" location="${src.dir}/share/classes"/>
73104477Ssam    <property name="test.dir" location="test"/>
74104477Ssam
75119280Simp    <!-- java.marker is set to a marker file to check for within a Java install dir.
76119280Simp         The best file to check for across Solaris/Linux/Windows/MacOS is one of the
77112124Ssam         executables; regrettably, that is OS-specific. -->
78112124Ssam    <condition property="java.marker" value="bin/java">
79112124Ssam        <os family="unix"/>
80112124Ssam    </condition>
81104477Ssam    <condition property="java.marker" value="bin/java.exe">
82104477Ssam        <os family="windows"/>
83104477Ssam    </condition>
84104477Ssam
85104477Ssam    <!-- Standard property values, if not overriden by earlier settings. -->
86104477Ssam    <property file="${make.dir}/build.properties"/>
87104477Ssam
88104477Ssam    <!-- launcher.java is used in the launcher scripts provided to run
89104477Ssam        the tools' jar files.  If it has not already been set, then
90104477Ssam        default it to use ${target.java.home}, if available, otherwise
91104477Ssam        quietly default to simply use "java". -->
92104477Ssam    <condition property="launcher.java"
93104477Ssam        value="${target.java.home}/bin/java" else="java">
94104477Ssam        <isset property="target.java.home"/>
95104477Ssam    </condition>
96104477Ssam
97104477Ssam    <!-- Logic for handling access import jdk classes, if available.
98104477Ssam        import.jdk should be unset, or set to jdk home (to use rt.jar)
99104477Ssam        or to jdk repo (to use src/share/classes).
100104477Ssam        Based on the value, if any, set up default values for javac's sourcepath,
101104477Ssam        classpath and bootclasspath. Note: the default values are overridden
102104477Ssam        in the build-bootstrap-classes macro. -->
103104477Ssam
104104477Ssam    <available property="import.jdk.src.dir" value="${import.jdk}/src/share/classes"
105104477Ssam        filepath="${import.jdk}/src/share/classes" file="java/nio/file/Path.java"/>
106104477Ssam    <available property="import.jdk.jar" value="${import.jdk}/jre/lib/rt.jar"
107104477Ssam        ignoresystemclasses="true"
108104477Ssam        classpath="${import.jdk}/jre/lib/rt.jar" classname="java.nio.file.Path"/>
109104477Ssam
110104477Ssam    <!-- Set the default value of the sourcepath used for javac. -->
111104477Ssam    <condition property="javac.sourcepath" value="${build.genstubs.dir}" else="">
112104477Ssam        <isset property="import.jdk.src.dir"/>
113104477Ssam    </condition>
114104477Ssam
115104477Ssam    <!-- Set the default value of the classpath used for javac. -->
116104477Ssam    <property name="javac.classpath" value=""/>
117105251Smarkm
118112124Ssam    <!-- Set the default bootclasspath option used for javac. 
119112124Ssam	Note that different variants of the option are used, meaning we can't just 
120112124Ssam	define the value for the option.
121104477Ssam	Note the explicit use of the standard property ${path.separator} in the following.
122104477Ssam	This is because Ant is not clever enough to handle direct use of : or ; -->
123104477Ssam    <condition property="javac.bootclasspath.opt"
124104477Ssam            value="-Xbootclasspath:${build.classes.dir}${path.separator}${import.jdk.jar}"
125104477Ssam            else="-Xbootclasspath/p:${build.classes.dir}">
126104477Ssam        <isset property="import.jdk.jar"/>
127104477Ssam    </condition>
128104477Ssam
129104477Ssam    <condition property="exclude.files" value="" else="${require.import.jdk.files}">
130104477Ssam        <isset property="import.jdk"/>
131104477Ssam    </condition>
132104477Ssam
133104477Ssam    <!-- for debugging -->
134104477Ssam    <target name="check-import.jdk">
135104477Ssam        <echo message="import.jdk: ${import.jdk}"/>
136104477Ssam        <echo message="import.jdk.jar: ${import.jdk.jar}"/>
137104477Ssam        <echo message="import.jdk.src.dir: ${import.jdk.src.dir}"/>
138104477Ssam    </target>
139104477Ssam
140104477Ssam    <!-- Standard target to build deliverables for JDK build. -->
141104477Ssam
142104477Ssam    <target name="build" depends="build-bootstrap-tools,build-all-classes">
143104477Ssam        <copy todir="${dist.dir}/bootstrap">
144104477Ssam            <fileset dir="${build.bootstrap.dir}" includes="bin/,lib/"/>
145104477Ssam        </copy>
146104477Ssam        <chmod dir="${dist.dir}/bootstrap/bin" perm="ugo+rx">
147104477Ssam            <include name="*"/>
148104477Ssam        </chmod>
149104477Ssam        <mkdir dir="${dist.lib.dir}"/>
150104477Ssam        <jar file="${dist.lib.dir}/classes.jar" basedir="${build.classes.dir}"/>
151104477Ssam        <zip file="${dist.lib.dir}/src.zip" basedir="${src.classes.dir}"/>
152104477Ssam    </target>
153104477Ssam
154131575Sstefanf    <target name="build-bootstrap-tools"
155104477Ssam        depends="build-bootstrap-javac,build-bootstrap-javadoc,build-bootstrap-doclets,build-bootstrap-javah"
156104477Ssam    />
157104477Ssam
158104477Ssam    <target name="build-all-tools"
159104477Ssam        depends="build-javac,build-javadoc,build-doclets,build-javah,build-javap,build-apt"
160104477Ssam    />
161104477Ssam
162104477Ssam    <target name="build-all-classes" depends="build-bootstrap-javac,-create-import-jdk-stubs">
163131575Sstefanf        <build-classes includes="${javac.includes} ${javadoc.includes} ${doclets.includes} ${javah.includes} ${javap.includes} ${apt.includes}"/>
164104477Ssam    </target>
165104477Ssam
166104477Ssam    <!-- clean -->
167104477Ssam
168104477Ssam    <target name="clean" description="Delete all generated files">
169104477Ssam        <delete dir="${build.dir}"/>
170104477Ssam        <delete dir="${dist.dir}"/>
171104477Ssam    </target>
172109596Ssam
173109596Ssam    <!-- Additional targets for running tools on the build -->
174104477Ssam
175104477Ssam    <target name="jtreg" depends="build-all-tools,-def-jtreg">
176109596Ssam        <jtreg-tool name="all" tests="${jtreg.tests}"/>
177109596Ssam    </target>
178104477Ssam
179104477Ssam    <target name="findbugs" depends="-def-findbugs,build-all-tools">
180104477Ssam        <property name="findbugs.reportLevel" value="medium"/>
181109596Ssam        <mkdir dir="${dist.findbugs.dir}"/>
182109596Ssam        <findbugs
183112121Ssam            home="${findbugs.home}"
184109596Ssam            projectName="JDK langtools ${full.version}"
185109596Ssam            output="xml"
186104477Ssam            outputFile="${dist.findbugs.dir}/findbugs.xml"
187104477Ssam            reportLevel="${findbugs.reportLevel}"
188104477Ssam            failOnError="false"
189104477Ssam            errorProperty="findbugs.all.errors"
190104477Ssam            warningsProperty="findbugs.all.warnings"
191104477Ssam            jvmargs="-Xmx512M">
192104477Ssam            <class location="${build.classes.dir}"/>
193104477Ssam            <sourcePath>
194104477Ssam                <pathelement location="${src.classes.dir}"/>
195104477Ssam            </sourcePath>
196143161Simp        </findbugs>
197104477Ssam        <exec executable="sh">
198104477Ssam            <arg value="${findbugs.home}/bin/convertXmlToText"/>
199104477Ssam            <arg value="-longBugCodes"/>
200120915Ssam            <arg value="-html:${findbugs.home}/src/xsl/fancy.xsl"/>
201120915Ssam            <arg value="${dist.findbugs.dir}/findbugs.xml"/>
202104477Ssam            <redirector output="${dist.findbugs.dir}/findbugs.html"/>
203143161Simp        </exec>
204104477Ssam    </target>
205104477Ssam
206143161Simp    <target name="coverage" depends="-def-cobertura,build-all-classes,instrument-classes,jtreg,coverage-report"/>
207104477Ssam
208104477Ssam    <target name="instrument-classes" depends="-def-cobertura">
209104477Ssam        <!-- only define the following property when we want coverage info -->
210104477Ssam        <path id="coverage.classpath">
211104477Ssam            <pathelement location="${build.coverage.dir}/classes"/>
212104477Ssam            <path refid="cobertura.classpath"/>
213104477Ssam        </path>
214104477Ssam        <property name="coverage.options" value="-Dnet.sourceforge.cobertura.datafile=${build.coverage.dir}/cobertura.ser"/>
215104477Ssam        <property name="coverage.classpath" refid="coverage.classpath"/>
216104477Ssam        <mkdir dir="${build.coverage.dir}/classes"/>
217104477Ssam        <delete file="${build.coverage.dir}/cobertura.ser"/>
218104477Ssam        <cobertura-instrument todir="${build.coverage.dir}/classes"
219104477Ssam            datafile="${build.coverage.dir}/cobertura.ser">
220104477Ssam            <fileset dir="${build.classes.dir}"
221104477Ssam               includes="**/*.class" excludes="**/resources/*.class"/>
222104477Ssam        </cobertura-instrument>
223104477Ssam    </target>
224104477Ssam
225104477Ssam    <target name="coverage-report" depends="-def-cobertura">
226104477Ssam        <mkdir dir="${dist.coverage.dir}"/>
227104477Ssam        <cobertura-report
228120915Ssam            srcdir="${src.classes.dir}"
229120915Ssam            destdir="${dist.coverage.dir}"
230104477Ssam            datafile="${build.coverage.dir}/cobertura.ser"/>
231104477Ssam        <cobertura-report
232104477Ssam            format="xml"
233104477Ssam            srcdir="${src.classes.dir}"
234104477Ssam            destdir="${dist.coverage.dir}"
235104477Ssam            datafile="${build.coverage.dir}/cobertura.ser"/>
236104477Ssam    </target>
237104477Ssam
238104477Ssam    <!-- javac targets -->
239104477Ssam
240104477Ssam    <target name="build-bootstrap-javac"
241104477Ssam            depends="-def-build-bootstrap-classes,-def-build-bootstrap-jar,-def-build-bootstrap-tool">
242104477Ssam        <build-bootstrap-classes includes="${javac.includes}"/>
243104477Ssam        <build-bootstrap-jar     name="javac" includes="${javac.includes}"/>
244104477Ssam        <build-bootstrap-tool    name="javac"/>
245104477Ssam    </target>
246112124Ssam
247112124Ssam    <target name="build-classes-javac" depends="build-bootstrap-javac,-create-import-jdk-stubs">
248112124Ssam        <build-classes includes="${javac.includes}"/>
249112124Ssam    </target>
250112124Ssam
251112124Ssam    <target name="build-javac" depends="build-classes-javac">
252140480Ssam        <build-jar  name="javac" includes="${javac.includes}"/>
253140480Ssam        <build-tool name="javac"/>
254140480Ssam    </target>
255140480Ssam
256140480Ssam    <target name="javadoc-javac" depends="build-javac,-def-javadoc-tool">
257140480Ssam        <javadoc-tool name="javac" includes="${javac.includes}" options="${javadoc.jls3.option}"/>
258140480Ssam    </target>
259140480Ssam
260140480Ssam    <target name="jtreg-javac" depends="build-javac,build-javap,-def-jtreg">
261140480Ssam        <jtreg-tool name="javac" tests="${javac.tests}"/>
262140480Ssam    </target>
263140480Ssam
264140480Ssam    <target name="findbugs-javac" depends="build-javac,-def-findbugs">
265140480Ssam        <findbugs-tool name="javac"/>
266140480Ssam    </target>
267104477Ssam
268140480Ssam    <target name="javac" depends="build-javac,jtreg-javac,findbugs-javac"/>
269140480Ssam
270140480Ssam    <!-- javadoc targets -->
271140480Ssam
272140480Ssam    <target name="build-bootstrap-javadoc" depends="build-bootstrap-javac">
273140480Ssam        <build-bootstrap-classes includes="${javadoc.includes}"/>
274140480Ssam        <build-bootstrap-jar     name="javadoc" includes="${javadoc.includes}"
275140480Ssam                                 jarclasspath="javac.jar doclets.jar"/>
276140480Ssam        <build-bootstrap-tool    name="javadoc"/>
277140480Ssam    </target>
278140480Ssam
279140480Ssam    <target name="build-classes-javadoc" depends="build-classes-javac">
280140480Ssam        <build-classes includes="${javadoc.includes}"/>
281140480Ssam    </target>
282140480Ssam
283140480Ssam    <target name="build-javadoc" depends="build-javac,build-classes-javadoc">
284140480Ssam        <build-jar  name="javadoc" includes="${javadoc.includes}"
285140480Ssam                    jarclasspath="javac.jar doclets.jar"/>
286140480Ssam        <build-tool name="javadoc"/>
287140480Ssam    </target>
288140480Ssam
289140480Ssam    <target name="javadoc-javadoc" depends="build-javadoc,-def-javadoc-tool">
290140480Ssam        <javadoc-tool name="javadoc" includes="${javadoc.includes}"/>
291140480Ssam    </target>
292140480Ssam
293140480Ssam    <target name="jtreg-javadoc" depends="build-javadoc,-def-jtreg">
294140480Ssam        <jtreg-tool name="javadoc" tests="${javadoc.tests}"/>
295140480Ssam    </target>
296140480Ssam
297140480Ssam    <target name="findbugs-javadoc" depends="build-javadoc,-def-findbugs">
298140480Ssam        <findbugs-tool name="javadoc"/>
299140480Ssam    </target>
300140480Ssam
301140480Ssam    <target name="javadoc" depends="build-javadoc,jtreg-javadoc,findbugs-javadoc"/>
302140480Ssam
303140480Ssam    <!-- doclets targets -->
304140480Ssam
305140480Ssam    <target name="build-bootstrap-doclets" depends="build-bootstrap-javadoc,-def-build-bootstrap-jar">
306140480Ssam        <build-bootstrap-classes includes="${doclets.includes}"/>
307140480Ssam        <build-bootstrap-jar     name="doclets" includes="${doclets.includes}"
308140480Ssam                                 jarmainclass="com.sun.tools.javadoc.Main"
309140480Ssam                                 jarclasspath="javadoc.jar"/>
310140480Ssam    </target>
311140480Ssam
312140480Ssam    <target name="build-classes-doclets" depends="build-classes-javadoc">
313140480Ssam        <build-classes includes="${doclets.includes}"/>
314140480Ssam    </target>
315140480Ssam
316140480Ssam    <target name="build-doclets" depends="build-javadoc,build-classes-doclets">
317140480Ssam        <!-- just jar, no bin for doclets -->
318140480Ssam        <build-jar name="doclets" includes="${doclets.includes}" jarclasspath="javadoc.jar"/>
319140480Ssam    </target>
320140480Ssam
321140480Ssam    <!-- (no javadoc for doclets) -->
322140480Ssam
323140480Ssam    <target name="jtreg-doclets" depends="build-doclets,-def-jtreg">
324140480Ssam        <jtreg-tool name="doclets" tests="${doclets.tests}"/>
325140480Ssam    </target>
326140480Ssam
327140480Ssam    <target name="findbugs-doclets" depends="build-doclets,-def-findbugs">
328140480Ssam        <findbugs-tool name="doclets"/>
329140480Ssam    </target>
330140480Ssam
331104477Ssam    <target name="doclets" depends="build-doclets,jtreg-doclets,findbugs-doclets"/>
332104477Ssam
333104477Ssam    <!-- javah targets -->
334104477Ssam
335104477Ssam    <target name="build-bootstrap-javah" depends="build-bootstrap-javadoc">
336104477Ssam        <build-bootstrap-classes includes="${javah.includes}"/>
337104477Ssam        <build-bootstrap-jar     name="javah" includes="${javah.includes}"
338104477Ssam                                 jarclasspath="javadoc.jar doclets.jar javac.jar"/>
339104477Ssam        <build-bootstrap-tool    name="javah"/>
340104477Ssam    </target>
341104477Ssam
342104477Ssam    <target name="build-javah" depends="build-javac,build-classes-javah">
343104477Ssam        <build-jar  name="javah" includes="${javah.includes}" jarclasspath="javac.jar"/>
344104477Ssam        <build-tool name="javah"/>
345104477Ssam    </target>
346104477Ssam
347115748Ssam    <target name="build-classes-javah" depends="build-classes-javadoc">
348104477Ssam        <build-classes includes="${javah.includes}"/>
349104477Ssam    </target>
350104477Ssam
351104477Ssam    <!-- (no javadoc for javah) -->
352120915Ssam
353104477Ssam    <target name="jtreg-javah" depends="build-javah,-def-jtreg">
354104477Ssam        <jtreg-tool name="javah" tests="${javah.tests}"/>
355104477Ssam    </target>
356120915Ssam
357120915Ssam    <target name="findbugs-javah" depends="build-javah,-def-findbugs">
358120915Ssam        <findbugs-tool name="javah"/>
359104477Ssam    </target>
360104477Ssam
361104477Ssam    <target name="javah" depends="build-javah,jtreg-javah,findbugs-javah"/>
362104477Ssam
363104477Ssam    <!-- javap targets -->
364104477Ssam
365104477Ssam    <target name="build-bootstrap-javap"
366104477Ssam            depends="-def-build-bootstrap-classes,-def-build-bootstrap-jar,-def-build-bootstrap-tool">
367104477Ssam        <build-bootstrap-classes includes="${javap.includes}"/>
368104477Ssam        <build-bootstrap-jar     name="javap" includes="${javap.includes}"
369120915Ssam                                 jarmainclass="sun.tools.javap.Main"/>
370120915Ssam        <build-bootstrap-tool    name="javap"/>
371120915Ssam    </target>
372120915Ssam
373140480Ssam    <target name="build-classes-javap" depends="build-classes-javac">
374120915Ssam        <build-classes includes="${javap.includes}"/>
375140480Ssam    </target>
376140480Ssam
377140480Ssam    <target name="build-javap" depends="build-javac,build-classes-javap">
378140480Ssam        <build-jar  name="javap" includes="${javap.includes}"
379140480Ssam                    jarmainclass="com.sun.tools.javap.Main"
380140480Ssam                    jarclasspath="javac.jar"/>
381140480Ssam        <build-tool name="javap"/>
382120915Ssam    </target>
383120915Ssam
384104477Ssam    <!-- (no javadoc for javap) -->
385104477Ssam
386104477Ssam    <target name="jtreg-javap" depends="build-javap,-def-jtreg">
387104477Ssam        <jtreg-tool name="javap" tests="${javap.tests}"/>
388104477Ssam    </target>
389104477Ssam
390104477Ssam    <target name="findbugs-javap" depends="build-javap,-def-findbugs">
391104477Ssam        <findbugs-tool name="javap"/>
392104477Ssam    </target>
393104477Ssam
394104477Ssam    <target name="javap" depends="build-javap,jtreg-javap,findbugs-javap"/>
395104477Ssam
396104477Ssam    <!-- apt targets -->
397104477Ssam
398104477Ssam    <target name="build-bootstrap-apt" depends="build-bootstrap-javac">
399104477Ssam        <build-bootstrap-classes includes="${apt.includes}"/>
400104477Ssam        <build-bootstrap-jar     name="apt" includes="${apt.includes}"
401104477Ssam                                 jarclasspath="javac.jar"/>
402104477Ssam        <build-bootstrap-tool    name="apt"/>
403104477Ssam    </target>
404104477Ssam
405104477Ssam    <target name="build-apt" depends="build-javac,build-classes-apt">
406104477Ssam        <build-jar  name="apt" includes="${apt.includes}" jarclasspath="javac.jar"/>
407104477Ssam        <build-tool name="apt"/>
408104477Ssam    </target>
409127135Snjl
410127135Snjl    <target name="build-classes-apt" depends="build-classes-javac">
411104477Ssam        <build-classes includes="${apt.includes}"/>
412104477Ssam    </target>
413104477Ssam
414104477Ssam    <target name="javadoc-apt" depends="build-apt,-def-javadoc-tool">
415104477Ssam        <javadoc-tool name="apt" includes="${apt.includes}"/>
416104477Ssam    </target>
417104477Ssam
418104477Ssam
419104477Ssam    <target name="jtreg-apt" depends="build-apt,-def-jtreg">
420127135Snjl        <jtreg-tool name="apt" tests="${apt.tests}"/>
421127135Snjl    </target>
422104477Ssam
423104477Ssam    <target name="findbugs-apt" depends="build-apt,-def-findbugs">
424104477Ssam        <findbugs-tool name="apt"/>
425104477Ssam    </target>
426104477Ssam
427104477Ssam    <target name="apt" depends="build-apt,jtreg-apt,findbugs-apt"/>
428104477Ssam
429104477Ssam    <!-- Create import JDK stubs -->
430104477Ssam
431104477Ssam    <target name="-create-import-jdk-stubs" depends="-def-genstubs" if="import.jdk.src.dir">
432104477Ssam        <mkdir dir="${build.genstubs.dir}"/>
433104477Ssam        <genstubs
434104477Ssam            srcdir="${import.jdk.src.dir}" destdir="${build.genstubs.dir}"
435104477Ssam            includes="${import.jdk.stub.files}"
436104477Ssam            fork="true" classpath="${build.toolclasses.dir}:${build.bootstrap.dir}/classes:${ant.home}/lib/ant.jar"
437104477Ssam        />
438104477Ssam    </target>
439104477Ssam
440104477Ssam    <!-- Check targets -->
441104477Ssam
442104477Ssam    <target name="-check-boot.java.home" depends="-def-check">
443104477Ssam        <check name="bootstrap java" property="boot.java.home" marker="${java.marker}"/>
444104477Ssam    </target>
445117126Sscottl
446117126Sscottl    <target name="-check-target.java.home" depends="-def-check">
447104477Ssam        <check name="target java" property="target.java.home" marker="${java.marker}"/>
448104477Ssam    </target>
449104477Ssam
450104477Ssam    <target name="-check-cobertura.home" depends="-def-check">
451104477Ssam        <check name="cobertura" property="cobertura.home" marker="cobertura.jar"/>
452104477Ssam    </target>
453104477Ssam
454104477Ssam    <target name="-check-findbugs.home" depends="-def-check">
455104477Ssam        <check name="findbugs" property="findbugs.home" marker="lib/findbugs.jar"/>
456104477Ssam    </target>
457104477Ssam
458104477Ssam    <target name="-check-jtreg.home" depends="-def-check">
459104477Ssam        <check name="jtreg" property="jtreg.home" marker="lib/jtreg.jar"/>
460104477Ssam    </target>
461104477Ssam
462104477Ssam    <!-- Ant macro and preset defs -->
463104477Ssam
464104477Ssam    <target name="-def-build-tool">
465104477Ssam        <macrodef name="build-tool">
466104477Ssam            <attribute name="name"/>
467104477Ssam            <attribute name="bin.dir" default="${dist.bin.dir}"/>
468104477Ssam            <attribute name="java" default="${launcher.java}"/>
469104477Ssam            <sequential>
470104477Ssam                <mkdir dir="@{bin.dir}"/>
471104477Ssam                <copy file="${src.bin.dir}/launcher.sh-template" tofile="@{bin.dir}/@{name}">
472104477Ssam                    <filterset begintoken="#" endtoken="#">
473104477Ssam                        <filter token="PROGRAM" value="@{name}"/>
474104477Ssam                        <filter token="TARGET_JAVA" value="@{java}"/>
475123824Ssam                    </filterset>
476123824Ssam                </copy>
477123824Ssam                <chmod file="@{bin.dir}/@{name}" perm="ugo+rx"/>
478123824Ssam            </sequential>
479104477Ssam        </macrodef>
480104477Ssam    </target>
481104477Ssam
482104477Ssam    <target name="-def-build-jar">
483104477Ssam        <macrodef name="build-jar">
484104477Ssam            <attribute name="name"/>
485104477Ssam            <attribute name="includes"/>
486104477Ssam            <attribute name="classes.dir" default="${build.classes.dir}"/>
487104477Ssam            <attribute name="lib.dir" default="${dist.lib.dir}"/>
488104477Ssam            <attribute name="jarmainclass" default="com.sun.tools.@{name}.Main"/>
489104477Ssam            <attribute name="jarclasspath" default=""/>
490104477Ssam            <sequential>
491104477Ssam                <mkdir dir="@{lib.dir}"/>
492104477Ssam                <jar destfile="@{lib.dir}/@{name}.jar"
493104477Ssam                     basedir="@{classes.dir}"
494104477Ssam                     includes="@{includes}">
495104477Ssam                    <manifest>
496104477Ssam                        <attribute name="Main-Class" value="@{jarmainclass}"/>
497104477Ssam                        <attribute name="Class-Path" value="@{jarclasspath}"/>
498104477Ssam                    </manifest>
499120915Ssam                </jar>
500120915Ssam            </sequential>
501120915Ssam        </macrodef>
502120915Ssam    </target>
503104477Ssam
504104477Ssam    <target name="-def-build-classes" depends="-def-pcompile">
505104477Ssam        <macrodef name="build-classes">
506104477Ssam            <attribute name="includes"/>
507104477Ssam            <attribute name="excludes" default="${exclude.files} **/package-info.java"/>
508104477Ssam            <attribute name="classes.dir" default="${build.classes.dir}"/>
509104477Ssam            <attribute name="gensrc.dir" default="${build.gensrc.dir}"/>
510104477Ssam            <attribute name="javac.bootclasspath" default="${build.bootstrap.dir}/classes"/>
511104477Ssam            <attribute name="bootclasspath.opt" default="${javac.bootclasspath.opt}"/>
512104477Ssam            <attribute name="classpath" default="${javac.classpath}"/>
513104477Ssam            <attribute name="sourcepath" default="${javac.sourcepath}"/>
514104477Ssam            <attribute name="java.home" default="${boot.java.home}"/>
515104477Ssam            <attribute name="source" default="${javac.source}"/>
516104477Ssam            <attribute name="target" default="${javac.target}"/>
517104477Ssam            <attribute name="release" default="${release}"/>
518104477Ssam            <attribute name="full.version" default="${full.version}"/>
519104477Ssam            <sequential>
520104477Ssam                <echo level="verbose" message="build-classes: excludes=@{excludes}"/>
521104477Ssam                <echo level="verbose" message="build-classes: bootclasspath.opt=@{bootclasspath.opt}"/>
522104477Ssam                <echo level="verbose" message="build-classes: classpath=@{classpath}"/>
523127135Snjl                <echo level="verbose" message="build-classes: sourcepath=@{sourcepath}"/>
524127135Snjl                <mkdir dir="@{gensrc.dir}"/>
525104477Ssam                <mkdir dir="@{classes.dir}"/>
526104477Ssam                <pcompile srcdir="${src.classes.dir}"
527104477Ssam                          destdir="@{gensrc.dir}"
528104477Ssam                          includes="@{includes}"/>
529104477Ssam                <copy todir="@{gensrc.dir}">
530104477Ssam                    <fileset dir="${src.classes.dir}" includes="@{includes}"/>
531104477Ssam                    <globmapper from="*.properties-template" to="*.properties"/>
532104477Ssam                    <filterset begintoken="$(" endtoken=")">
533115748Ssam                        <filter token="JDK_VERSION" value="${jdk.version}"/>
534104477Ssam                        <filter token="RELEASE" value="@{release}"/>
535104477Ssam                        <filter token="FULL_VERSION" value="@{full.version}"/>
536104477Ssam                    </filterset>
537104477Ssam                </copy>
538104477Ssam                <pcompile srcdir="@{gensrc.dir}"
539104477Ssam                          destdir="@{gensrc.dir}"
540104477Ssam                          includes="**/*.properties"/>
541104477Ssam                <javac fork="true"
542104477Ssam                       executable="@{java.home}/bin/javac"
543104477Ssam                       srcdir="${src.classes.dir}:@{gensrc.dir}"
544104477Ssam                       destdir="@{classes.dir}"
545104477Ssam                       includes="@{includes}"
546104477Ssam                       excludes="@{excludes}"
547104477Ssam                       sourcepath="@{sourcepath}"
548104477Ssam                       classpath="@{classpath}"
549104477Ssam                       includeAntRuntime="no"
550104477Ssam                       source="@{source}"
551104477Ssam                       target="@{target}"
552104477Ssam                       debug="${javac.debug}"
553140480Ssam                       debuglevel="${javac.debuglevel}">
554104477Ssam                    <compilerarg value="-implicit:none"/>
555136526Ssam                    <compilerarg value="-Xprefer:source"/>
556140480Ssam                    <compilerarg value="-J-Xbootclasspath/p:@{javac.bootclasspath}"/>
557140480Ssam                    <compilerarg line="@{bootclasspath.opt}"/>
558140480Ssam                    <compilerarg line="${javac.no.jdk.warnings}"/>
559140480Ssam                    <compilerarg line="${javac.version.opt}"/>
560140480Ssam                    <compilerarg line="${javac.lint.opts}"/>
561140480Ssam                </javac>
562104477Ssam                <copy todir="@{classes.dir}" includeemptydirs="false">
563104477Ssam                    <fileset dir="${src.classes.dir}" includes="@{includes}" excludes="@{excludes}">
564104477Ssam                        <exclude name="**/*.java"/>
565104477Ssam                        <exclude name="**/*.properties"/>
566104477Ssam                        <exclude name="**/*-template"/>
567104477Ssam                        <exclude name="**/package.html"/>
568104477Ssam                    </fileset>
569104477Ssam                </copy>
570104477Ssam            </sequential>
571104477Ssam        </macrodef>
572104477Ssam    </target>
573104477Ssam
574104477Ssam    <target name="-def-build-bootstrap-tool" depends="-check-boot.java.home,-def-build-tool">
575104477Ssam        <presetdef name="build-bootstrap-tool">
576104477Ssam            <build-tool
577104477Ssam                bin.dir="${build.bootstrap.dir}/bin"
578104477Ssam                java="${boot.java}"/>
579120915Ssam        </presetdef>
580120915Ssam    </target>
581120915Ssam
582120915Ssam    <target name="-def-build-bootstrap-jar" depends="-def-build-jar">
583104477Ssam        <presetdef name="build-bootstrap-jar">
584104477Ssam            <build-jar
585104477Ssam                classes.dir="${build.bootstrap.dir}/classes"
586104477Ssam                lib.dir="${build.bootstrap.dir}/lib"/>
587104477Ssam        </presetdef>
588104477Ssam    </target>
589104477Ssam
590104477Ssam    <target name="-def-build-bootstrap-classes" depends="-def-build-classes">
591104477Ssam        <presetdef name="build-bootstrap-classes">
592104477Ssam            <build-classes
593104477Ssam                source="${boot.javac.source}"
594104477Ssam                target="${boot.javac.target}"
595104477Ssam                gensrc.dir="${build.bootstrap.dir}/gensrc"
596104477Ssam                classes.dir="${build.bootstrap.dir}/classes"
597104477Ssam                javac.bootclasspath=""
598104477Ssam                bootclasspath.opt="-Xbootclasspath/p:${build.bootstrap.dir}/classes"
599104477Ssam                sourcepath=""
600104477Ssam                release="${bootstrap.release}"
601104477Ssam                full.version="${bootstrap.full.version}"
602104477Ssam                excludes="${require.import.jdk.files} **/package-info.java"/>
603104477Ssam        </presetdef>
604119137Ssam    </target>
605104477Ssam
606104477Ssam    <target name="-def-pcompile">
607104477Ssam        <mkdir dir="${build.toolclasses.dir}"/>
608104477Ssam        <javac fork="true"
609104477Ssam               source="${boot.javac.source}"
610104477Ssam               target="${boot.javac.target}"
611104477Ssam               executable="${boot.java.home}/bin/javac"
612104477Ssam               srcdir="${make.tools.dir}/CompileProperties"
613104477Ssam               destdir="${build.toolclasses.dir}/"
614104477Ssam               classpath="${ant.home}/lib/ant.jar"/>
615104477Ssam        <taskdef name="pcompile"
616104477Ssam                 classname="CompilePropertiesTask"
617104477Ssam                 classpath="${build.toolclasses.dir}/"/>
618104477Ssam    </target>
619104477Ssam
620104477Ssam    <target name="-def-genstubs" depends="build-bootstrap-javac">
621104477Ssam        <mkdir dir="${build.toolclasses.dir}"/>
622104477Ssam        <javac fork="true"
623104477Ssam               source="${boot.javac.source}"
624104477Ssam               target="${boot.javac.target}"
625104477Ssam               executable="${boot.java.home}/bin/javac"
626104477Ssam               srcdir="${make.tools.dir}/GenStubs"
627104477Ssam               destdir="${build.toolclasses.dir}/"
628104477Ssam               classpath="${build.bootstrap.dir}/classes:${ant.home}/lib/ant.jar"/>
629104477Ssam        <taskdef name="genstubs"
630104477Ssam                 classname="GenStubs$$Ant"
631104477Ssam                 classpath="${build.toolclasses.dir}/"/>
632104477Ssam    </target>
633104477Ssam
634104477Ssam    <target name="-def-javadoc-tool" depends="-check-target.java.home">
635104477Ssam        <macrodef name="javadoc-tool">
636104477Ssam            <attribute name="name"/>
637104477Ssam            <attribute name="includes"/>
638104477Ssam            <attribute name="options" default=""/>
639104477Ssam            <attribute name="source" default="1.5"/> <!-- FIXME -->
640104477Ssam            <sequential>
641104477Ssam                <property name="javadoc.options" value=""/> <!-- default, can be overridden per user or per project -->
642115748Ssam                <!-- Note: even with this default value, includes
643115748Ssam         from src.classes.dir get javadoc'd; see packageset below -->
644104477Ssam                <property name="javadoc.packagenames" value="none"/> <!-- default, can be overridden per user or per project -->
645104477Ssam                <javadoc
646104477Ssam                    executable="${target.java.home}/bin/javadoc"
647104477Ssam                    destdir="${build.javadoc.dir}/@{name}"
648115848Ssam                    source="@{source}"
649115848Ssam                    windowtitle="UNOFFICIAL"
650115862Ssam                    failonerror="true"
651115848Ssam                    use="true"
652104477Ssam                    author="false"
653104477Ssam                    version="false"
654104477Ssam                    packagenames="${javadoc.packagenames}" >
655104477Ssam                    <header><![CDATA[<strong>Unofficial Javadoc</strong> generated from developer sources for preview purposes only]]></header>
656104477Ssam                    <arg line="@{options}"/>
657104477Ssam                    <bootclasspath>
658104477Ssam                        <path location="${build.classes.dir}"/>
659104477Ssam                        <path location="${target.java.home}/jre/lib/rt.jar"/>
660104477Ssam                    </bootclasspath>
661104477Ssam                    <sourcepath>
662104477Ssam                        <pathelement location="${src.classes.dir}"/>
663104477Ssam                    </sourcepath>
664104477Ssam                    <!-- XXX just <fileset> (restricted further to **/*.java) and no <packageset> -->
665104477Ssam                    <!-- means that {@link some.package} will not work, which is no good. -->
666104477Ssam                    <!-- (It correctly skips excluded single classes, but not if packageset is also included, -->
667104477Ssam                    <!-- which also causes duplicates in the class index for included files.) -->
668104477Ssam                    <packageset dir="${src.classes.dir}" includes="@{includes}">
669104477Ssam                        <or>
670104477Ssam                            <filename name="java/"/>
671104477Ssam                            <filename name="javax/"/>
672104477Ssam                            <filename name="com/sun/javadoc/"/>
673104477Ssam                            <filename name="com/sun/mirror/"/>
674104477Ssam                            <filename name="com/sun/source/"/>
675104477Ssam                        </or>
676104477Ssam                    </packageset>
677104477Ssam                </javadoc>
678104477Ssam            </sequential>
679104477Ssam        </macrodef>
680104477Ssam    </target>
681104477Ssam
682104477Ssam    <target name="-def-jtreg" unless="jtreg.defined" depends="-check-jtreg.home,-check-target.java.home">
683104477Ssam        <taskdef name="jtreg" classname="com.sun.javatest.regtest.Main$$Ant">
684104477Ssam            <classpath>
685104477Ssam                <pathelement location="${jtreg.home}/lib/jtreg.jar"/>
686104477Ssam                <pathelement location="${jtreg.home}/lib/javatest.jar"/>
687104477Ssam            </classpath>
688104477Ssam        </taskdef>
689104477Ssam        <macrodef name="jtreg-tool">
690104477Ssam            <attribute name="name"/>
691104477Ssam            <attribute name="tests"/>
692104477Ssam            <attribute name="jdk" default="${target.java.home}"/>
693104477Ssam            <attribute name="samevm" default="true"/>
694104477Ssam            <attribute name="verbose" default="summary"/>
695104477Ssam            <attribute name="options" default=""/>
696104477Ssam            <attribute name="keywords" default="-keywords:!ignore"/>
697104477Ssam            <attribute name="jpda.jvmargs" default=""/>
698104477Ssam            <sequential>
699104477Ssam                <property name="coverage.options" value=""/>    <!-- default -->
700104477Ssam                <property name="coverage.classpath" value=""/>    <!-- default -->
701104477Ssam                <jtreg
702104477Ssam                    dir="${test.dir}"
703104477Ssam                    workDir="${build.jtreg.dir}/@{name}/work"
704119690Sjhb                    reportDir="${build.jtreg.dir}/@{name}/report"
705104477Ssam                    jdk="@{jdk}"
706104477Ssam                    samevm="@{samevm}" verbose="@{verbose}"
707104477Ssam                    failonerror="false" resultproperty="jtreg.@{name}.result"
708104477Ssam                    javacoptions="-g"
709104477Ssam                    vmoptions="${coverage.options} -Xbootclasspath/p:${coverage.classpath}:${build.classes.dir} @{jpda.jvmargs}">
710104477Ssam                    <arg line="@{keywords}"/>
711104477Ssam                    <arg line="@{options}"/>
712104477Ssam                    <arg line="@{tests}"/>
713104477Ssam                </jtreg>
714104477Ssam                <!-- the next two properties are for convenience, when only
715104477Ssam                     a single instance of jtreg will be invoked. -->
716104477Ssam                <condition property="jtreg.passed">
717104477Ssam                    <equals arg1="${jtreg.@{name}.result}" arg2="0"/>
718104477Ssam                </condition>
719104477Ssam                <property name="jtreg.report" value="${build.jtreg.dir}/@{name}/report"/>
720104477Ssam            </sequential>
721104477Ssam        </macrodef>
722104477Ssam        <property name="jtreg.defined" value="true"/>
723104477Ssam    </target>
724104477Ssam
725104477Ssam    <target name="-def-cobertura" depends="-check-cobertura.home">
726104477Ssam        <path id="cobertura.classpath">
727104477Ssam            <fileset dir="${cobertura.home}">
728104477Ssam                <include name="cobertura.jar"/>
729119690Sjhb                <include name="lib/**/*.jar"/>
730104477Ssam            </fileset>
731104477Ssam        </path>
732104477Ssam        <taskdef classpathref="cobertura.classpath" resource="tasks.properties"/>
733104477Ssam    </target>
734104477Ssam
735104477Ssam    <target name="-def-findbugs" unless="findbugs.defined" depends="-check-findbugs.home">
736104477Ssam        <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask">
737104477Ssam            <classpath>
738104477Ssam                <pathelement location="${findbugs.home}/lib/findbugs.jar"/>
739104477Ssam            </classpath>
740104477Ssam        </taskdef>
741104477Ssam        <macrodef name="findbugs-tool">
742104477Ssam            <attribute name="name"/>
743104477Ssam            <attribute name="output" default="emacs"/>
744104477Ssam            <attribute name="outputFile" default=""/>
745104477Ssam            <attribute name="reportLevel" default="high"/>
746104477Ssam            <sequential>
747104477Ssam                <findbugs
748104477Ssam                    home="${findbugs.home}"
749104477Ssam                    output="@{output}"
750104477Ssam                    outputFile="@{outputFile}"
751104477Ssam                    reportLevel="@{reportLevel}"
752104477Ssam                    failOnError="false"
753104477Ssam                    errorProperty="findbugs.@{name}.errors"
754112124Ssam                    warningsProperty="findbugs.@{name}.warnings"
755112124Ssam                    jvmargs="-Xmx512M" >
756112124Ssam                    <class location="${dist.dir}/lib/@{name}.jar"/>
757112124Ssam                    <auxClasspath>
758112124Ssam                        <pathelement location="${build.classes.dir}"/>
759112124Ssam                    </auxClasspath>
760112124Ssam                    <sourcePath>
761112124Ssam                        <pathelement location="${src.classes.dir}"/>
762112124Ssam                    </sourcePath>
763104477Ssam                </findbugs>
764104477Ssam            </sequential>
765104477Ssam        </macrodef>
766104477Ssam        <property name="findbugs.defined" value="true"/>
767104477Ssam    </target>
768104477Ssam
769104477Ssam    <target name="-def-check">
770104477Ssam        <macrodef name="check">
771104477Ssam            <attribute name="name"/>
772104477Ssam            <attribute name="property"/>
773104477Ssam            <attribute name="marker"/>
774104477Ssam            <sequential>
775104477Ssam                <fail message="Cannot locate @{name}: please set @{property} to its location">
776104477Ssam                    <condition>
777104477Ssam                        <not>
778104477Ssam                            <isset property="@{property}"/>
779104477Ssam                        </not>
780104477Ssam                    </condition>
781104477Ssam                </fail>
782104477Ssam                <fail message="@{name} is not installed in ${@{property}}">
783104477Ssam                    <condition>
784104477Ssam                        <not>
785104477Ssam                            <available file="${@{property}}/@{marker}"/>
786104477Ssam                        </not>
787104477Ssam                    </condition>
788104477Ssam                </fail>
789104477Ssam            </sequential>
790104477Ssam        </macrodef>
791104477Ssam    </target>
792104477Ssam
793104477Ssam    <!-- standard JDK target -->
794104477Ssam    <target name="sanity"
795104477Ssam        description="display settings of configuration values">
796104477Ssam        <echo level="info">ant.home = ${ant.home}</echo>
797104477Ssam        <echo level="info">boot.java.home = ${boot.java.home}</echo>
798104477Ssam        <echo level="info">target.java.home = ${target.java.home}</echo>
799104477Ssam        <echo level="info">jtreg.home = ${jtreg.home}</echo>
800104477Ssam        <echo level="info">findbugs.home = ${findbugs.home}</echo>
801104477Ssam    </target>
802104477Ssam
803119137Ssam    <!-- useful debugging targets -->
804104477Ssam    <target name="diagnostics">
805104477Ssam        <diagnostics/>
806104477Ssam    </target>
807104477Ssam
808104477Ssam    <target name="post-sanity" depends="-def-jtreg,sanity,build"
809104477Ssam        description="perform basic validation after a standard build">
810104477Ssam        <jtreg
811104477Ssam            dir="make/test"
812104477Ssam            workDir="${build.jtreg.dir}/post-sanity/work"
813104477Ssam            reportDir="${build.jtreg.dir}/post-sanity/report"
814104477Ssam            jdk="${target.java.home}"
815104477Ssam            verbose="summary"
816104477Ssam            failonerror="false" resultproperty="jtreg.post-sanity.result">
817104477Ssam        </jtreg>
818104477Ssam
819104477Ssam    </target>
820104477Ssam</project>
821104477Ssam
822104477Ssam