/[cvs]/jsr166/build.xml
ViewVC logotype

Diff of /jsr166/build.xml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.16 by tim, Fri Dec 13 06:34:04 2002 UTC revision 1.304 by jsr166, Sun Oct 6 17:34:58 2019 UTC
# Line 1  Line 1 
1  <project name="jsr166" default="jar">  <project name="jsr166" default="usage"
2      xmlns:if="ant:if"
3      xmlns:unless="ant:unless"
4      xmlns:ivy="antlib:org.apache.ivy.ant">
5    
6    <description>    <description>
7    ------------------------------------------------------------------------------
8      Build file for JSR-166
9    
10      Build file for JSR-166    Usage: ant [target]
11    
12      Note that junit.jar must be in ${ant.home}/lib for the    See http://gee.cs.oswego.edu/dl/concurrency-interest/index.html for
13      test target to work. [FIXME: This should be automatically    more details.
     enforced by this build file by failing with a message if  
     junit.jar is not in the right place.]  
14    
15      User-specific settings are read from user.properties.
16      See user.properties.sample for an explanation of some useful settings.
17    
18      The repository contains all dependencies except for ant and the JDK
19      itself.  Because the JDK version matters and because different
20      targets require different JDKs, we assume that users have created a
21      hierarchy containing:
22      $HOME/jdk/jdk11
23      $HOME/jdk/jdk12
24      $HOME/jdk/jdk13
25      $HOME/jdk/jdk14
26      where each of the above is a JDK or a symlink to same, and
27      $HOME/jdk/src/jdk11
28      $HOME/jdk/src/jdk12
29      $HOME/jdk/src/jdk13
30      $HOME/jdk/src/jdk14
31      where each of the above is a JDK source tree or a symlink to same.
32    
33      Alternatively, define ant variables thus:
34      ant -Djdk$N.home=... -Djdk$N.src.home=...
35      for $N in 11 .. 14 ...
36    
37      As of 2016-03, the sources in src/main are for jdk9+ only.
38      As of 2019-08, the sources in src/main are for jdk11+ only.
39      As of 2019-10, compatibility support for jdk8 is dropped entirely.
40    ------------------------------------------------------------------------------
41    </description>    </description>
42    
43      <!-- Run 'ant -projecthelp' (default target) -->
44      <target name="usage">
45        <java classname="org.apache.tools.ant.Main">
46          <arg value="-projecthelp" />
47        </java>
48      </target>
49    
50      <!-- HOWTO printf debug: <echo message="prop=${prop}"/> -->
51    
52      <!-- User-specific settings -->
53      <property file="user.properties"/>
54    
55    
56    <!-- Compilation options -->    <!-- Compilation options -->
   <property name="build.sourcelevel"    value="1.5"/>  
57    <property name="build.debug"          value="true"/>    <property name="build.debug"          value="true"/>
58    <property name="build.debuglevel"     value="source,lines,vars"/>    <property name="build.debuglevel"     value="source,lines,vars"/>
59    <property name="build.deprecation"    value="false"/>    <property name="build.deprecation"    value="false"/>
60    <!--    <property name="build.javadoc.access" value="protected"/>
   <property name="build.warnings"       value="true"/>  
   -->  
61    
62    <!-- Build locations -->    <!-- Build locations -->
63    <property name="build.dir"            location="build"/>    <property name="build.dir"                   location="build"/>
64    <property name="build.classes.dir"    location="${build.dir}/classes"/>    <property name="build.classes.dir"           location="${build.dir}/classes"/>
65    <property name="build.testcases.dir"  location="${build.dir}/testcases"/>    <property name="build.testcases.dir"         location="${build.dir}/testcases"/>
66    <property name="build.lib.dir"        location="${build.dir}/lib"/>    <property name="build.loops.dir"             location="${build.dir}/loops"/>
67    <property name="build.ant.dir"        location="${build.dir}/ant"/>  
68    <property name="build.javadocs.dir"   location="${build.dir}/javadocs"/>    <!-- JDK locations -->
69    <property name="build.stripped.dir"   location="${build.dir}/stripped"/>    <property name="jdks.home"  location="${user.home}/jdk"/>
70    <property name="build.reports.dir"    location="${build.dir}/reports"/>  
71    <property name="build.doccheck.dir"   location="${build.dir}/doccheck"/>    <macrodef name="defjdklocations">
72    <property name="build.filter.src.dir" location="${build.dir}/filtersrc"/>      <attribute name="v"/>
73        <sequential>
74        <property name="jdk@{v}.home"     location="${jdks.home}/jdk@{v}"/>
75        <property name="java@{v}"         location="${jdk@{v}.home}/bin/java"/>
76        <property name="javac@{v}"        location="${jdk@{v}.home}/bin/javac"/>
77        <property name="javadoc@{v}"      location="${jdk@{v}.home}/bin/javadoc"/>
78        <property name="jdk@{v}.src.home" location="${jdks.home}/src/jdk@{v}"/>
79        <property name="jdk@{v}.src.dir"  location="${jdk@{v}.src.home}/jdk/src/java.base/share/classes"/>
80        </sequential>
81      </macrodef>
82    
83      <macrodef name="mirror-dir">
84        <attribute name="src"/>
85        <attribute name="dst"/>
86        <sequential>
87        <delete dir="@{dst}"/>
88        <mkdir dir="@{dst}"/>
89        <copy todir="@{dst}" preservelastmodified="true">
90          <fileset dir="@{src}"/>
91        </copy>
92        </sequential>
93      </macrodef>
94    
95      <defjdklocations v="11"/>
96      <defjdklocations v="12"/>
97      <defjdklocations v="13"/>
98      <defjdklocations v="14"/>
99    
100    <!-- Source locations -->    <!-- Source locations -->
101    <property name="src.dir"              location="${basedir}"/>    <property name="src.dir"              location="${basedir}/src/main"/>
102    <property name="test.src.dir"         location="${basedir}/etc/testcases"/>    <property name="test.src.dir"         location="${basedir}/src/test"/>
103    <property name="ant.src.dir"          location="${basedir}/etc/ant"/>    <property name="loops.src.dir"        location="${basedir}/src/loops"/>
104    <property name="stylesheet.dir"       location="${basedir}/etc/xsl"/>    <property name="tck.src.dir"          location="${test.src.dir}/tck"/>
105      <property name="jtreg11.src.dir"      location="${test.src.dir}/jtreg"/>
106      <property name="jtreg12.src.dir"      location="${test.src.dir}/jtreg"/>
107      <property name="jtreg13.src.dir"      location="${test.src.dir}/jtreg"/>
108      <property name="jtreg14.src.dir"      location="${test.src.dir}/jtreg"/>
109      <property name="jtreg.src.dir"        location="${jtreg11.src.dir}"/>
110    <property name="lib.dir"              location="${basedir}/lib"/>    <property name="lib.dir"              location="${basedir}/lib"/>
111    <property name="dist.dir"             location="${basedir}/dist"/>    <property name="dist.dir"             location="${basedir}/dist"/>
112      <property name="topsrc.dir"           location="${basedir}/src"/>
113    
114    <!-- Distribution locations -->    <!-- Javadoc locations -->
115    <property name="dist.javadocs.dir"    location="${dist.dir}/docs"/>    <property name="docs.dir"          location="${build.dir}/docs"/>
116      <property name="dist.docs.dir"     location="${dist.dir}/docs"/>
117    
118    <!-- Jar locations -->    <!-- Jar locations -->
119    <property name="product.jar"          location="${build.lib.dir}/jsr166.jar"/>    <property name="product.jar"      location="${build.dir}/jsr166.jar"/>
120    <property name="javac.jar"            location="${lib.dir}/javac.jar"/>    <property name="junit.jar"        location="${lib.dir}/junit.jar"/>
   <property name="collect.jar"          location="${lib.dir}/collect.jar"/>  
   <property name="junit.jar"            location="${lib.dir}/junit.jar"/>  
   <property name="rt.jar"               location="${java.home}/lib/rt.jar"/>  
   
   <property name="javac.args"           value='-J-Xbootclasspath/p:${javac.jar}'/>  
   
   <path id="javac.bootclasspath">  
     <pathelement location="${collect.jar}"/>  
     <pathelement location="${rt.jar}"/>  
   </path>  
