build.xml 35.3 KB
Newer Older
D
duke 已提交
1 2
<?xml version="1.0" encoding="UTF-8"?>
<!--
X
xdono 已提交
3
 Copyright 2007-2009 Sun Microsystems, Inc.  All Rights Reserved.
D
duke 已提交
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.

 This code is free software; you can redistribute it and/or modify it
 under the terms of the GNU General Public License version 2 only, as
 published by the Free Software Foundation.  Sun designates this
 particular file as subject to the "Classpath" exception as provided
 by Sun in the LICENSE file that accompanied this code.

 This code is distributed in the hope that it will be useful, but WITHOUT
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 version 2 for more details (a copy is included in the LICENSE file that
 accompanied this code).

 You should have received a copy of the GNU General Public License version
 2 along with this work; if not, write to the Free Software Foundation,
 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.

 Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 CA 95054 USA or visit www.sun.com if you need additional information or
 have any questions.
-->

<!--
 This is the main build file for the complete langtools workspace.
 It is used both when working on the tools in NetBeans, and when building
 JDK itself, in which case it is invoked from the wrapper Makefile.
 -->

<project name="langtools" default="build" basedir="..">
34

35 36 37 38 39 40 41
    <!-- Force full debuginfo for javac if the debug.classfiles
    property is set.  This must be BEFORE the include of
    build.properties because it sets javac.debuglevel.  -->
    <condition property="javac.debuglevel" value="source,lines,vars">
        <equals arg1="${debug.classfiles}" arg2="true"/>
    </condition>

D
duke 已提交
42 43 44 45 46 47 48 49 50 51
    <!-- The following locations can be used to override default property values. -->

    <!-- Use this location for customizations specific to this instance of this workspace -->
    <property file="build.properties"/>

    <!-- Use this location for customizations common to all OpenJDK langtools workspaces -->
    <property file="${user.home}/.openjdk/${ant.project.name}-build.properties"/>

    <!-- Use this location for customizations common to all OpenJDK workspaces -->
    <property file="${user.home}/.openjdk/build.properties"/>
52 53

    <!-- Convenient shorthands for standard locations within the workspace. -->
D
duke 已提交
54 55 56 57 58
    <property name="build.dir" location="build"/>
    <property name="build.bootstrap.dir" location="${build.dir}/bootstrap"/>
    <property name="build.coverage.dir" location="${build.dir}/coverage"/>
    <property name="build.classes.dir" location="${build.dir}/classes"/>
    <property name="build.gensrc.dir" location="${build.dir}/gensrc"/>
59
    <property name="build.genstubs.dir" location="${build.dir}/genstubs"/>
D
duke 已提交
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
    <property name="build.javadoc.dir" location="${build.dir}/javadoc"/>
    <property name="build.jtreg.dir" location="${build.dir}/jtreg"/>
    <property name="build.toolclasses.dir" location="${build.dir}/toolclasses"/>
    <property name="dist.dir" location="dist"/>
    <property name="dist.bin.dir" location="${dist.dir}/bin"/>
    <property name="dist.coverage.dir" location="${dist.dir}/coverage"/>
    <property name="dist.findbugs.dir" location="${dist.dir}/findbugs"/>
    <property name="dist.lib.dir" location="${dist.dir}/lib"/>
    <property name="make.dir" location="make"/>
    <property name="make.tools.dir" location="${make.dir}/tools"/>
    <property name="src.dir" location="src"/>
    <property name="src.bin.dir" location="${src.dir}/share/bin"/>
    <property name="src.classes.dir" location="${src.dir}/share/classes"/>
    <property name="test.dir" location="test"/>

    <!-- java.marker is set to a marker file to check for within a Java install dir.
         The best file to check for across Solaris/Linux/Windows/MacOS is one of the
         executables; regrettably, that is OS-specific. -->
    <condition property="java.marker" value="bin/java">
79
        <os family="unix"/>
D
duke 已提交
80 81
    </condition>
    <condition property="java.marker" value="bin/java.exe">
82
        <os family="windows"/>
D
duke 已提交
83
    </condition>
84

D
duke 已提交
85
    <!-- Standard property values, if not overriden by earlier settings. -->
86
    <property file="${make.dir}/build.properties"/>
J
jjg 已提交
87 88

    <!-- launcher.java is used in the launcher scripts provided to run
89 90 91 92 93 94
        the tools' jar files.  If it has not already been set, then
        default it to use ${target.java.home}, if available, otherwise
        quietly default to simply use "java". -->
    <condition property="launcher.java"
        value="${target.java.home}/bin/java" else="java">
        <isset property="target.java.home"/>
J
jjg 已提交
95 96
    </condition>

97 98 99 100
    <!-- Logic for handling access import jdk classes, if available.
        import.jdk should be unset, or set to jdk home (to use rt.jar)
        or to jdk repo (to use src/share/classes).
        Based on the value, if any, set up default values for javac's sourcepath,
