build.xml revision 435:cff85998bf4d
1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3 Copyright 2007-2009 Sun Microsystems, Inc.  All Rights Reserved.
4 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5
6 This code is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License version 2 only, as
8 published by the Free Software Foundation.  Sun designates this
9 particular file as subject to the "Classpath" exception as provided
10 by Sun in the LICENSE file that accompanied this code.
11
12 This code is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 version 2 for more details (a copy is included in the LICENSE file that
16 accompanied this code).
17
18 You should have received a copy of the GNU General Public License version
19 2 along with this work; if not, write to the Free Software Foundation,
20 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
21
22 Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
23 CA 95054 USA or visit www.sun.com if you need additional information or
24 have any questions.
25-->
26
27<!--
28 This is the main build file for the complete langtools workspace.
29 It is used both when working on the tools in NetBeans, and when building
30 JDK itself, in which case it is invoked from the wrapper Makefile.
31 -->
32
33<project name="langtools" default="build" basedir="..">
34
35    <!-- Force full debuginfo for javac if the debug.classfiles
36    property is set.  This must be BEFORE the include of
37    build.properties because it sets javac.debuglevel.  -->
38    <condition property="javac.debuglevel" value="source,lines,vars">
39        <equals arg1="${debug.classfiles}" arg2="true"/>
40    </condition>
41
42    <!-- The following locations can be used to override default property values. -->
43
44    <!-- Use this location for customizations specific to this instance of this workspace -->
45    <property file="build.properties"/>
46
47    <!-- Use this location for customizations common to all OpenJDK langtools workspaces -->
48    <property file="${user.home}/.openjdk/${ant.project.name}-build.properties"/>
49
50    <!-- Use this location for customizations common to all OpenJDK workspaces -->
51    <property file="${user.home}/.openjdk/build.properties"/>
52
53    <!-- Convenient shorthands for standard locations within the workspace. -->
54    <property name="build.dir" location="build"/>
55    <property name="build.bootstrap.dir" location="${build.dir}/bootstrap"/>
56    <property name="build.coverage.dir" location="${build.dir}/coverage"/>
57    <property name="build.classes.dir" location="${build.dir}/classes"/>
58    <property name="build.gensrc.dir" location="${build.dir}/gensrc"/>
59    <property name="build.javadoc.dir" location="${build.dir}/javadoc"/>
60    <property name="build.jtreg.dir" location="${build.dir}/jtreg"/>
61    <property name="build.toolclasses.dir" location="${build.dir}/toolclasses"/>
62    <property name="dist.dir" location="dist"/>
63    <property name="dist.bin.dir" location="${dist.dir}/bin"/>
64    <property name="dist.coverage.dir" location="${dist.dir}/coverage"/>
65    <property name="dist.findbugs.dir" location="${dist.dir}/findbugs"/>
66    <property name="dist.lib.dir" location="${dist.dir}/lib"/>
67    <property name="make.dir" location="make"/>
68    <property name="make.tools.dir" location="${make.dir}/tools"/>
69    <property name="src.dir" location="src"/>
70    <property name="src.bin.dir" location="${src.dir}/share/bin"/>
71    <property name="src.classes.dir" location="${src.dir}/share/classes"/>
72    <property name="test.dir" location="test"/>
73
74    <!-- java.marker is set to a marker file to check for within a Java install dir.
75         The best file to check for across Solaris/Linux/Windows/MacOS is one of the
76         executables; regrettably, that is OS-specific. -->
77    <condition property="java.marker" value="bin/java">
78        <os family="unix"/>
79    </condition>
80    <condition property="java.marker" value="bin/java.exe">
81        <os family="windows"/>
82    </condition>
83
84    <!-- Standard property values, if not overriden by earlier settings. -->
85    <property file="${make.dir}/build.properties"/>
86
87    <!-- launcher.java is used in the launcher scripts provided to run
88        the tools' jar files.  If it has not already been set, then
89        default it to use ${target.java.home}, if available, otherwise
90        quietly default to simply use "java". -->
91    <condition property="launcher.java"
92        value="${target.java.home}/bin/java" else="java">
93        <isset property="target.java.home"/>
94    </condition>
95
96
97    <!-- Standard target to build deliverables for JDK build. -->
98
99    <target name="build" depends="build-bootstrap-tools,build-all-classes">
100        <copy todir="${dist.dir}/bootstrap">
101            <fileset dir="${build.bootstrap.dir}" includes="bin/,lib/"/>
102        </copy>
103        <chmod dir="${dist.dir}/bootstrap/bin" perm="ugo+rx">
104            <include name="*"/>
105        </chmod>
106        <mkdir dir="${dist.lib.dir}"/>
107        <jar file="${dist.lib.dir}/classes.jar" basedir="${build.classes.dir}"/>
108        <zip file="${dist.lib.dir}/src.zip" basedir="${src.classes.dir}"/>
109    </target>
110
111    <target name="build-bootstrap-tools" depends="build-bootstrap-javac,build-bootstrap-javadoc,build-bootstrap-doclets,build-bootstrap-javah"/>
112
113    <target name="build-all-tools" depends="build-javac,build-javadoc,build-doclets,build-javah,build-javap,build-apt"/>
114
115    <target name="build-all-classes" depends="build-bootstrap-javac">
116        <build-classes includes="${javac.includes} ${javadoc.includes} ${doclets.includes} ${javah.includes} ${javap.includes} ${apt.includes}"/>
117    </target>
118
119    <!-- clean -->
120
121    <target name="clean" description="Delete all generated files">
122        <delete dir="${build.dir}"/>
123        <delete dir="${dist.dir}"/>
124    </target>
125
126    <!-- Additional targets for running tools on the build -->
127
128    <target name="jtreg" depends="build-all-tools,-def-jtreg">
129        <jtreg-tool name="all" tests="${jtreg.tests}"/>
130    </target>
131
132    <target name="findbugs" depends="-def-findbugs,build-all-tools">
133        <property name="findbugs.reportLevel" value="medium"/>
134        <mkdir dir="${dist.findbugs.dir}"/>
135        <findbugs
136            home="${findbugs.home}"
137            projectName="JDK langtools ${full.version}"
138            output="xml"
139            outputFile="${dist.findbugs.dir}/findbugs.xml"
140            reportLevel="${findbugs.reportLevel}"
141            failOnError="false"
142            errorProperty="findbugs.all.errors"
143            warningsProperty="findbugs.all.warnings"
144            jvmargs="-Xmx512M">
145            <class location="${build.classes.dir}"/>
146            <sourcePath>
147                <pathelement location="${src.classes.dir}"/>
148            </sourcePath>
149        </findbugs>
150        <exec executable="sh">
151            <arg value="${findbugs.home}/bin/convertXmlToText"/>
152            <arg value="-longBugCodes"/>
153            <arg value="-html:${findbugs.home}/src/xsl/fancy.xsl"/>
154            <arg value="${dist.findbugs.dir}/findbugs.xml"/>
155            <redirector output="${dist.findbugs.dir}/findbugs.html"/>
156        </exec>
157    </target>
158
159    <target name="coverage" depends="-def-cobertura,build-all-classes,instrument-classes,jtreg,coverage-report"/>
160
161    <target name="instrument-classes" depends="-def-cobertura">
162        <!-- only define the following property when we want coverage info -->
163        <path id="coverage.classpath">
164            <pathelement location="${build.coverage.dir}/classes"/>
165            <path refid="cobertura.classpath"/>
166        </path>
167        <property name="coverage.options" value="-Dnet.sourceforge.cobertura.datafile=${build.coverage.dir}/cobertura.ser"/>
168        <property name="coverage.classpath" refid="coverage.classpath"/>
169        <mkdir dir="${build.coverage.dir}/classes"/>
170        <delete file="${build.coverage.dir}/cobertura.ser"/>
171        <cobertura-instrument todir="${build.coverage.dir}/classes"
172            datafile="${build.coverage.dir}/cobertura.ser">
173            <fileset dir="${build.classes.dir}"
174               includes="**/*.class" excludes="**/resources/*.class"/>
175        </cobertura-instrument>
176    </target>
177
178    <target name="coverage-report" depends="-def-cobertura">
179        <mkdir dir="${dist.coverage.dir}"/>
180        <cobertura-report
181            srcdir="${src.classes.dir}"
182            destdir="${dist.coverage.dir}"
183            datafile="${build.coverage.dir}/cobertura.ser"/>
184        <cobertura-report
185            format="xml"
186            srcdir="${src.classes.dir}"
187            destdir="${dist.coverage.dir}"
188            datafile="${build.coverage.dir}/cobertura.ser"/>
189    </target>
190
191    <!-- javac targets -->
192
193    <target name="build-bootstrap-javac"
194            depends="-def-build-bootstrap-classes,-def-build-bootstrap-jar,-def-build-bootstrap-tool">
195        <build-bootstrap-classes includes="${javac.includes}"/>
196        <build-bootstrap-jar     name="javac" includes="${javac.includes}"/>
197        <build-bootstrap-tool    name="javac"/>
198    </target>
199
200    <target name="build-classes-javac" depends="build-bootstrap-javac">
201        <build-classes includes="${javac.includes}"/>
202    </target>
203
204    <target name="build-javac" depends="build-classes-javac">
205        <build-jar  name="javac" includes="${javac.includes}"/>
206        <build-tool name="javac"/>
207    </target>
208
209    <target name="javadoc-javac" depends="build-javac,-def-javadoc-tool">
210        <javadoc-tool name="javac" includes="${javac.includes}" options="${javadoc.jls3.option}"/>
211    </target>
212
213    <target name="jtreg-javac" depends="build-javac,build-javap,-def-jtreg">
214        <jtreg-tool name="javac" tests="${javac.tests}"/>
215    </target>
216
217    <target name="findbugs-javac" depends="build-javac,-def-findbugs">
218        <findbugs-tool name="javac"/>
219    </target>
220
221    <target name="javac" depends="build-javac,jtreg-javac,findbugs-javac"/>
222
223    <!-- javadoc targets -->
224
225    <target name="build-bootstrap-javadoc" depends="build-bootstrap-javac">
226        <build-bootstrap-classes includes="${javadoc.includes}"/>
227        <build-bootstrap-jar     name="javadoc" includes="${javadoc.includes}"
228                                 jarclasspath="javac.jar doclets.jar"/>
229        <build-bootstrap-tool    name="javadoc"/>
230    </target>
231
232    <target name="build-classes-javadoc" depends="build-classes-javac">
233        <build-classes includes="${javadoc.includes}"/>
234    </target>
235
236    <target name="build-javadoc" depends="build-javac,build-classes-javadoc">
237        <build-jar  name="javadoc" includes="${javadoc.includes}"
238                    jarclasspath="javac.jar doclets.jar"/>
239        <build-tool name="javadoc"/>
240    </target>
241
242    <target name="javadoc-javadoc" depends="build-javadoc,-def-javadoc-tool">
243        <javadoc-tool name="javadoc" includes="${javadoc.includes}"/>
244    </target>
245
246    <target name="jtreg-javadoc" depends="build-javadoc,-def-jtreg">
247        <jtreg-tool name="javadoc" tests="${javadoc.tests}"/>
248    </target>
249
250    <target name="findbugs-javadoc" depends="build-javadoc,-def-findbugs">
251        <findbugs-tool name="javadoc"/>
252    </target>
253
254    <target name="javadoc" depends="build-javadoc,jtreg-javadoc,findbugs-javadoc"/>
255
256    <!-- doclets targets -->
257
258    <target name="build-bootstrap-doclets" depends="build-bootstrap-javadoc,-def-build-bootstrap-jar">
259        <build-bootstrap-classes includes="${doclets.includes}"/>
260        <build-bootstrap-jar     name="doclets" includes="${doclets.includes}"
261                                 jarmainclass="com.sun.tools.javadoc.Main"
262                                 jarclasspath="javadoc.jar"/>
263    </target>
264
265    <target name="build-classes-doclets" depends="build-classes-javadoc">
266        <build-classes includes="${doclets.includes}"/>
267    </target>
268
269    <target name="build-doclets" depends="build-javadoc,build-classes-doclets">
270        <!-- just jar, no bin for doclets -->
271        <build-jar name="doclets" includes="${doclets.includes}" jarclasspath="javadoc.jar"/>
272    </target>
273
274    <!-- (no javadoc for doclets) -->
275
276    <target name="jtreg-doclets" depends="build-doclets,-def-jtreg">
277        <jtreg-tool name="doclets" tests="${doclets.tests}"/>
278    </target>
279
280    <target name="findbugs-doclets" depends="build-doclets,-def-findbugs">
281        <findbugs-tool name="doclets"/>
282    </target>
283
284    <target name="doclets" depends="build-doclets,jtreg-doclets,findbugs-doclets"/>
285
286    <!-- javah targets -->
287
288    <target name="build-bootstrap-javah" depends="build-bootstrap-javadoc">
289        <build-bootstrap-classes includes="${javah.includes}"/>
290        <build-bootstrap-jar     name="javah" includes="${javah.includes}"
291                                 jarclasspath="javadoc.jar doclets.jar javac.jar"/>
292        <build-bootstrap-tool    name="javah"/>
293    </target>
294
295    <target name="build-javah" depends="build-javac,build-classes-javah">
296        <build-jar  name="javah" includes="${javah.includes}" jarclasspath="javac.jar"/>
297        <build-tool name="javah"/>
298    </target>
299
300    <target name="build-classes-javah" depends="build-classes-javadoc">
301        <build-classes includes="${javah.includes}"/>
302    </target>
303
304    <!-- (no javadoc for javah) -->
305
306    <target name="jtreg-javah" depends="build-javah,-def-jtreg">
307        <jtreg-tool name="javah" tests="${javah.tests}"/>
308    </target>
309
310    <target name="findbugs-javah" depends="build-javah,-def-findbugs">
311        <findbugs-tool name="javah"/>
312    </target>
313
314    <target name="javah" depends="build-javah,jtreg-javah,findbugs-javah"/>
315
316    <!-- javap targets -->
317
318    <target name="build-bootstrap-javap"
319            depends="-def-build-bootstrap-classes,-def-build-bootstrap-jar,-def-build-bootstrap-tool">
320        <build-bootstrap-classes includes="${javap.includes}"/>
321        <build-bootstrap-jar     name="javap" includes="${javap.includes}"
322                                 jarmainclass="sun.tools.javap.Main"/>
323        <build-bootstrap-tool    name="javap"/>
324    </target>
325
326    <target name="build-classes-javap" depends="build-classes-javac">
327        <build-classes includes="${javap.includes}"/>
328    </target>
329
330    <target name="build-javap" depends="build-javac,build-classes-javap">
331        <build-jar  name="javap" includes="${javap.includes}"
332                    jarmainclass="com.sun.tools.javap.Main"
333                    jarclasspath="javac.jar"/>
334        <build-tool name="javap"/>
335    </target>
336
337    <!-- (no javadoc for javap) -->
338
339    <target name="jtreg-javap" depends="build-javap,-def-jtreg">
340        <jtreg-tool name="javap" tests="${javap.tests}"/>
341    </target>
342
343    <target name="findbugs-javap" depends="build-javap,-def-findbugs">
344        <findbugs-tool name="javap"/>
345    </target>
346
347    <target name="javap" depends="build-javap,jtreg-javap,findbugs-javap"/>
348
349    <!-- apt targets -->
350
351    <target name="build-bootstrap-apt" depends="build-bootstrap-javac">
352        <build-bootstrap-classes includes="${apt.includes}"/>
353        <build-bootstrap-jar     name="apt" includes="${apt.includes}"
354                                 jarclasspath="javac.jar"/>
355        <build-bootstrap-tool    name="apt"/>
356    </target>
357
358    <target name="build-apt" depends="build-javac,build-classes-apt">
359        <build-jar  name="apt" includes="${apt.includes}" jarclasspath="javac.jar"/>
360        <build-tool name="apt"/>
361    </target>
362
363    <target name="build-classes-apt" depends="build-classes-javac">
364        <build-classes includes="${apt.includes}"/>
365    </target>
366
367    <target name="javadoc-apt" depends="build-apt,-def-javadoc-tool">
368        <javadoc-tool name="apt" includes="${apt.includes}"/>
369    </target>
370
371
372    <target name="jtreg-apt" depends="build-apt,-def-jtreg">
373        <jtreg-tool name="apt" tests="${apt.tests}"/>
374    </target>
375
376    <target name="findbugs-apt" depends="build-apt,-def-findbugs">
377        <findbugs-tool name="apt"/>
378    </target>
379
380    <target name="apt" depends="build-apt,jtreg-apt,findbugs-apt"/>
381
382    <!-- Check targets -->
383
384    <target name="-check-boot.java.home" depends="-def-check">
385        <check name="bootstrap java" property="boot.java.home" marker="${java.marker}"/>
386    </target>
387
388    <target name="-check-target.java.home" depends="-def-check">
389        <check name="target java" property="target.java.home" marker="${java.marker}"/>
390    </target>
391
392    <target name="-check-cobertura.home" depends="-def-check">
393        <check name="cobertura" property="cobertura.home" marker="cobertura.jar"/>
394    </target>
395
396    <target name="-check-findbugs.home" depends="-def-check">
397        <check name="findbugs" property="findbugs.home" marker="lib/findbugs.jar"/>
398    </target>
399
400    <target name="-check-jtreg.home" depends="-def-check">
401        <check name="jtreg" property="jtreg.home" marker="lib/jtreg.jar"/>
402    </target>
403
404    <!-- Ant macro and preset defs -->
405
406    <target name="-def-build-tool">
407        <macrodef name="build-tool">
408            <attribute name="name"/>
409            <attribute name="bin.dir" default="${dist.bin.dir}"/>
410            <attribute name="java" default="${launcher.java}"/>
411            <sequential>
412                <mkdir dir="@{bin.dir}"/>
413                <copy file="${src.bin.dir}/launcher.sh-template" tofile="@{bin.dir}/@{name}">
414                    <filterset begintoken="#" endtoken="#">
415                        <filter token="PROGRAM" value="@{name}"/>
416                        <filter token="TARGET_JAVA" value="@{java}"/>
417                    </filterset>
418                </copy>
419                <chmod file="@{bin.dir}/@{name}" perm="ugo+rx"/>
420            </sequential>
421        </macrodef>
422    </target>
423
424    <target name="-def-build-jar">
425        <macrodef name="build-jar">
426            <attribute name="name"/>
427            <attribute name="includes"/>
428            <attribute name="classes.dir" default="${build.classes.dir}"/>
429            <attribute name="lib.dir" default="${dist.lib.dir}"/>
430            <attribute name="jarmainclass" default="com.sun.tools.@{name}.Main"/>
431            <attribute name="jarclasspath" default=""/>
432            <sequential>
433                <mkdir dir="@{lib.dir}"/>
434                <jar destfile="@{lib.dir}/@{name}.jar"
435                     basedir="@{classes.dir}"
436                     includes="@{includes}">
437                    <manifest>
438                        <attribute name="Main-Class" value="@{jarmainclass}"/>
439                        <attribute name="Class-Path" value="@{jarclasspath}"/>
440                    </manifest>
441                </jar>
442            </sequential>
443        </macrodef>
444    </target>
445
446    <target name="-def-build-classes" depends="-def-pcompile">
447        <macrodef name="build-classes">
448            <attribute name="includes"/>
449            <attribute name="excludes" default="**/package-info.java"/>
450            <attribute name="classes.dir" default="${build.classes.dir}"/>
451            <attribute name="gensrc.dir" default="${build.gensrc.dir}"/>
452            <attribute name="bootclasspath" default="${build.bootstrap.dir}/classes"/>
453            <attribute name="java.home" default="${boot.java.home}"/>
454            <attribute name="source" default="${javac.source}"/>
455            <attribute name="target" default="${javac.target}"/>
456            <attribute name="release" default="${release}"/>
457            <attribute name="full.version" default="${full.version}"/>
458            <sequential>
459                <mkdir dir="@{gensrc.dir}"/>
460                <mkdir dir="@{classes.dir}"/>
461                <pcompile srcdir="${src.classes.dir}"
462                          destdir="@{gensrc.dir}"
463                          includes="@{includes}"/>
464                <copy todir="@{gensrc.dir}">
465                    <fileset dir="${src.classes.dir}" includes="@{includes}"/>
466                    <globmapper from="*.properties-template" to="*.properties"/>
467                    <filterset begintoken="$(" endtoken=")">
468                        <filter token="JDK_VERSION" value="${jdk.version}"/>
469                        <filter token="RELEASE" value="@{release}"/>
470                        <filter token="FULL_VERSION" value="@{full.version}"/>
471                    </filterset>
472                </copy>
473                <pcompile srcdir="@{gensrc.dir}"
474                          destdir="@{gensrc.dir}"
475                          includes="**/*.properties"/>
476                <javac fork="true"
477                       executable="@{java.home}/bin/javac"
478                       srcdir="${src.classes.dir}:@{gensrc.dir}"
479                       destdir="@{classes.dir}"
480                       includes="@{includes}"
481                       excludes="@{excludes}"
482                       sourcepath=""
483                       includeAntRuntime="no"
484                       source="@{source}"
485                       target="@{target}"
486                       debug="${javac.debug}"
487                       debuglevel="${javac.debuglevel}">
488                    <compilerarg value="-J-Xbootclasspath/p:@{bootclasspath}"/>
489                    <compilerarg value="-Xbootclasspath/p:@{classes.dir}"/>
490                    <compilerarg line="${javac.no.jdk.warnings}"/>
491                    <compilerarg line="${javac.version.opt}"/>
492                    <compilerarg line="${javac.lint.opts}"/>
493                </javac>
494                <copy todir="@{classes.dir}">
495                    <fileset dir="${src.classes.dir}">
496                        <include name="@{includes}"/>
497                        <exclude name="**/*.java"/>
498                        <exclude name="**/*.properties"/>
499                        <exclude name="**/*-template"/>
500                        <exclude name="**/package.html"/>
501                    </fileset>
502                </copy>
503            </sequential>
504        </macrodef>
505    </target>
506
507    <target name="-def-build-bootstrap-tool" depends="-check-boot.java.home,-def-build-tool">
508        <presetdef name="build-bootstrap-tool">
509            <build-tool
510                bin.dir="${build.bootstrap.dir}/bin"
511                java="${boot.java}"/>
512        </presetdef>
513    </target>
514
515    <target name="-def-build-bootstrap-jar" depends="-def-build-jar">
516        <presetdef name="build-bootstrap-jar">
517            <build-jar
518                classes.dir="${build.bootstrap.dir}/classes"
519                lib.dir="${build.bootstrap.dir}/lib"/>
520        </presetdef>
521    </target>
522
523    <target name="-def-build-bootstrap-classes" depends="-def-build-classes">
524        <presetdef name="build-bootstrap-classes">
525            <build-classes
526                source="${boot.javac.source}"
527                target="${boot.javac.target}"
528                gensrc.dir="${build.bootstrap.dir}/gensrc"
529                classes.dir="${build.bootstrap.dir}/classes"
530                bootclasspath=""
531                release="${bootstrap.release}"
532                full.version="${bootstrap.full.version}"/>
533        </presetdef>
534    </target>
535
536    <target name="-def-pcompile">
537        <mkdir dir="${build.toolclasses.dir}"/>
538        <javac fork="true"
539               source="${boot.javac.source}"
540               target="${boot.javac.target}"
541               executable="${boot.java.home}/bin/javac"
542               srcdir="${make.tools.dir}/CompileProperties"
543               destdir="${build.toolclasses.dir}/"
544               classpath="${ant.home}/lib/ant.jar"/>
545        <taskdef name="pcompile"
546                 classname="CompilePropertiesTask"
547                 classpath="${build.toolclasses.dir}/"/>
548    </target>
549
550    <target name="-def-javadoc-tool" depends="-check-target.java.home">
551        <macrodef name="javadoc-tool">
552            <attribute name="name"/>
553            <attribute name="includes"/>
554            <attribute name="options" default=""/>
555            <attribute name="source" default="1.5"/> <!-- FIXME -->
556            <sequential>
557                <property name="javadoc.options" value=""/> <!-- default, can be overridden per user or per project -->
558                <!-- Note: even with this default value, includes
559         from src.classes.dir get javadoc'd; see packageset below -->
560                <property name="javadoc.packagenames" value="none"/> <!-- default, can be overridden per user or per project -->
561                <javadoc
562                    executable="${target.java.home}/bin/javadoc"
563                    destdir="${build.javadoc.dir}/@{name}"
564                    source="@{source}"
565                    windowtitle="UNOFFICIAL"
566                    failonerror="true"
567                    use="true"
568                    author="false"
569                    version="false"
570                    packagenames="${javadoc.packagenames}" >
571                    <header><![CDATA[<strong>Unofficial Javadoc</strong> generated from developer sources for preview purposes only]]></header>
572                    <arg line="@{options}"/>
573                    <bootclasspath>
574                        <path location="${build.classes.dir}"/>
575                        <path location="${target.java.home}/jre/lib/rt.jar"/>
576                    </bootclasspath>
577                    <sourcepath>
578                        <pathelement location="${src.classes.dir}"/>
579                    </sourcepath>
580                    <!-- XXX just <fileset> (restricted further to **/*.java) and no <packageset> -->
581                    <!-- means that {@link some.package} will not work, which is no good. -->
582                    <!-- (It correctly skips excluded single classes, but not if packageset is also included, -->
583                    <!-- which also causes duplicates in the class index for included files.) -->
584                    <packageset dir="${src.classes.dir}" includes="@{includes}">
585                        <or>
586                            <filename name="java/"/>
587                            <filename name="javax/"/>
588                            <filename name="com/sun/javadoc/"/>
589                            <filename name="com/sun/mirror/"/>
590                            <filename name="com/sun/source/"/>
591                        </or>
592                    </packageset>
593                </javadoc>
594            </sequential>
595        </macrodef>
596    </target>
597
598    <target name="-def-jtreg" unless="jtreg.defined" depends="-check-jtreg.home,-check-target.java.home">
599        <taskdef name="jtreg" classname="com.sun.javatest.regtest.Main$$Ant">
600            <classpath>
601                <pathelement location="${jtreg.home}/lib/jtreg.jar"/>
602                <pathelement location="${jtreg.home}/lib/javatest.jar"/>
603            </classpath>
604        </taskdef>
605        <macrodef name="jtreg-tool">
606            <attribute name="name"/>
607            <attribute name="tests"/>
608            <attribute name="jdk" default="${target.java.home}"/>
609            <attribute name="samevm" default="true"/>
610            <attribute name="verbose" default="summary"/>
611            <attribute name="options" default=""/>
612            <attribute name="keywords" default="-keywords:!ignore"/>
613            <attribute name="jpda.jvmargs" default=""/>
614            <sequential>
615                <property name="coverage.options" value=""/>    <!-- default -->
616                <property name="coverage.classpath" value=""/>    <!-- default -->
617                <jtreg
618                    dir="${test.dir}"
619                    workDir="${build.jtreg.dir}/@{name}/work"
620                    reportDir="${build.jtreg.dir}/@{name}/report"
621                    jdk="@{jdk}"
622                    samevm="@{samevm}" verbose="@{verbose}"
623                    failonerror="false" resultproperty="jtreg.@{name}.result"
624                    javacoptions="-g"
625                    vmoptions="${coverage.options} -Xbootclasspath/p:${coverage.classpath}:${build.classes.dir} @{jpda.jvmargs}">
626                    <arg line="@{keywords}"/>
627                    <arg line="@{options}"/>
628                    <arg line="@{tests}"/>
629                </jtreg>
630                <!-- the next two properties are for convenience, when only
631                     a single instance of jtreg will be invoked. -->
632                <condition property="jtreg.passed">
633                    <equals arg1="${jtreg.@{name}.result}" arg2="0"/>
634                </condition>
635                <property name="jtreg.report" value="${build.jtreg.dir}/@{name}/report"/>
636            </sequential>
637        </macrodef>
638        <property name="jtreg.defined" value="true"/>
639    </target>
640
641    <target name="-def-cobertura" depends="-check-cobertura.home">
642        <path id="cobertura.classpath">
643            <fileset dir="${cobertura.home}">
644                <include name="cobertura.jar"/>
645                <include name="lib/**/*.jar"/>
646            </fileset>
647        </path>
648        <taskdef classpathref="cobertura.classpath" resource="tasks.properties"/>
649    </target>
650
651    <target name="-def-findbugs" unless="findbugs.defined" depends="-check-findbugs.home">
652        <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask">
653            <classpath>
654                <pathelement location="${findbugs.home}/lib/findbugs.jar"/>
655            </classpath>
656        </taskdef>
657        <macrodef name="findbugs-tool">
658            <attribute name="name"/>
659            <attribute name="output" default="emacs"/>
660            <attribute name="outputFile" default=""/>
661            <attribute name="reportLevel" default="high"/>
662            <sequential>
663                <findbugs
664                    home="${findbugs.home}"
665                    output="@{output}"
666                    outputFile="@{outputFile}"
667                    reportLevel="@{reportLevel}"
668                    failOnError="false"
669                    errorProperty="findbugs.@{name}.errors"
670                    warningsProperty="findbugs.@{name}.warnings"
671                    jvmargs="-Xmx512M" >
672                    <class location="${dist.dir}/lib/@{name}.jar"/>
673                    <auxClasspath>
674                        <pathelement location="${build.classes.dir}"/>
675                    </auxClasspath>
676                    <sourcePath>
677                        <pathelement location="${src.classes.dir}"/>
678                    </sourcePath>
679                </findbugs>
680            </sequential>
681        </macrodef>
682        <property name="findbugs.defined" value="true"/>
683    </target>
684
685    <target name="-def-check">
686        <macrodef name="check">
687            <attribute name="name"/>
688            <attribute name="property"/>
689            <attribute name="marker"/>
690            <sequential>
691                <fail message="Cannot locate @{name}: please set @{property} to its location">
692                    <condition>
693                        <not>
694                            <isset property="@{property}"/>
695                        </not>
696                    </condition>
697                </fail>
698                <fail message="@{name} is not installed in ${@{property}}">
699                    <condition>
700                        <not>
701                            <available file="${@{property}}/@{marker}"/>
702                        </not>
703                    </condition>
704                </fail>
705            </sequential>
706        </macrodef>
707    </target>
708
709    <!-- standard JDK target -->
710    <target name="sanity"
711        description="display settings of congiguration values">
712        <echo level="info">ant.home = ${ant.home}</echo>
713        <echo level="info">boot.java.home = ${boot.java.home}</echo>
714        <echo level="info">target.java.home = ${target.java.home}</echo>
715        <echo level="info">jtreg.home = ${jtreg.home}</echo>
716        <echo level="info">findbugs.home = ${findbugs.home}</echo>
717    </target>
718
719    <!-- useful debugging targets -->
720    <target name="diagnostics">
721        <diagnostics/>
722    </target>
723
724    <target name="post-sanity" depends="-def-jtreg,sanity,build"
725        description="perform basic validation after a standard build">
726        <jtreg
727            dir="make/test"
728            workDir="${build.jtreg.dir}/post-sanity/work"
729            reportDir="${build.jtreg.dir}/post-sanity/report"
730            jdk="${target.java.home}"
731            verbose="summary"
732            failonerror="false" resultproperty="jtreg.post-sanity.result">
733        </jtreg>
734
735    </target>
736</project>
737
738