121    
122    <path id="test.classpath">    <!-- Canonical location of jdk docs root, to use with javadoc -Xdocrootparent flag -->
123      <pathelement location="${product.jar}"/>    <!-- Switched to https: in 2017-10 - JDK-8190312 -->
124    </path>    <!-- <property name="java5.docroot.url"  value="https://docs.oracle.com/javase/1.5.0/docs"/> -->
125      <!-- <property name="java6.docroot.url"  value="https://docs.oracle.com/javase/6/docs"/> -->
126      <!-- <property name="java7.docroot.url"  value="https://docs.oracle.com/javase/7/docs"/> -->
127    <!-- Main targets -->    <!-- <property name="java8.docroot.url"  value="https://docs.oracle.com/javase/8/docs"/> -->
128      <!-- The location of jdk early access docs (RIP) -->
129    <target name="compile" depends="init"    <!-- <property name="java11.docroot.url" value="http://download.java.net/java/jdk11/docs"/> -->
130            description="Compiles all sources to build folder">    <!-- <property name="java12.docroot.url" value="https://download.java.net/java/jdk12/docs"/> -->
131      <mkdir dir="${build.classes.dir}"/>    <!-- <property name="java13.docroot.url" value="https://download.java.net/java/early_access/jdk13/docs"/> -->
132      <javac srcdir="${src.dir}"    <property name="java11.docroot.url" value="https://docs.oracle.com/en/java/javase/11/docs"/>
133            destdir="${build.classes.dir}"    <property name="java12.docroot.url" value="https://docs.oracle.com/en/java/javase/12/docs"/>
134              debug="${build.debug}"    <property name="java13.docroot.url" value="https://docs.oracle.com/en/java/javase/13/docs"/>
135         debuglevel="${build.debuglevel}"    <property name="java14.docroot.url" value="https://download.java.net/java/early_access/jdk14/docs"/>
136        deprecation="${build.deprecation}"    <!-- Default jdk doc location (latest stable LTS release seems best) -->
137             source="${build.sourcelevel}"    <property name="java.docroot.url"   value="${java11.docroot.url}"/>
138               fork="true">  
139      <!-- Canonical location of jdk API docs, to use with javadoc link attribute -->
140        <bootclasspath refid="javac.bootclasspath"/>    <property name="java11.api.url"     value="${java11.docroot.url}/api/"/>
141        <compilerarg line="${javac.args} ${build.warnings.option}"/>    <property name="java12.api.url"     value="${java12.docroot.url}/api/"/>
142      <property name="java13.api.url"     value="${java13.docroot.url}/api/"/>
143        <!-- need this because srcdir is basedir! -->    <property name="java14.api.url"     value="${java14.docroot.url}/api/"/>
144        <include name="java/**/*.java"/>    <property name="java.api.url"       value="${java.docroot.url}/api/"/>
145    
146      <!-- Define the "jtreg" task -->
147      <!-- See the docs in "jtreg -onlineHelp" -->
148      <taskdef name="jtreg" classname="com.sun.javatest.regtest.Main$$Ant"
149               classpath="${lib.dir}/jtreg.jar" />
150    
151      <!-- Tck configuration options; see JSR166TestCase.java
152       To profile a single tck test class:
153       ant -Djsr166.profileTests=true -Djsr166.profileThreshold=10 -Djsr166.tckTestClass=CompletableFutureTest tck
154       To stress test a single tck test class:
155       ant -Djsr166.tckTestClass=CountedCompleterTest -Djsr166.runsPerTest=100 tck
156       To stress test a single tck test method:
157       ant -Djsr166.tckTestClass=RecursiveTaskTest -Djsr166.runsPerTest=1000 -Djsr166.methodFilter=testAbnormalInvokeAll3 tck
158      -->
159      <property name="jsr166.tckTestClass"     value="JSR166TestCase"/>
160      <macrodef name="run-tck-tests">
161        <attribute name="tck.src.dir" default="${tck.src.dir}"/>
162        <attribute name="target"/>
163        <attribute name="compile-target" default="@{target}"/>
164        <attribute name="workdir"/>
165        <attribute name="classes"/>
166        <!--
167            <attribute name="jvmflags" default="-XX:+UseParallelGC -XX:-UseBiasedLocking -ea -esa -Djsr166.testImplementationDetails=true"/>
168        -->
169            <attribute name="jvmflags" default="-ea -esa -Djsr166.testImplementationDetails=true"/>
170        <element name="javac-elements" optional="true"/>
171    
172        <sequential>
173    
174        <mkdir dir="@{workdir}/tck-classes"/>
175    
176        <javac srcdir="@{tck.src.dir}"
177               destdir="@{workdir}/tck-classes"
178               debug="${build.debug}"
179               debuglevel="${build.debuglevel}"
180               deprecation="${build.deprecation}"
181               source="@{compile-target}"
182               target="@{compile-target}"
183               classpath="${junit.jar}"
184               includeAntRuntime="false"
185               includeJavaRuntime="false"
186               encoding="ASCII"
187               executable="${javac@{compile-target}}"
188               fork="true">
189    
190          <include name="*.java"/>
191          <compilerarg value="-XDignore.symbol.file=true"/>
192          <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial,-deprecation,-try"/>
193          <compilerarg value="-Xdoclint:reference/private"/>
194          <compilerarg value="--patch-module=java.base=@{classes}"/>
195          <compilerarg line="${build.args}"/>
196          <javac-elements/>
197    
198      </javac>      </javac>
   </target>  