J
jjg 已提交
101
        classpath and bootclasspath. Note: the default values are overridden
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
        in the build-bootstrap-classes macro. -->

    <available property="import.jdk.src.dir" value="${import.jdk}/src/share/classes"
        filepath="${import.jdk}/src/share/classes" file="java/nio/file/Path.java"/>
    <available property="import.jdk.jar" value="${import.jdk}/jre/lib/rt.jar"
        ignoresystemclasses="true"
        classpath="${import.jdk}/jre/lib/rt.jar" classname="java.nio.file.Path"/>

    <condition property="javac.sourcepath" value="${build.genstubs.dir}" else="">
        <isset property="import.jdk.src.dir"/>
    </condition>

    <property name="javac.classpath" value=""/>

    <condition property="javac.bootclasspath.opt"
            value="-Xbootclasspath:${build.classes.dir}:${import.jdk.jar}"
            else="-Xbootclasspath/p:${build.classes.dir}">
        <isset property="import.jdk.jar"/>
    </condition>

    <condition property="exclude.files" value="" else="${require.import.jdk.files}">
        <isset property="import.jdk"/>
    </condition>

    <!-- for debugging -->
    <target name="check-import.jdk">
        <echo message="import.jdk: ${import.jdk}"/>
        <echo message="import.jdk.jar: ${import.jdk.jar}"/>
        <echo message="import.jdk.src.dir: ${import.jdk.src.dir}"/>
    </target>
132

D
duke 已提交
133 134 135 136 137 138 139 140 141 142 143 144 145
    <!-- Standard target to build deliverables for JDK build. -->

    <target name="build" depends="build-bootstrap-tools,build-all-classes">
        <copy todir="${dist.dir}/bootstrap">
            <fileset dir="${build.bootstrap.dir}" includes="bin/,lib/"/>
        </copy>
        <chmod dir="${dist.dir}/bootstrap/bin" perm="ugo+rx">
            <include name="*"/>
        </chmod>
        <mkdir dir="${dist.lib.dir}"/>
        <jar file="${dist.lib.dir}/classes.jar" basedir="${build.classes.dir}"/>
        <zip file="${dist.lib.dir}/src.zip" basedir="${src.classes.dir}"/>
    </target>
146

147 148 149
    <target name="build-bootstrap-tools"
        depends="build-bootstrap-javac,build-bootstrap-javadoc,build-bootstrap-doclets,build-bootstrap-javah"
    />
150

151 152 153
    <target name="build-all-tools"
        depends="build-javac,build-javadoc,build-doclets,build-javah,build-javap,build-apt"
    />
154

155
    <target name="build-all-classes" depends="build-bootstrap-javac,-create-import-jdk-stubs">
156 157
        <build-classes includes="${javac.includes} ${javadoc.includes} ${doclets.includes} ${javah.includes} ${javap.includes} ${apt.includes}"/>
    </target>
158

D
duke 已提交
159 160 161 162 163 164 165 166 167
    <!-- clean -->

    <target name="clean" description="Delete all generated files">
        <delete dir="${build.dir}"/>
        <delete dir="${dist.dir}"/>
    </target>

    <!-- Additional targets for running tools on the build -->

168 169 170 171
    <target name="jtreg" depends="build-all-tools,-def-jtreg">
        <jtreg-tool name="all" tests="${jtreg.tests}"/>
    </target>

D
duke 已提交
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
    <target name="findbugs" depends="-def-findbugs,build-all-tools">
        <property name="findbugs.reportLevel" value="medium"/>
        <mkdir dir="${dist.findbugs.dir}"/>
        <findbugs
            home="${findbugs.home}"
            projectName="JDK langtools ${full.version}"
            output="xml"
            outputFile="${dist.findbugs.dir}/findbugs.xml"
            reportLevel="${findbugs.reportLevel}"
            failOnError="false"
            errorProperty="findbugs.all.errors"
            warningsProperty="findbugs.all.warnings"
            jvmargs="-Xmx512M">
            <class location="${build.classes.dir}"/>
            <sourcePath>
                <pathelement location="${src.classes.dir}"/>
            </sourcePath>
        </findbugs>
        <exec executable="sh">
            <arg value="${findbugs.home}/bin/convertXmlToText"/>
            <arg value="-longBugCodes"/>
            <arg value="-html:${findbugs.home}/src/xsl/fancy.xsl"/>
            <arg value="${dist.findbugs.dir}/findbugs.xml"/>
            <redirector output="${dist.findbugs.dir}/findbugs.html"/>
196
        </exec>
D
duke 已提交
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
    </target>

    <target name="coverage" depends="-def-cobertura,build-all-classes,instrument-classes,jtreg,coverage-report"/>

    <target name="instrument-classes" depends="-def-cobertura">
        <!-- only define the following property when we want coverage info -->
        <path id="coverage.classpath">
            <pathelement location="${build.coverage.dir}/classes"/>
            <path refid="cobertura.classpath"/>
        </path>
        <property name="coverage.options" value="-Dnet.sourceforge.cobertura.datafile=${build.coverage.dir}/cobertura.ser"/>
        <property name="coverage.classpath" refid="coverage.classpath"/>
        <mkdir dir="${build.coverage.dir}/classes"/>
        <delete file="${build.coverage.dir}/cobertura.ser"/>
        <cobertura-instrument todir="${build.coverage.dir}/classes"
            datafile="${build.coverage.dir}/cobertura.ser">
213
            <fileset dir="${build.classes.dir}"
D
duke 已提交
214 215
               includes="**/*.class" excludes="**/resources/*.class"/>
        </cobertura-instrument>
216
    </target>
D
duke 已提交
217 218 219

    <target name="coverage-report" depends="-def-cobertura">
        <mkdir dir="${dist.coverage.dir}"/>
220
        <cobertura-report
D
duke 已提交
221 222 223
            srcdir="${src.classes.dir}"
            destdir="${dist.coverage.dir}"
            datafile="${build.coverage.dir}/cobertura.ser"/>
224 225 226
        <cobertura-report
            format="xml"
            srcdir="${src.classes.dir}"
D
duke 已提交
227 228 229
            destdir="${dist.coverage.dir}"
            datafile="${build.coverage.dir}/cobertura.ser"/>
    </target>
230

D
duke 已提交
231 232
    <!-- javac targets -->

233 234 235 236 237
    <target name="build-bootstrap-javac"
            depends="-def-build-bootstrap-classes,-def-build-bootstrap-jar,-def-build-bootstrap-tool">
        <build-bootstrap-classes includes="${javac.includes}"/>
        <build-bootstrap-jar     name="javac" includes="${javac.includes}"/>
        <build-bootstrap-tool    name="javac"/>
D
duke 已提交
238
    </target>
239

240
    <target name="build-classes-javac" depends="build-bootstrap-javac,-create-import-jdk-stubs">
241
        <build-classes includes="${javac.includes}"/>
D
duke 已提交
242
    </target>
243

244 245 246
    <target name="build-javac" depends="build-classes-javac">
        <build-jar  name="javac" includes="${javac.includes}"/>
        <build-tool name="javac"/>
D
duke 已提交
247
    </target>
248

D
duke 已提交
249 250 251
    <target name="javadoc-javac" depends="build-javac,-def-javadoc-tool">
        <javadoc-tool name="javac" includes="${javac.includes}" options="${javadoc.jls3.option}"/>
    </target>
252

253
    <target name="jtreg-javac" depends="build-javac,build-javap,-def-jtreg">
254
        <jtreg-tool name="javac" tests="${javac.tests}"/>
D
duke 已提交
255
    </target>
256

D
duke 已提交
257 258 259
    <target name="findbugs-javac" depends="build-javac,-def-findbugs">
        <findbugs-tool name="javac"/>
    </target>
260

D
duke 已提交
261
    <target name="javac" depends="build-javac,jtreg-javac,findbugs-javac"/>
262

D
duke 已提交
263 264 265
    <!-- javadoc targets -->

    <target name="build-bootstrap-javadoc" depends="build-bootstrap-javac">
266 267 268 269
        <build-bootstrap-classes includes="${javadoc.includes}"/>
        <build-bootstrap-jar     name="javadoc" includes="${javadoc.includes}"
                                 jarclasspath="javac.jar doclets.jar"/>
        <build-bootstrap-tool    name="javadoc"/>
D
duke 已提交
270
    </target>
271

D
duke 已提交
272
    <target name="build-classes-javadoc" depends="build-classes-javac">
273
        <build-classes includes="${javadoc.includes}"/>
D
duke 已提交
274
    </target>
275

276 277
    <target name="build-javadoc" depends="build-javac,build-classes-javadoc">
        <build-jar  name="javadoc" includes="${javadoc.includes}"
D
duke 已提交
278
                    jarclasspath="javac.jar doclets.jar"/>
279
        <build-tool name="javadoc"/>
D
duke 已提交
280
    </target>
281

D
duke 已提交
282 283 284
    <target name="javadoc-javadoc" depends="build-javadoc,-def-javadoc-tool">
        <javadoc-tool name="javadoc" includes="${javadoc.includes}"/>
    </target>
285

D
duke 已提交
286
    <target name="jtreg-javadoc" depends="build-javadoc,-def-jtreg">
287
        <jtreg-tool name="javadoc" tests="${javadoc.tests}"/>
D
duke 已提交
288
    </target>
289

D
duke 已提交
290 291 292
    <target name="findbugs-javadoc" depends="build-javadoc,-def-findbugs">
        <findbugs-tool name="javadoc"/>
    </target>
293

D
duke 已提交
294
    <target name="javadoc" depends="build-javadoc,jtreg-javadoc,findbugs-javadoc"/>
295

D
duke 已提交
296 297 298
    <!-- doclets targets -->

    <target name="build-bootstrap-doclets" depends="build-bootstrap-javadoc,-def-build-bootstrap-jar">
299 300 301 302
        <build-bootstrap-classes includes="${doclets.includes}"/>
        <build-bootstrap-jar     name="doclets" includes="${doclets.includes}"
                                 jarmainclass="com.sun.tools.javadoc.Main"
                                 jarclasspath="javadoc.jar"/>