199    
200        <java classname="${jsr166.tckTestClass}"
201              failonerror="true"
202              jvm="${java@{target}}"
203              fork="true">
204            <jvmarg value="--patch-module=java.base=@{classes}"/>
205            <jvmarg value="--add-opens=java.base/java.lang=ALL-UNNAMED"/>
206            <jvmarg value="--add-opens=java.base/java.util=ALL-UNNAMED"/>
207            <jvmarg value="--add-opens=java.base/java.util.concurrent=ALL-UNNAMED"/>
208            <jvmarg value="--add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED"/>
209            <jvmarg value="--add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED"/>
210            <jvmarg line="@{jvmflags}"/>
211            <!-- ant -Dvmoptions="-Xmx8m" -Djsr166.tckTestClass=CompletableFutureTest tck -->
212            <jvmarg line="${vmoptions}" if:set="vmoptions"/>
213    
214            <!-- ant -Djava.util.concurrent.ForkJoinPool.common.parallelism=1 tck -->
215            <syspropertyset id="system-properties-used-by-tck">
216              <propertyref prefix="java.util.concurrent.ForkJoinPool"/>
217              <propertyref prefix="jsr166."/>
218              <propertyref name="test.timeout.factor"/>
219            </syspropertyset>
220    
221            <classpath>
222              <pathelement location="${junit.jar}"/>
223              <pathelement location="@{workdir}/tck-classes"/>
224            </classpath>
225        </java>
226    
227        </sequential>
228      </macrodef>
229    
230      <!-- Define jtreg test sets for different jdk versions -->
231      <!-- ant -Djtreg.test.pattern="**/ConcurrentHashMap/" -->
232      <!-- ant -Djtreg.test.pattern="**/ToArray.java" -->
233      <property name="jtreg.test.pattern" value="**/*.java"/>
234      <macrodef name="defjtregtests">
235        <attribute name="v"/>
236        <sequential>
237          <fileset dir="${jtreg@{v}.src.dir}">
238            <patternset id="jdk@{v}.jtreg.tests">
239              <include name="${jtreg.test.pattern}"/>
240            </patternset>
241          </fileset>
242        </sequential>
243      </macrodef>
244    
245    <target name="jar" depends="compile"    <defjtregtests v="14"/>
246            description="Builds library jar from compiled sources">    <defjtregtests v="13"/>
247      <mkdir dir="${build.lib.dir}"/>    <defjtregtests v="12"/>
248      <jar basedir="${build.classes.dir}"    <defjtregtests v="11"/>
249          destfile="${product.jar}"  
250      />    <!-- ant -Djtreg.flags=-timeoutFactor:4 -->
251    </target>    <property name="jtreg.flags" value=""/>
252    
253      <macrodef name="run-jtreg-tests">
254        <!-- ant -Djtreg11.src.dir=src/test/jtreg/util/concurrent/CompletableFuture jtreg -->
255        <attribute name="target"/>
256        <attribute name="workdir"/>
257        <attribute name="classes"/>
258        <attribute name="verbose" default="${jtreg.verbose}"/>
259        <attribute name="jtregflags" default=""/>
260        <element name="jtreg-elements" optional="true"/>
261    
262        <sequential>
263    
264        <!-- ant -Djtreg.verbose=time,fail,error jtreg -->
265        <property name="jtreg.verbose" value="nopass,fail,error"/>
266    
267        <delete dir="@{workdir}/JTwork"   quiet="true"/>
268        <jtreg dir="${jtreg@{target}.src.dir}"
269               jdk="${jdk@{target}.home}"
270               workDir="@{workdir}/JTwork">
271          <patternset refid="jdk@{target}.jtreg.tests"/>
272          <arg value="-javacoptions:--patch-module=java.base=@{classes}"/>
273          <arg value="-vmoptions:--patch-module=java.base=@{classes}"/>
274          <arg value="-agentvm"/>
275          <arg value="-noreport"/>
276          <arg value="-verbose:@{verbose}"/>
277          <arg value="-vmoptions:-esa -ea"/>
278          <arg value="-automatic"/>
279          <arg value="-k:!ignore"/>
280          <arg line="@{jtregflags}"/>
281          <arg line="${jtreg.flags}"/>
282          <jtreg-elements/>
283        </jtreg>
284        </sequential>
285      </macrodef>
286    
287      <!-- ALoops classpath -->
288      <path id="loops.classpath">
289        <pathelement location="${build.loops.dir}"/>
290      </path>
291    
292      <!-- Support @jls tag, used in jdk8+ javadoc -->
293      <!-- TODO: switch to @jls taglet, as supported by jdk14+ javadoc -->
294      <property name="javadoc.jls.cite" value="The Java&amp;trade; Language Specification"/>
295      <property name="javadoc.jls.option" value="jls:a:See &lt;cite&gt;${javadoc.jls.cite}&lt;/cite&gt;:"/>
296    
297    <target name="test" depends="init, report-tests"    <!-- Main targets -->
           description="Runs all tests"/>  