D
duke 已提交
303
    </target>
304

D
duke 已提交
305
    <target name="build-classes-doclets" depends="build-classes-javadoc">
306
        <build-classes includes="${doclets.includes}"/>
D
duke 已提交
307
    </target>
308

309
    <target name="build-doclets" depends="build-javadoc,build-classes-doclets">
D
duke 已提交
310
        <!-- just jar, no bin for doclets -->
311
        <build-jar name="doclets" includes="${doclets.includes}" jarclasspath="javadoc.jar"/>
D
duke 已提交
312 313 314
    </target>

    <!-- (no javadoc for doclets) -->
315

D
duke 已提交
316
    <target name="jtreg-doclets" depends="build-doclets,-def-jtreg">
317
        <jtreg-tool name="doclets" tests="${doclets.tests}"/>
D
duke 已提交
318
    </target>
319

D
duke 已提交
320 321 322
    <target name="findbugs-doclets" depends="build-doclets,-def-findbugs">
        <findbugs-tool name="doclets"/>
    </target>
323

D
duke 已提交
324
    <target name="doclets" depends="build-doclets,jtreg-doclets,findbugs-doclets"/>
325

D
duke 已提交
326 327 328
    <!-- javah targets -->

    <target name="build-bootstrap-javah" depends="build-bootstrap-javadoc">
329 330 331 332
        <build-bootstrap-classes includes="${javah.includes}"/>
        <build-bootstrap-jar     name="javah" includes="${javah.includes}"
                                 jarclasspath="javadoc.jar doclets.jar javac.jar"/>
        <build-bootstrap-tool    name="javah"/>
D
duke 已提交
333
    </target>
334

335 336 337
    <target name="build-javah" depends="build-javac,build-classes-javah">
        <build-jar  name="javah" includes="${javah.includes}" jarclasspath="javac.jar"/>
        <build-tool name="javah"/>
D
duke 已提交
338
    </target>
339

D
duke 已提交
340
    <target name="build-classes-javah" depends="build-classes-javadoc">
341
        <build-classes includes="${javah.includes}"/>
D
duke 已提交
342
    </target>
343

D
duke 已提交
344 345 346
    <!-- (no javadoc for javah) -->

    <target name="jtreg-javah" depends="build-javah,-def-jtreg">
347
        <jtreg-tool name="javah" tests="${javah.tests}"/>
D
duke 已提交
348
    </target>
349

D
duke 已提交
350 351 352
    <target name="findbugs-javah" depends="build-javah,-def-findbugs">
        <findbugs-tool name="javah"/>
    </target>
353

D
duke 已提交
354
    <target name="javah" depends="build-javah,jtreg-javah,findbugs-javah"/>
355

D
duke 已提交
356 357
    <!-- javap targets -->

358 359 360 361 362 363
    <target name="build-bootstrap-javap"
            depends="-def-build-bootstrap-classes,-def-build-bootstrap-jar,-def-build-bootstrap-tool">
        <build-bootstrap-classes includes="${javap.includes}"/>
        <build-bootstrap-jar     name="javap" includes="${javap.includes}"
                                 jarmainclass="sun.tools.javap.Main"/>
        <build-bootstrap-tool    name="javap"/>
D
duke 已提交
364
    </target>
365

366
    <target name="build-classes-javap" depends="build-classes-javac">
367
        <build-classes includes="${javap.includes}"/>
D
duke 已提交
368
    </target>
369

370 371
    <target name="build-javap" depends="build-javac,build-classes-javap">
        <build-jar  name="javap" includes="${javap.includes}"
J
jjg 已提交
372
                    jarmainclass="com.sun.tools.javap.Main"
373
                    jarclasspath="javac.jar"/>
374
        <build-tool name="javap"/>
D
duke 已提交
375
    </target>
376

D
duke 已提交
377 378 379
    <!-- (no javadoc for javap) -->

    <target name="jtreg-javap" depends="build-javap,-def-jtreg">
380
        <jtreg-tool name="javap" tests="${javap.tests}"/>
D
duke 已提交
381
    </target>
382

D
duke 已提交
383 384 385
    <target name="findbugs-javap" depends="build-javap,-def-findbugs">
        <findbugs-tool name="javap"/>
    </target>
386

D
duke 已提交
387
    <target name="javap" depends="build-javap,jtreg-javap,findbugs-javap"/>
388

D
duke 已提交
389
    <!-- apt targets -->
390

D
duke 已提交
391
    <target name="build-bootstrap-apt" depends="build-bootstrap-javac">
392 393 394 395
        <build-bootstrap-classes includes="${apt.includes}"/>
        <build-bootstrap-jar     name="apt" includes="${apt.includes}"
                                 jarclasspath="javac.jar"/>
        <build-bootstrap-tool    name="apt"/>
D
duke 已提交
396
    </target>
397

398 399 400
    <target name="build-apt" depends="build-javac,build-classes-apt">
        <build-jar  name="apt" includes="${apt.includes}" jarclasspath="javac.jar"/>
        <build-tool name="apt"/>
D
duke 已提交
401
    </target>
402

D
duke 已提交
403
    <target name="build-classes-apt" depends="build-classes-javac">
404
        <build-classes includes="${apt.includes}"/>
D
duke 已提交
405
    </target>
406

D
duke 已提交
407 408 409
    <target name="javadoc-apt" depends="build-apt,-def-javadoc-tool">
        <javadoc-tool name="apt" includes="${apt.includes}"/>
    </target>
410 411


D
duke 已提交
412
    <target name="jtreg-apt" depends="build-apt,-def-jtreg">
413
        <jtreg-tool name="apt" tests="${apt.tests}"/>
D
duke 已提交
414
    </target>
415

D
duke 已提交
416 417 418
    <target name="findbugs-apt" depends="build-apt,-def-findbugs">
        <findbugs-tool name="apt"/>
    </target>
419

D
duke 已提交
420 421
    <target name="apt" depends="build-apt,jtreg-apt,findbugs-apt"/>

422 423 424 425 426 427 428 429 430 431 432
    <!-- Create import JDK stubs -->

    <target name="-create-import-jdk-stubs" depends="-def-genstubs" if="import.jdk.src.dir">
        <mkdir dir="${build.genstubs.dir}"/>
        <genstubs
            srcdir="${import.jdk.src.dir}" destdir="${build.genstubs.dir}"
            includes="${import.jdk.stub.files}"
            fork="true" classpath="${build.toolclasses.dir}:${build.bootstrap.dir}/classes:${ant.home}/lib/ant.jar"
        />
    </target>

D
duke 已提交
433
    <!-- Check targets -->
434

D
duke 已提交
435 436 437
    <target name="-check-boot.java.home" depends="-def-check">
        <check name="bootstrap java" property="boot.java.home" marker="${java.marker}"/>
    </target>
438

D
duke 已提交
439 440 441
    <target name="-check-target.java.home" depends="-def-check">
        <check name="target java" property="target.java.home" marker="${java.marker}"/>
    </target>
442

D
duke 已提交
443 444 445
    <target name="-check-cobertura.home" depends="-def-check">
        <check name="cobertura" property="cobertura.home" marker="cobertura.jar"/>
    </target>
446

D
duke 已提交
447 448 449
    <target name="-check-findbugs.home" depends="-def-check">
        <check name="findbugs" property="findbugs.home" marker="lib/findbugs.jar"/>
    </target>
450

D
duke 已提交
451 452 453
    <target name="-check-jtreg.home" depends="-def-check">
        <check name="jtreg" property="jtreg.home" marker="lib/jtreg.jar"/>
    </target>
454

D
duke 已提交
455 456
    <!-- Ant macro and preset defs -->

457
    <target name="-def-build-tool">
D
duke 已提交
458 459 460
        <macrodef name="build-tool">
            <attribute name="name"/>
            <attribute name="bin.dir" default="${dist.bin.dir}"/>
J
jjg 已提交
461
            <attribute name="java" default="${launcher.java}"/>
D
duke 已提交
462 463 464 465
            <sequential>
                <mkdir dir="@{bin.dir}"/>
                <copy file="${src.bin.dir}/launcher.sh-template" tofile="@{bin.dir}/@{name}">
                    <filterset begintoken="#" endtoken="#">
466 467
                        <filter token="PROGRAM" value="@{name}"/>
                        <filter token="TARGET_JAVA" value="@{java}"/>
D
duke 已提交
468 469 470 471 472 473 474
                    </filterset>
                </copy>
                <chmod file="@{bin.dir}/@{name}" perm="ugo+rx"/>
            </sequential>
        </macrodef>
    </target>

475
    <target name="-def-build-jar">
D
duke 已提交
476 477 478 479 480 481 482 483 484 485 486 487
        <macrodef name="build-jar">
            <attribute name="name"/>
            <attribute name="includes"/>
            <attribute name="classes.dir" default="${build.classes.dir}"/>
            <attribute name="lib.dir" default="${dist.lib.dir}"/>
            <attribute name="jarmainclass" default="com.sun.tools.@{name}.Main"/>
            <attribute name="jarclasspath" default=""/>
            <sequential>
                <mkdir dir="@{lib.dir}"/>
                <jar destfile="@{lib.dir}/@{name}.jar"
                     basedir="@{classes.dir}"
                     includes="@{includes}">
488
                    <manifest>
D
duke 已提交
489 490 491 492 493 494 495 496 497 498 499
                        <attribute name="Main-Class" value="@{jarmainclass}"/>
                        <attribute name="Class-Path" value="@{jarclasspath}"/>
                    </manifest>
                </jar>
            </sequential>
        </macrodef>
    </target>

    <target name="-def-build-classes" depends="-def-pcompile">
        <macrodef name="build-classes">
            <attribute name="includes"/>
500
            <attribute name="excludes" default="${exclude.files} **/package-info.java"/>
D
duke 已提交
501 502
            <attribute name="classes.dir" default="${build.classes.dir}"/>
            <attribute name="gensrc.dir" default="${build.gensrc.dir}"/>