298    
299      <!-- Default values: may seem strange ... -->
300      <!-- At runtime, target latest LTS, i.e. jdk11 -->
301      <!-- But at build time, target jdk9, for maximal binary portability -->
302      <!-- ButButBut as of 2019-08, target jdk11 at build time -->
303      <!-- Use javadoc12 (but -link to jdk11 api docs!), to get:
304        o override-methods=summary
305        o {@systemProperty ...}
306        o 8211194: issues linking to external documentation (was: missing package-list for JDK10 / JDK11 documentation)
307        o 8202628: javadoc generates bad links in TestModules.java
308        -->
309      <property name="java.runtime.target" value="11"/>
310      <property name="build.main.java" value="${java11}"/>
311      <property name="build.main.javac" value="${javac11}"/>
312      <property name="build.main.javadoc" value="${javadoc12}"/>
313      <property name="build.main.javadoc.source" value="${java.runtime.target}"/>
314    
315      <target name="dists"
316              depends="dist"
317              description="Builds all public jars and docs"/>
318    
319      <target name="compile"
320              depends="configure-compiler"
321              description="Compiles src/main sources to build dir">
322    
323    <target name="checkstyle" depends="filter-src"      <local name="destdir"/>
324            description="Reports on style errors in Java source">      <property name="destdir" value="${build.classes.dir}/java.base"/>
     <taskdef resource="checkstyletask.properties"  
             classpath="${lib.dir}/checkstyle-all-2.4.jar"/>  
325    
326      <checkstyle>      <mkdir dir="${destdir}"/>
       <formatter type="plain"/>  <!-- also available: type="xml" -->  
       <fileset dir="${build.filter.src.dir}" includes="**/*.java"/>  
     </checkstyle>  
   </target>  
327    
328        <javac srcdir="${src.dir}"
329               destdir="${destdir}"
330               debug="${build.debug}"
331               debuglevel="${build.debuglevel}"
332               deprecation="${build.deprecation}"
333               classpath=""
334               includeAntRuntime="false"
335               includeJavaRuntime="false"
336               encoding="ASCII"
337               executable="${build.main.javac}"
338               fork="true">
339    
340          <include name="**/*.java"/>
341          <compilerarg value="--patch-module=java.base=${src.dir}"/>
342          <compilerarg value="-Xprefer:source"/>
343          <compilerarg value="-XDignore.symbol.file=true"/>
344    <!--   Xlint:-removal for jdk12 Unsafe Object -> Reference renaming -->
345          <compilerarg value="-Xlint:all,-removal"/>
346          <compilerarg line="--doclint-format html5"/>
347          <compilerarg value="-Xdoclint:all/protected,reference/private"/>
348          <compilerarg value="-Xdoclint/package:java.util.*"/>
349          <compilerarg value="-Werror"/>
350          <compilerarg line="-Xmaxerrs 1000 -Xmaxwarns 1000"/>
351          <compilerarg line="${build.args}"/>
352    
353    <target name="doccheck" depends="filter-src"      </javac>
           description="Reports on javadoc style errors">  
     <delete dir="${build.doccheck.dir}"/>  
     <mkdir dir="${build.doccheck.dir}"/>  
     <javadoc doclet="com.sun.tools.doclets.doccheck.DocCheck"  
          docletpath="${lib.dir}/doccheck.jar"  
             destdir="${build.doccheck.dir}">  
       <packageset dir="${build.filter.src.dir}">  
         <include name="java/**"/>  
       </packageset>  
     </javadoc>  
354    </target>    </target>
355    
356    
357    <target name="docs" depends="filter-src"    <target name="jar"
358            description="Builds javadocs with custom tags to build folder">            depends="compile"
359      <delete dir="${build.javadocs.dir}"/>            description="Builds library jar for src/main from compiled sources">
360      <mkdir dir="${build.javadocs.dir}"/>      <local name="subdir"/>
361      <javadoc destdir="${build.javadocs.dir}"      <available property="subdir" file="${build.classes.dir}/java.base" type="dir" value="/java.base"/>
362                  link="http://java.sun.com/j2se/1.4.1/docs/api"      <jar destfile="${product.jar}">
363              overview="${src.dir}/intro.html"        <fileset dir="${build.classes.dir}${subdir}"/>
364                source="${build.sourcelevel}">        <manifest>
365            <attribute name="Built-By" value="${user.name}"/>
366        <tag name="revised" description="Last revised:"/>          <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
367        <tag name="spec" description="Specified by:"/>        </manifest>
368        <tag name="editor" description="Last edited by:"/>      </jar>
       <tag name="fixme" description="FIX ME:"/>  
       <packageset dir="${build.filter.src.dir}">  
         <include name="java/**"/>  
       </packageset>  
   
     </javadoc>  
369    </target>    </target>
370    
371    
372    <target name="strip" depends="init">    <target name="docs"
373      <mkdir dir="${build.stripped.dir}"/>            description="Builds javadocs for src/main to dist dir">
374      <javac srcdir="${src.dir}"  
375            destdir="${build.stripped.dir}"      <delete dir="${docs.dir}"/>
376              debug="${build.debug}"      <mkdir dir="${docs.dir}"/>
377         debuglevel="${build.debuglevel}"  
378        deprecation="${build.deprecation}"      <!-- the packagenames="none" hack below prevents scanning the -->
379             source="${build.sourcelevel}"      <!-- sourcepath for packages -->
380               fork="true">  
381    <!-- TODO: sourcepath="${src.dir}:${jdk9.src.dir}" -->
382        <bootclasspath refid="javac.bootclasspath"/>  <!-- TODO: sourcepath="${src.dir}:${jdk9.src.dir}:${jdk9.src.home}/jdk/src/java.logging/share/classes" -->
383        <compilerarg line="${javac.args} ${build.warnings.option} -s"/>  <!-- TODO: sourcepath="${src.dir}:${jdk9.home}/src.zip" -->
384    <!-- TODO: <arg line="-sourcepath ${src.dir}:${jdk9.home}/src.zip"/> -->
385        <!-- need this because srcdir is basedir! -->  <!-- TODO: <arg line="- -module-source-path ${jdk9.home}/src.zip"/> -->
386        <include name="java/**/*.java"/>      <javadoc destdir="${docs.dir}"
387                 packagenames="none"
388      </javac>               link="${java.api.url}"
389                 overview="${src.dir}/intro.html"
390                 access="${build.javadoc.access}"
391                 sourcepath="${src.dir}"
392                 classpath=""
393                 source="${build.main.javadoc.source}"
394                 executable="${build.main.javadoc}">
395    <!-- TODO: JDK-8214571 failonerror = "true" -->
396          <fileset dir="${src.dir}" defaultexcludes="yes">
397            <include name="**/*.java"/>
398          </fileset>
399          <arg line="-Xdocrootparent ${java.docroot.url}"/>
400          <arg line="-Xmaxerrs 1000 -Xmaxwarns 1000"/>
401          <arg value="-XDignore.symbol.file=true"/>
402          <arg value="-html5"/>
403          <arg value="--patch-module=java.base=${src.dir}"/>
404    <!-- old school frames via docs/index.html?overview-summary.html -->
405    <!-- TODO: - -frames no longer a supported option in jdk13+ -->
406          <arg value="--frames"/>
407          <arg value="--override-methods=summary"/>
408          <arg value="-tag"/> <arg value="${javadoc.jls.option}"/>
409          <arg value="-tag"/> <arg value="implSpec:a:Implementation Requirements:"/>
410          <arg value="-tag"/> <arg value="implNote:a:Implementation Note:"/>
411          <arg value="-tag"/> <arg value="apiNote:a:API Note:"/>
412    <!-- tags added in jdk9: currently unused -->
413    <!--  <arg value="-tag"/> <arg value="revised:X"/> -->
414    <!--  <arg value="-tag"/> <arg value="spec:X"/> -->
415        </javadoc>
416    </target>    </target>
417    
418    
419    <target name="dist" depends="init, dist-clean, dist-jar, dist-docs"    <target name="dist"
420              depends="dist-clean, dist-jar, dist-docs"
421            description="Puts all distributable products in single hierarchy"/>            description="Puts all distributable products in single hierarchy"/>
422    
423    
424    <target name="clean"    <target name="clean"
425            description="Removes all build products">            description="Removes all build products">
426      <delete dir="${build.dir}"/>      <delete dir="${build.dir}"/>
     <delete dir="${build.classes.dir}"/>  
     <delete dir="${build.lib.dir}"/>  
427    </target>    </target>
428    
429    
430    <target name="dist-clean"    <target name="dist-clean"
431            description="Removes all build and distribution products">            description="Removes all build and distribution products">
432        <delete dir="${build.dir}"/>
433      <delete dir="${dist.dir}"/>      <delete dir="${dist.dir}"/>
434    </target>    </target>
435    
436    
437    <!-- Anthill targets -->    <target name="dist-jar"
438              depends="clean, jar">
   <!-- Should really run the tests instead of just the jar target -->  
   <target name="anthill-build" depends="jar, docs, dist-docs"  
           description="Build the jar and both the external and internal docs"/>  
   
   <target name="anthill-publish">  
     <copy todir="${deployDir}/docs/private">  
       <fileset dir="${build.javadocs.dir}"/>  
     </copy>  
     <copy todir="${deployDir}/docs/public">  
       <fileset dir="${dist.javadocs.dir}"/>  
     </copy>  
   </target>  
   
   
   <!-- Internal targets -->  
   
   <target name="set-warnings-if" if="build.warnings">  
     <property name="build.warnings.option" value="-warnunchecked"/>  
   </target>  
   
   
   <target name="set-warnings-unless" unless="build.warnings">  
     <property name="build.warnings.option" value=""/>  
   </target>  
   
   
   <target name="init" depends="set-warnings-if, set-warnings-unless">  
     <!-- Version is kept in a separate file -->  
     <loadfile property="version" srcFile="version.properties"/>  
     <echo>Building JSR-166 version ${version}</echo>  
   </target>  
   
   
   <target name="dist-jar" depends="clean, jar">  