503 504 505 506
            <attribute name="javac.bootclasspath" default="${build.bootstrap.dir}/classes"/>
            <attribute name="bootclasspath.opt" default="${javac.bootclasspath.opt}"/>
            <attribute name="classpath" default="${javac.classpath}"/>
            <attribute name="sourcepath" default="${javac.sourcepath}"/>
507 508 509
            <attribute name="java.home" default="${boot.java.home}"/>
            <attribute name="source" default="${javac.source}"/>
            <attribute name="target" default="${javac.target}"/>
D
duke 已提交
510 511 512
            <attribute name="release" default="${release}"/>
            <attribute name="full.version" default="${full.version}"/>
            <sequential>
513 514 515 516
                <echo level="verbose" message="build-classes: excludes=@{excludes}"/>
                <echo level="verbose" message="build-classes: bootclasspath.opt=@{bootclasspath.opt}"/>
                <echo level="verbose" message="build-classes: classpath=@{classpath}"/>
                <echo level="verbose" message="build-classes: sourcepath=@{sourcepath}"/>
D
duke 已提交
517 518 519 520 521 522
                <mkdir dir="@{gensrc.dir}"/>
                <mkdir dir="@{classes.dir}"/>
                <pcompile srcdir="${src.classes.dir}"
                          destdir="@{gensrc.dir}"
                          includes="@{includes}"/>
                <copy todir="@{gensrc.dir}">
523
                    <fileset dir="${src.classes.dir}" includes="@{includes}"/>
D
duke 已提交
524 525 526 527 528 529 530 531 532 533 534
                    <globmapper from="*.properties-template" to="*.properties"/>
                    <filterset begintoken="$(" endtoken=")">
                        <filter token="JDK_VERSION" value="${jdk.version}"/>
                        <filter token="RELEASE" value="@{release}"/>
                        <filter token="FULL_VERSION" value="@{full.version}"/>
                    </filterset>
                </copy>
                <pcompile srcdir="@{gensrc.dir}"
                          destdir="@{gensrc.dir}"
                          includes="**/*.properties"/>
                <javac fork="true"
535 536
                       executable="@{java.home}/bin/javac"
                       srcdir="${src.classes.dir}:@{gensrc.dir}"
D
duke 已提交
537 538 539
                       destdir="@{classes.dir}"
                       includes="@{includes}"
                       excludes="@{excludes}"
540 541
                       sourcepath="@{sourcepath}"
                       classpath="@{classpath}"
D
duke 已提交
542
                       includeAntRuntime="no"
543 544
                       source="@{source}"
                       target="@{target}"
545
                       debug="${javac.debug}"
D
duke 已提交
546
                       debuglevel="${javac.debuglevel}">
547 548 549 550
                    <compilerarg value="-implicit:none"/>
                    <compilerarg value="-Xprefer:source"/>
                    <compilerarg value="-J-Xbootclasspath/p:@{javac.bootclasspath}"/>
                    <compilerarg line="@{bootclasspath.opt}"/>
D
duke 已提交
551 552 553 554
                    <compilerarg line="${javac.no.jdk.warnings}"/>
                    <compilerarg line="${javac.version.opt}"/>
                    <compilerarg line="${javac.lint.opts}"/>
                </javac>
J
jjg 已提交
555 556
                <copy todir="@{classes.dir}" includeemptydirs="false">
                    <fileset dir="${src.classes.dir}" includes="@{includes}" excludes="@{excludes}">
D
duke 已提交
557 558 559 560 561 562 563 564 565
                        <exclude name="**/*.java"/>
                        <exclude name="**/*.properties"/>
                        <exclude name="**/*-template"/>
                        <exclude name="**/package.html"/>
                    </fileset>
                </copy>
            </sequential>
        </macrodef>
    </target>
566

D
duke 已提交
567 568 569 570
    <target name="-def-build-bootstrap-tool" depends="-check-boot.java.home,-def-build-tool">
        <presetdef name="build-bootstrap-tool">
            <build-tool
                bin.dir="${build.bootstrap.dir}/bin"
571
                java="${boot.java}"/>
D
duke 已提交
572 573
        </presetdef>
    </target>
574

D
duke 已提交
575 576 577
    <target name="-def-build-bootstrap-jar" depends="-def-build-jar">
        <presetdef name="build-bootstrap-jar">
            <build-jar
578 579 580 581 582 583 584 585 586 587
                classes.dir="${build.bootstrap.dir}/classes"
                lib.dir="${build.bootstrap.dir}/lib"/>
        </presetdef>
    </target>

    <target name="-def-build-bootstrap-classes" depends="-def-build-classes">
        <presetdef name="build-bootstrap-classes">
            <build-classes
                source="${boot.javac.source}"
                target="${boot.javac.target}"
D
duke 已提交
588 589
                gensrc.dir="${build.bootstrap.dir}/gensrc"
                classes.dir="${build.bootstrap.dir}/classes"
590 591 592
                javac.bootclasspath=""
                bootclasspath.opt="-Xbootclasspath/p:${build.bootstrap.dir}/classes"
                sourcepath=""