439      <copy file="${product.jar}" todir="${dist.dir}"/>      <copy file="${product.jar}" todir="${dist.dir}"/>
440    </target>    </target>
441    
442      <target name="dist-docs"
443    <target name="dist-docs" depends="filter-src"            depends="clean, docs">
444            description="Builds javadocs without custom tags to dist folder">      <mirror-dir src="${docs.dir}" dst="${dist.docs.dir}"/>
445      <delete dir="${dist.javadocs.dir}"/>    </target>
446      <mkdir dir="${dist.javadocs.dir}"/>  
447      <javadoc destdir="${dist.javadocs.dir}"    <target name="tck"
448                  link="http://java.sun.com/j2se/1.4.1/docs/api"            depends="jar"
449              overview="${src.dir}/intro.html"            description="Runs tck tests for src/main directly">
450                source="${build.sourcelevel}">  
451        <run-tck-tests
452        <packageset dir="${build.filter.src.dir}">        target="${java.runtime.target}"
453          <include name="java/**"/>        workdir="${build.dir}"
454        </packageset>        classes="${product.jar}">
455          <javac-elements>
456      </javadoc>          <compilerarg value="-Werror"/>
457    </target>        </javac-elements>
458        </run-tck-tests>
459      </target>
460    <target name="compile-ant-filter" depends="init">  
461      <mkdir dir="${build.ant.dir}"/>    <target name="tck-parallelism-1"
462      <javac srcdir="${ant.src.dir}"            description="Runs tck with common pool parallelism 1">
463            destdir="${build.ant.dir}"      <antcall target="tck">
464             source="1.4"        <param name="java.util.concurrent.ForkJoinPool.common.parallelism" value="1"/>
465      />      </antcall>
466      </target>
467    
468      <target name="tck-parallelism-0"
469              description="Runs tck with common pool parallelism 0">
470        <antcall target="tck">
471          <param name="java.util.concurrent.ForkJoinPool.common.parallelism" value="0"/>
472        </antcall>
473      </target>
474    
475      <target name="tck-security-manager"
476              description="Runs tck with a security manager">
477        <antcall target="tck">
478          <param name="jsr166.useSecurityManager" value="true"/>
479        </antcall>
480      </target>
481    
482      <target name="jtreg"
483              depends="jar"
484              description="Runs jtreg tests for src/main using the jtreg ant task">
485        <run-jtreg-tests
486           target="${java.runtime.target}"
487           workdir="${build.dir}"
488           classes="${product.jar}"/>
489      </target>
490    
491      <target name="test"
492              depends="tck, tck-parallelism-1, tck-parallelism-0, jtreg"
493              description="Runs tck and jtreg tests for src/main"/>
494    
495      <target name="test-version-permutations"
496              depends="test11, test12, test13, test14, test11-12, test11-13, test11-14, clean, test, docs">
497      </target>
498    
499      <target name="test11">
500        <antcall target="clean"/>
501        <antcall>
502          <param name="java.runtime.target" value="11"/>
503          <param name="build.main.javac" value="${javac11}"/>
504          <param name="build.main.javadoc" value="${javadoc12}"/>
505          <param name="build.main.javadoc.source" value="11"/>
506          <target name="test"/>
507          <target name="docs"/>
508        </antcall>
509      </target>
510    
511      <target name="test12">
512        <antcall target="clean"/>
513        <antcall>
514          <param name="java.runtime.target" value="12"/>
515          <param name="build.main.javac" value="${javac12}"/>
516          <param name="build.main.javadoc" value="${javadoc12}"/>
517          <param name="build.main.javadoc.source" value="12"/>
518          <target name="test"/>
519          <target name="docs"/>
520        </antcall>
521      </target>
522    
523      <target name="test13">
524        <antcall target="clean"/>
525        <antcall>
526          <param name="java.runtime.target" value="13"/>
527          <param name="build.main.javac" value="${javac13}"/>
528          <param name="build.main.javadoc" value="${javadoc13}"/>
529          <param name="build.main.javadoc.source" value="13"/>
530          <target name="test"/>
531          <target name="docs"/>
532        </antcall>
533      </target>
534    
535      <target name="test14">
536        <antcall target="clean"/>
537        <antcall>
538          <param name="java.runtime.target" value="14"/>
539          <param name="build.main.javac" value="${javac14}"/>
540          <param name="build.main.javadoc" value="${javadoc14}"/>
541          <param name="build.main.javadoc.source" value="14"/>
542          <target name="test"/>
543          <target name="docs"/>
544        </antcall>
545      </target>
546    
547      <target name="test11-12">
548        <antcall target="clean"/>
549        <antcall>
550          <param name="java.runtime.target" value="12"/>
551          <param name="build.main.javac" value="${javac11}"/>
552          <param name="build.main.javadoc" value="${javadoc12}"/>
553          <param name="build.main.javadoc.source" value="11"/>
554          <target name="test"/>
555          <target name="docs"/>
556        </antcall>
557      </target>
558    
559      <target name="test11-13">
560        <antcall target="clean"/>
561        <antcall>
562          <param name="java.runtime.target" value="13"/>
563          <param name="build.main.javac" value="${javac11}"/>
564          <param name="build.main.javadoc" value="${javadoc13}"/>
565          <param name="build.main.javadoc.source" value="11"/>
566          <target name="test"/>
567          <target name="docs"/>
568        </antcall>
569      </target>
570    
571      <target name="test11-14">
572        <antcall target="clean"/>
573        <antcall>
574          <param name="java.runtime.target" value="14"/>
575          <param name="build.main.javac" value="${javac11}"/>
576          <param name="build.main.javadoc" value="${javadoc14}"/>
577          <param name="build.main.javadoc.source" value="11"/>
578          <target name="test"/>
579          <target name="docs"/>
580        </antcall>
581      </target>
582    
583    
584      <target name="configure-compiler">
585        <fail message="ant version too old">
586          <condition> <not> <antversion atleast="1.9.1"/> </not> </condition>
587        </fail>
588    
589        <property name="unchecked.option" value="-Xlint:unchecked"/>
590    
591        <condition property="warnunchecked.arg" value="${unchecked.option}">
592          <istrue value="${build.warnunchecked}"/>
593        </condition>
594    
595        <property name="warnunchecked.arg" value=""/>
596    
597    
598        <!-- Common options in javac invocations -->
599        <property name="build.args" value="${warnunchecked.arg}"/>
600    
601      </target>
602    
603    
604      <target name="compile-test-loops" depends="jar"
605              description="Compiles all the perf tests in src/test/loops">
606    
607        <mkdir dir="${build.dir}/test/loops"/>
608    
609        <javac srcdir="${basedir}/src/test/loops"
610               destdir="${build.dir}/test/loops"
611               debug="${build.debug}"
612               debuglevel="${build.debuglevel}"
613               deprecation="${build.deprecation}"
614               includeAntRuntime="false"
615               includeJavaRuntime="false"
616               encoding="ASCII"
617               executable="${build.main.javac}"
618               fork="true">
619    
620          <include name="*.java"/>
621          <compilerarg value="-XDignore.symbol.file=true"/>
622          <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial,-deprecation"/>
623          <compilerarg value="--patch-module=java.base=${src.dir}"/>
624          <compilerarg line="${build.args}"/>
625        </javac>
626    </target>    </target>
627    
628    
629    <target name="filter-src" depends="compile-ant-filter">    <!-- old branches no longer maintained.  build support deleted -->
630      <mkdir dir="${build.filter.src.dir}"/>    <!-- jsr166 4jdk8; (no longer maintained as of 2019-10) -->
631      <copy todir="${build.filter.src.dir}">    <!-- jsr166 4jdk7 (no longer maintained) -->
632        <fileset dir="${src.dir}">    <!-- jsr166x (no longer maintained) -->
633          <include name="java/**/*.java"/>    <!-- jsr166y (no longer maintained) -->
634        </fileset>    <!-- extra166y (no longer maintained) -->
635        <filterchain>    <!-- jsr166e (no longer maintained) -->
636          <filterreader classname="jsr166.ant.filters.ReplaceFilter"  
637                        classpath="${build.ant.dir}">  <!-- Find buglets that can be detected by static build tools -->
638            <!--  
639             # These arguments are to get rid of angle-bracketed type  <!--   <target name="lint"> -->
640             # parameters so that javadoc can run on the result. The  <!--     <antcall target="dists"> -->
641             # following heuristic that seems to work:  <!--       <param name="build.javadoc.access" value="protected"/> -->
642             #  <!--     </antcall> -->
643             # For all lines not starting with space(s)-asterisk-space(s),  <!--   </target> -->
644             #   replace <something> with a space, where there may be more  
645             #   than one right angle bracket at the end, and "something"  <!-- Generates all doclint warnings, even for private methods (rarely useful) -->
646             #   must not contain parens or pipes. (This may need some    <target name="doclint-private">
647             #   tweaking.)      <antcall target="dist">
648             -->        <param name="build.javadoc.access" value="private"/>
649            <param name="notmatching" value="^\s+\*\s.*$"/>      </antcall>
           <param name="pattern" value="&lt;[^|>()]+?>+"/>  
           <param name="replacement" value=" "/>  
         </filterreader>  
         <filterreader classname="jsr166.ant.filters.ReplaceFilter"  
                       classpath="${build.ant.dir}">  
           <!--  
            # These arguments are to uncomment lines beginning with  
            # "//@" so that javadoc can see imports that are needed  
            # to resolve links but that shouldn't be in the compiled  
            # code.  
            -->  
           <param name="matching" value="^//@.*$"/>  
           <param name="pattern" value="^//@"/>  
           <param name="replacement" value=""/>  
         </filterreader>  
       </filterchain>  
     </copy>  
650    </target>    </target>
651    
652    
653    <target name="compile-tests" depends="jar">  <!-- ==============================================================
654      <mkdir dir="${build.testcases.dir}"/>    Experimental errorprone support
655      <javac srcdir="${test.src.dir}"    https://errorprone.info
656            destdir="${build.testcases.dir}"    https://errorprone.info/docs/installation
657              debug="${build.debug}"    https://github.com/google/error-prone/issues/1143
658         debuglevel="${build.debuglevel}"  =================================================================== -->
659        deprecation="${build.deprecation}"    <path id="errorprone.processorpath.path">
660             source="${build.sourcelevel}"      <pathelement location="${lib.dir}/error_prone_core-2.3.2-with-dependencies.jar"/>
661               fork="true">      <pathelement location="${lib.dir}/dataflow-2.5.7.jar"/>
662        <pathelement location="${lib.dir}/javacutil-2.5.7.jar"/>
663        <bootclasspath refid="javac.bootclasspath"/>      <pathelement location="${lib.dir}/jFormatString-3.0.0.jar"/>
664        <compilerarg line="${javac.args} ${build.warnings.option}"/>    </path>
665        <classpath refid="test.classpath"/>    <property name="errorprone.processorpath" refid="errorprone.processorpath.path" />
666        <include name="**/*Test.java"/>    <property name="errorprone.jsr166.user.flags" value=""/>
667      <property name="errorprone.jsr166.flags"
668                value="-Xep:HashtableContains:OFF
669                       -Xep:JdkObsolete:OFF
670                       -Xep:MissingOverride:OFF
671                       -Xep:MissingFail:OFF
672                       -Xep:ThreadPriorityCheck:OFF
673                       -Xep:MixedArrayDimensions:ERROR
674                       -Xep:RemoveUnusedImports:ERROR
675                       -Xep:EmptyIf:ERROR
676                       -Xep:MultipleTopLevelClasses:ERROR
677                       -Xep:ClassName:ERROR
678                       -Xep:LongLiteralLowerCaseSuffix:ERROR
679                       -Xep:RedundantThrows:ERROR
680                       -Xep:IdentityBinaryExpression:WARN
681                       -Xep:ConstructorInvokesOverridable:WARN
682                       -Xep:MethodCanBeStatic:WARN
683                       ${errorprone.jsr166.user.flags}"/>
684      <!-- -Xep:WildcardImport:ERROR -->
685      <property name="errorprone.jsr166.test.flags"
686                value="-Xep:StringSplitter:OFF
687                       -Xep:BoxedPrimitiveConstructor:OFF
688                       -Xep:ModifyingCollectionWithItself:OFF"/>
689      <!-- ant -emacs errorprone |& grep -EA1 '(warning|error):|warnings' -->
690      <target name="errorprone"
691              depends="clean, configure-compiler"
692              description="Run errorprone over jsr166 source code (experimental)">
693    
694        <local name="destdir"/>
695        <property name="destdir" value="${build.classes.dir}/java.base"/>
696        <mkdir dir="${destdir}"/>
697    
698        <javac srcdir="${src.dir}"
699               destdir="${destdir}"
700               debug="${build.debug}"
701               debuglevel="${build.debuglevel}"
702               deprecation="${build.deprecation}"
703               classpath=""
704               includeAntRuntime="false"
705               includeJavaRuntime="false"
706               encoding="ASCII"
707               executable="${build.main.javac}"
708               fork="true">
709    
710          <include name="**/*.java"/>
711          <!-- Needed to silence -Xep:FutureReturnValueIgnored -->
712          <compilerarg value="-J--illegal-access=permit"/>
713          <compilerarg value="-XDcompilePolicy=simple"/>
714          <compilerarg value="-processorpath"/>
715          <compilerarg pathref="errorprone.processorpath.path"/>
716          <compilerarg value="-Xplugin:ErrorProne
717                              ${errorprone.jsr166.flags}"/>
718          <compilerarg value="--patch-module=java.base=${src.dir}"/>
719          <compilerarg value="-Xprefer:source"/>
720          <compilerarg value="-XDignore.symbol.file=true"/>
721          <compilerarg value="-Xlint:all"/>
722          <compilerarg value="-Xdoclint:all/protected,reference/private"/>
723          <compilerarg line="-Xmaxerrs 3000 -Xmaxwarns 3000"/>
724          <compilerarg line="${build.args}"/>
725      </javac>      </javac>
   </target>  
   
   
   <target name="run-tests" depends="compile-tests">  
     <mkdir dir="${build.reports.dir}"/>  
     <junit printsummary="true"  
              showoutput="true"  
           errorProperty="junit.failed"  
         failureProperty="junit.failed"  
                     dir="${build.reports.dir}"  
                    fork="true">  
   
       <jvmarg value="-Xbootclasspath/p:${product.jar}"/>  