D
duke 已提交
593
                release="${bootstrap.release}"
594 595
                full.version="${bootstrap.full.version}"
                excludes="${require.import.jdk.files} **/package-info.java"/>
D
duke 已提交
596 597
        </presetdef>
    </target>
598

D
duke 已提交
599 600
    <target name="-def-pcompile">
        <mkdir dir="${build.toolclasses.dir}"/>
601
        <javac fork="true"
602 603
               source="${boot.javac.source}"
               target="${boot.javac.target}"
604 605
               executable="${boot.java.home}/bin/javac"
               srcdir="${make.tools.dir}/CompileProperties"
D
duke 已提交
606 607 608
               destdir="${build.toolclasses.dir}/"
               classpath="${ant.home}/lib/ant.jar"/>
        <taskdef name="pcompile"
609
                 classname="CompilePropertiesTask"
D
duke 已提交
610 611
                 classpath="${build.toolclasses.dir}/"/>
    </target>
612

613 614 615 616 617 618 619 620 621 622 623 624 625 626
    <target name="-def-genstubs" depends="build-bootstrap-javac">
        <mkdir dir="${build.toolclasses.dir}"/>
        <javac fork="true"
               source="${boot.javac.source}"
               target="${boot.javac.target}"
               executable="${boot.java.home}/bin/javac"
               srcdir="${make.tools.dir}/GenStubs"
               destdir="${build.toolclasses.dir}/"
               classpath="${build.bootstrap.dir}/classes:${ant.home}/lib/ant.jar"/>
        <taskdef name="genstubs"
                 classname="GenStubs$$Ant"
                 classpath="${build.toolclasses.dir}/"/>
    </target>

D
duke 已提交
627 628 629 630 631 632 633 634 635 636 637
    <target name="-def-javadoc-tool" depends="-check-target.java.home">
        <macrodef name="javadoc-tool">
            <attribute name="name"/>
            <attribute name="includes"/>
            <attribute name="options" default=""/>
            <attribute name="source" default="1.5"/> <!-- FIXME -->
            <sequential>
                <property name="javadoc.options" value=""/> <!-- default, can be overridden per user or per project -->
                <!-- Note: even with this default value, includes
         from src.classes.dir get javadoc'd; see packageset below -->
                <property name="javadoc.packagenames" value="none"/> <!-- default, can be overridden per user or per project -->
638
                <javadoc
D
duke 已提交
639
                    executable="${target.java.home}/bin/javadoc"
640
                    destdir="${build.javadoc.dir}/@{name}"
D
duke 已提交
641
                    source="@{source}"
642 643
                    windowtitle="UNOFFICIAL"
                    failonerror="true"
D
duke 已提交
644
                    use="true"
645
                    author="false"