726    
727        <jar destfile="${product.jar}">
728          <fileset dir="${destdir}"/>
729        </jar>
730    
731        <run-tck-tests
732          target="${java.runtime.target}"
733          workdir="${build.dir}"
734          classes="${product.jar}">
735          <javac-elements>
736            <!-- Needed to silence -Xep:FutureReturnValueIgnored -->
737            <compilerarg value="-J--illegal-access=permit"/>
738            <compilerarg value="-XDcompilePolicy=simple"/>
739            <compilerarg line="-processorpath ${errorprone.processorpath}"/>
740            <compilerarg value="-Xplugin:ErrorProne
741                                ${errorprone.jsr166.flags}
742                                ${errorprone.jsr166.test.flags}"/>
743            <compilerarg line="-Xmaxerrs 3000 -Xmaxwarns 3000"/>
744          </javac-elements>
745        </run-tck-tests>
746      </target>
747    
748      <!-- ant -emacs errorprone-jtreg |& grep -EA1 '(warning|error):' -->
749      <!-- -XDcompilePolicy=simple or byfile avoids confusing UnusedImports -->
750      <target name="errorprone-jtreg"
751              depends="jar"
752              description="Run errorprone over jtreg tests (experimental)">
753    
754        <run-jtreg-tests
755           target="${java.runtime.target}"
756           workdir="${build.dir}"
757           classes="${product.jar}"
758           verbose="all">
759          <jtreg-elements>
760            <arg value="-javacoption:-XDcompilePolicy=simple"/>
761            <arg value="-javacoption:-processorpath"/>
762            <arg value="-javacoption:${errorprone.processorpath}"/>
763            <arg value="-javacoption:-Xplugin:ErrorProne
764                                ${errorprone.jsr166.flags}
765                                ${errorprone.jsr166.test.flags}
766                                -Xep:MultipleTopLevelClasses:WARN
767                                -Xep:NonAtomicVolatileUpdate:OFF"/>
768          </jtreg-elements>
769        </run-jtreg-tests>
770      </target>
771    
772    
773    <!-- ==============================================================
774      Running guava tests against jsr166 code
775    =================================================================== -->
776    
777    <!-- <ivy:cachepath pathid="lib.path.id" inline="true" conf="*" -->
778    <!--   organisation="com.google.guava" module="guava-testlib" revision="21.0"/> -->
779    <!-- <property name="guava.version" value="21.0"/> -->
780    
781    <!-- HOWTO debug print a path id -->
782    <!-- <pathconvert property="guava.testlib.classpath" refid="guava.testlib.classpath" /> -->
783    <!-- <echo message="guava.testlib.classpath=${guava.testlib.classpath}"/> -->
784    
785    <!-- <ivy:retrieve pathid="guava.tests.classpath" type="jar" inline="true" conf="*" pattern="${lib.dir}/[type]/[artifact].[ext]" -->
786    <!--   organisation="com.google.guava" module="guava-tests"/> -->
787    <!-- <get src="http://repo2.maven.org/maven2/com/google/guava/guava-tests/${guava.version}/guava-tests-${guava.version}-tests.jar" -->
788    <!--   dest="${lib.dir}/jar/guava-tests-tests.jar" usetimestamp="true"/> -->
789    <!--     <ivy:cachepath pathid="lib.path.id" inline="true" conf="*" type="*" -->
790    <!--       organisation="com.google.guava" module="guava-testlib" revision="${guava.version}"/> -->
791    
792    <!-- <test name="com.google.common.collect.testing.TestsForQueuesInJavaUtil"/> -->
793    <!-- <test name="com.google.common.collect.testing.TestsForListsInJavaUtil"/> -->
794    <!-- <test name="com.google.common.collect.testing.TestsForSetsInJavaUtil"/> -->
795    <!-- <test name="com.google.common.collect.testing.TestsForMapsInJavaUtil"/> -->
796    
797    <!-- <ivy:retrieve pathid="guava.testlib.classpath" -->
798    <!--   type="*" inline="true" conf="*(private),*(public)" -->
799    <!--   pattern="${guava.dir}/[artifact].[ext]" -->
800    <!--   organisation="com.google.guava" module="guava-testlib"/> -->
801    
802    <!-- Work around bug below by downloading guava-testlib-tests.jar "by hand": -->
803    <!-- https://issues.apache.org/jira/browse/IVY-1444 -->
804    <!-- maven tests artifacts cannot be downloaded because they are mapped to private configurations -->
805    
806      <target name="init-ivy">
807        <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/2.4.0/ivy-2.4.0.jar"
808             dest="${build.dir}/ivy.jar" usetimestamp="true" skipexisting="true"/>
809        <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant"
810                 classpath="${build.dir}/ivy.jar"/>
811      </target>
812    
813      <target name="guava-tests" depends="jar, init-ivy"
814              description="Guava tests run against jsr166 collections">
815        <property name="guava.dir" value="${build.dir}/guava-testlib"/>
816        <mkdir dir="${guava.dir}"/>
817        <ivy:retrieve pathid="guava.testlib.classpath"
818          type="jar,bundle" inline="true" conf="default,master"
819          pattern="${guava.dir}/[artifact].[ext]"
820          organisation="com.google.guava" module="guava-testlib"/>
821        <property name="guava.version" value="21.0"/>
822        <get src="http://repo2.maven.org/maven2/com/google/guava/guava-testlib/${guava.version}/guava-testlib-${guava.version}-tests.jar"
823             dest="${guava.dir}/guava-testlib-tests.jar" usetimestamp="true"/>
824        <junit printsummary="true" showoutput="true" haltonfailure="true"
825               jvm="${build.main.java}" fork="true">
826          <jvmarg line="-ea -esa --patch-module=java.base=${product.jar}"/>
827          <formatter type="brief"/>
828        <classpath>        <classpath>
829          <!-- <path refid="test.classpath"/> -->          <pathelement location="${guava.dir}/guava-testlib-tests.jar"/>
830          <pathelement location="${build.testcases.dir}"/>          <path refid="guava.testlib.classpath"/>
831        </classpath>        </classpath>
832    
833        <formatter type="xml"/>        <!-- "6" in "OpenJdk6Tests" misleadingly means "6+" -->
834          <test name="com.google.common.collect.testing.OpenJdk6Tests"/>
       <batchtest todir="${build.reports.dir}">  
         <fileset dir="${test.src.dir}">  
           <include name="**/*Test.java"/>  
         </fileset>  
       </batchtest>  
   
835      </junit>      </junit>
836    </target>    </target>
837    
   
   <target name="report-tests" depends="run-tests">  
     <!-- Sets junit.report.format to frames if Xalan is present,  
          otherwise sets it to noframes. -->  
     <available property="junit.report.format"  
                   value="frames"  
               classname="org.apache.xalan.lib.Redirect"  
     />  
     <property name="junit.report.format" value="noframes"/>  
   
     <junitreport todir="${build.reports.dir}">  
       <fileset dir="${build.reports.dir}">  
         <include name="TEST-*.xml"/>  
       </fileset>  
       <report styledir="${stylesheet.dir}"  
                 format="${junit.report.format}"  
                  todir="${build.reports.dir}"  
       />  
     </junitreport>  
   
     <fail message="Test Cases Failed" if="junit.failed"/>  
   </target>  
   
   
838  </project>  </project>

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.304

dl@cs.oswego.edu
ViewVC Help
Powered by ViewVC 1.1.27