D
duke 已提交
646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673
                    version="false"
                    packagenames="${javadoc.packagenames}" >
                    <header><![CDATA[<strong>Unofficial Javadoc</strong> generated from developer sources for preview purposes only]]></header>
                    <arg line="@{options}"/>
                    <bootclasspath>
                        <path location="${build.classes.dir}"/>
                        <path location="${target.java.home}/jre/lib/rt.jar"/>
                    </bootclasspath>
                    <sourcepath>
                        <pathelement location="${src.classes.dir}"/>
                    </sourcepath>
                    <!-- XXX just <fileset> (restricted further to **/*.java) and no <packageset> -->
                    <!-- means that {@link some.package} will not work, which is no good. -->
                    <!-- (It correctly skips excluded single classes, but not if packageset is also included, -->
                    <!-- which also causes duplicates in the class index for included files.) -->
                    <packageset dir="${src.classes.dir}" includes="@{includes}">
                        <or>
                            <filename name="java/"/>
                            <filename name="javax/"/>
                            <filename name="com/sun/javadoc/"/>
                            <filename name="com/sun/mirror/"/>
                            <filename name="com/sun/source/"/>
                        </or>
                    </packageset>
                </javadoc>
            </sequential>
        </macrodef>
    </target>
674 675

    <target name="-def-jtreg" unless="jtreg.defined" depends="-check-jtreg.home,-check-target.java.home">
D
duke 已提交
676 677 678 679 680 681 682 683 684 685
        <taskdef name="jtreg" classname="com.sun.javatest.regtest.Main$$Ant">
            <classpath>
                <pathelement location="${jtreg.home}/lib/jtreg.jar"/>
                <pathelement location="${jtreg.home}/lib/javatest.jar"/>
            </classpath>
        </taskdef>
        <macrodef name="jtreg-tool">
            <attribute name="name"/>
            <attribute name="tests"/>
            <attribute name="jdk" default="${target.java.home}"/>
686
            <attribute name="samevm" default="true"/>
D
duke 已提交
687 688 689 690 691 692 693
            <attribute name="verbose" default="summary"/>
            <attribute name="options" default=""/>
            <attribute name="keywords" default="-keywords:!ignore"/>
            <attribute name="jpda.jvmargs" default=""/>
            <sequential>
                <property name="coverage.options" value=""/>    <!-- default -->
                <property name="coverage.classpath" value=""/>    <!-- default -->
694
                <jtreg
D
duke 已提交
695
                    dir="${test.dir}"
696
                    workDir="${build.jtreg.dir}/@{name}/work"
D
duke 已提交
697 698 699 700 701 702 703 704 705 706
                    reportDir="${build.jtreg.dir}/@{name}/report"
                    jdk="@{jdk}"
                    samevm="@{samevm}" verbose="@{verbose}"
                    failonerror="false" resultproperty="jtreg.@{name}.result"
                    javacoptions="-g"
                    vmoptions="${coverage.options} -Xbootclasspath/p:${coverage.classpath}:${build.classes.dir} @{jpda.jvmargs}">
                    <arg line="@{keywords}"/>
                    <arg line="@{options}"/>
                    <arg line="@{tests}"/>
                </jtreg>
707
                <!-- the next two properties are for convenience, when only
D
duke 已提交
708 709
                     a single instance of jtreg will be invoked. -->
                <condition property="jtreg.passed">
710
                    <equals arg1="${jtreg.@{name}.result}" arg2="0"/>
D
duke 已提交
711 712 713 714 715 716 717 718 719 720 721 722 723 724
                </condition>
                <property name="jtreg.report" value="${build.jtreg.dir}/@{name}/report"/>
            </sequential>
        </macrodef>
        <property name="jtreg.defined" value="true"/>
    </target>

    <target name="-def-cobertura" depends="-check-cobertura.home">
        <path id="cobertura.classpath">
            <fileset dir="${cobertura.home}">
                <include name="cobertura.jar"/>
                <include name="lib/**/*.jar"/>
            </fileset>
        </path>
725
        <taskdef classpathref="cobertura.classpath" resource="tasks.properties"/>
D
duke 已提交
726
    </target>
727

D
duke 已提交
728 729 730 731 732 733 734 735 736 737 738 739
    <target name="-def-findbugs" unless="findbugs.defined" depends="-check-findbugs.home">
        <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask">
            <classpath>
                <pathelement location="${findbugs.home}/lib/findbugs.jar"/>
            </classpath>
        </taskdef>
        <macrodef name="findbugs-tool">
            <attribute name="name"/>
            <attribute name="output" default="emacs"/>
            <attribute name="outputFile" default=""/>
            <attribute name="reportLevel" default="high"/>
            <sequential>
740
                <findbugs
D
duke 已提交
741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760
                    home="${findbugs.home}"
                    output="@{output}"
                    outputFile="@{outputFile}"
                    reportLevel="@{reportLevel}"
                    failOnError="false"
                    errorProperty="findbugs.@{name}.errors"
                    warningsProperty="findbugs.@{name}.warnings"
                    jvmargs="-Xmx512M" >
                    <class location="${dist.dir}/lib/@{name}.jar"/>
                    <auxClasspath>
                        <pathelement location="${build.classes.dir}"/>
                    </auxClasspath>
                    <sourcePath>
                        <pathelement location="${src.classes.dir}"/>
                    </sourcePath>
                </findbugs>
            </sequential>
        </macrodef>
        <property name="findbugs.defined" value="true"/>
    </target>
761

D
duke 已提交
762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786
    <target name="-def-check">
        <macrodef name="check">
            <attribute name="name"/>
            <attribute name="property"/>
            <attribute name="marker"/>
            <sequential>
                <fail message="Cannot locate @{name}: please set @{property} to its location">
                    <condition>
                        <not>
                            <isset property="@{property}"/>
                        </not>
                    </condition>
                </fail>
                <fail message="@{name} is not installed in ${@{property}}">
                    <condition>
                        <not>
                            <available file="${@{property}}/@{marker}"/>
                        </not>
                    </condition>
                </fail>
            </sequential>
        </macrodef>
    </target>

    <!-- standard JDK target -->
787
    <target name="sanity"
788
        description="display settings of configuration values">
D
duke 已提交
789 790 791 792 793 794 795 796 797 798 799 800 801 802
        <echo level="info">ant.home = ${ant.home}</echo>
        <echo level="info">boot.java.home = ${boot.java.home}</echo>
        <echo level="info">target.java.home = ${target.java.home}</echo>
        <echo level="info">jtreg.home = ${jtreg.home}</echo>
        <echo level="info">findbugs.home = ${findbugs.home}</echo>
    </target>

    <!-- useful debugging targets -->
    <target name="diagnostics">
        <diagnostics/>
    </target>

    <target name="post-sanity" depends="-def-jtreg,sanity,build"
        description="perform basic validation after a standard build">
803
        <jtreg
D
duke 已提交
804
            dir="make/test"
805
            workDir="${build.jtreg.dir}/post-sanity/work"
D
duke 已提交
806 807 808 809 810
            reportDir="${build.jtreg.dir}/post-sanity/report"
            jdk="${target.java.home}"
            verbose="summary"
            failonerror="false" resultproperty="jtreg.post-sanity.result">
        </jtreg>
811

D
duke 已提交
812 813 814
    </target>
</project>