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

Diff of /jsr166/build.xml

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

revision 1.154 by jsr166, Mon Jun 16 15:55:54 2014 UTC revision 1.293 by jsr166, Thu Dec 13 01:15:07 2018 UTC
# Line 1  Line 1 
1  <project name="jsr166" default="usage">  <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  ------------------------------------------------------------------------------  ------------------------------------------------------------------------------
# Line 6  Line 9 
9    
10    Usage: ant [target]    Usage: ant [target]
11    
12      See http://gee.cs.oswego.edu/dl/concurrency-interest/index.html for
13      more details.
14    
15    User-specific settings are read from user.properties.    User-specific settings are read from user.properties.
16    See user.properties.sample for an explanation of some useful settings.    See user.properties.sample for an explanation of some useful settings.
17    
# Line 13  Line 19 
19    itself.  Because the JDK version matters and because different    itself.  Because the JDK version matters and because different
20    targets require different JDKs, we assume that users have created a    targets require different JDKs, we assume that users have created a
21    hierarchy containing:    hierarchy containing:
   $HOME/jdk/jdk6  
   $HOME/jdk/jdk7  
22    $HOME/jdk/jdk8    $HOME/jdk/jdk8
23    $HOME/jdk/jdk9    $HOME/jdk/jdk9
24      $HOME/jdk/jdk10
25      $HOME/jdk/jdk11
26      $HOME/jdk/jdk12
27      $HOME/jdk/jdk13
28    where each of the above is a JDK or a symlink to same, and    where each of the above is a JDK or a symlink to same, and
   $HOME/jdk/src/jdk6  
   $HOME/jdk/src/jdk7  
29    $HOME/jdk/src/jdk8    $HOME/jdk/src/jdk8
30    $HOME/jdk/src/jdk9    $HOME/jdk/src/jdk9
31      $HOME/jdk/src/jdk10
32      $HOME/jdk/src/jdk11
33      $HOME/jdk/src/jdk12
34      $HOME/jdk/src/jdk13
35    where each of the above is a complete JDK source tree    where each of the above is a complete JDK source tree
36    (e.g. mercurial forest) or a symlink to same.    (e.g. mercurial forest) or a symlink to same.
37    
38      Alternatively, define ant variables thus:
39      ant -Djdk$N.home=... -Djdk$N.src.home=...
40      for $N in 8 .. 13 ...
41    
42      As of 2016-03, the sources in src/main are for jdk9+ only.
43  ------------------------------------------------------------------------------  ------------------------------------------------------------------------------
44    </description>    </description>
45    
46    <!-- Display main targets by running 'ant -projecthelp' -->    <!-- Run 'ant -projecthelp' (default target) -->
47    <target name="usage">    <target name="usage">
48      <java classname="org.apache.tools.ant.Main">      <java classname="org.apache.tools.ant.Main">
49        <arg value="-projecthelp" />        <arg value="-projecthelp" />
50      </java>      </java>
51    </target>    </target>
52    
53      <!-- HOWTO printf debug: <echo message="prop=${prop}"/> -->
54    
55    <!-- User-specific settings -->    <!-- User-specific settings -->
56    <property file="user.properties"/>    <property file="user.properties"/>
57    
58    
59    <!-- Compilation options -->    <!-- Compilation options -->
   <property name="build.sourcelevel"    value="6"/>  
60    <property name="build.debug"          value="true"/>    <property name="build.debug"          value="true"/>
61    <property name="build.debuglevel"     value="source,lines,vars"/>    <property name="build.debuglevel"     value="source,lines,vars"/>
62    <property name="build.deprecation"    value="false"/>    <property name="build.deprecation"    value="false"/>
63    <property name="build.javadoc.access" value="protected"/>    <property name="build.javadoc.access" value="protected"/>
64    
   <!-- Tck options; see JSR166TestCase.java -->  
   <!-- ant -Djsr166.profileTests=true -Djsr166.runsPerTest=100 test-tck -->  
   <property name="jsr166.profileTests"     value="false"/>  
   <property name="jsr166.profileThreshold" value="100"/>  
   <property name="jsr166.runsPerTest"      value="1"/>  
   <!-- Allow running an individual tck test class -->  
   <!-- ant -Djsr166.tckTestClass=CountedCompleterTest -Djsr166.runsPerTest=100 test-tck -->  
   <property name="jsr166.tckTestClass"     value="JSR166TestCase"/>  
   
65    <!-- Build locations -->    <!-- Build locations -->
66    <property name="build.dir"                   location="build"/>    <property name="build.dir"                   location="build"/>
67    <property name="build.classes.dir"           location="${build.dir}/classes"/>    <property name="build.classes.dir"           location="${build.dir}/classes"/>
68    <property name="build.testcases.dir"         location="${build.dir}/testcases"/>    <property name="build.testcases.dir"         location="${build.dir}/testcases"/>
69    <property name="build.loops.dir"             location="${build.dir}/loops"/>    <property name="build.loops.dir"             location="${build.dir}/loops"/>
   <property name="build.reports.dir"           location="${build.dir}/reports"/>  
70    
71    <property name="build.4jdk7.dir"             location="${build.dir}/jsr166-4jdk7"/>    <property name="build.4jdk7.dir"             location="${build.dir}/jsr166-4jdk7"/>
72    <property name="build.4jdk7.classes.dir"     location="${build.4jdk7.dir}/classes"/>    <property name="build.4jdk7.classes.dir"     location="${build.4jdk7.dir}/classes"/>
73    <property name="build.4jdk7.tck.classes.dir" location="${build.4jdk7.dir}/tck-classes"/>    <property name="build.4jdk7.tck.classes.dir" location="${build.4jdk7.dir}/tck-classes"/>
74    <property name="build.4jdk7.docs.dir"        location="${build.4jdk7.dir}/docs"/>    <property name="build.4jdk7.docs.dir"        location="${build.4jdk7.dir}/docs"/>
75    
76      <property name="build.4jdk8.dir"             location="${build.dir}/jsr166-4jdk8"/>
77      <property name="build.4jdk8.classes.dir"     location="${build.4jdk8.dir}/classes"/>
78      <property name="build.4jdk8.tck.classes.dir" location="${build.4jdk8.dir}/tck-classes"/>
79      <property name="build.4jdk8.docs.dir"        location="${build.4jdk8.dir}/docs"/>
80    
81    <property name="build.jsr166x.dir"           location="${build.dir}/jsr166x"/>    <property name="build.jsr166x.dir"           location="${build.dir}/jsr166x"/>
82    <property name="build.jsr166y.dir"           location="${build.dir}/jsr166y"/>    <property name="build.jsr166y.dir"           location="${build.dir}/jsr166y"/>
83    <property name="build.jsr166e.dir"           location="${build.dir}/jsr166e"/>    <property name="build.jsr166e.dir"           location="${build.dir}/jsr166e"/>
# Line 83  Line 94 
94    <macrodef name="defjdklocations">    <macrodef name="defjdklocations">
95      <attribute name="v"/>      <attribute name="v"/>
96      <sequential>      <sequential>
97      <property name="jdk@{v}.home"   location="${jdks.home}/jdk@{v}"/>      <property name="jdk@{v}.home"     location="${jdks.home}/jdk@{v}"/>
98      <property name="java@{v}"       location="${jdk@{v}.home}/bin/java"/>      <property name="java@{v}"         location="${jdk@{v}.home}/bin/java"/>
99      <property name="javac@{v}"      location="${jdk@{v}.home}/bin/javac"/>      <property name="javac@{v}"        location="${jdk@{v}.home}/bin/javac"/>
100      <property name="javadoc@{v}"    location="${jdk@{v}.home}/bin/javadoc"/>      <property name="javadoc@{v}"      location="${jdk@{v}.home}/bin/javadoc"/>
101      <property name="jdk@{v}src.dir" location="${jdks.home}/src/jdk@{v}/jdk/src/share/classes"/>      <property name="jdk@{v}.src.home" location="${jdks.home}/src/jdk@{v}"/>
102        <local name="have.java.base"/>
103        <available property="have.java.base"
104          file="${jdk@{v}.src.home}/jdk/src/java.base/share/classes" type="dir"/>
105        <property name="jdk@{v}.src.dir" location="${jdk@{v}.src.home}/jdk/src/java.base/share/classes"
106          if:set="have.java.base"/>
107        <property name="jdk@{v}.src.dir" location="${jdk@{v}.src.home}/jdk/src/share/classes"
108          unless:set="have.java.base"/>
109        <local name="modules"/>
110        <available property="modules" file="${jdk@{v}.home}/lib/modules" type="file"/>
111      <local name="boot.jar.dir"/>      <local name="boot.jar.dir"/>
112      <property name="boot.jar.dir"   location="${jdk@{v}.home}/jre/lib"/>      <property name="boot.jar.dir"   location="${jdk@{v}.home}/jre/lib" unless:set="modules"/>
113      <path id="bootclasspath@{v}">      <path id="bootclasspath@{v}" unless:set="modules">
114        <pathelement path="${boot.jar.dir}/resources.jar"/>        <pathelement path="${boot.jar.dir}/resources.jar"/>
115        <pathelement path="${boot.jar.dir}/rt.jar"/>        <pathelement path="${boot.jar.dir}/rt.jar"/>
116        <pathelement path="${boot.jar.dir}/jsse.jar"/>        <pathelement path="${boot.jar.dir}/jsse.jar"/>
117        <pathelement path="${boot.jar.dir}/jce.jar"/>        <pathelement path="${boot.jar.dir}/jce.jar"/>
118        <pathelement path="${boot.jar.dir}/charsets.jar"/>        <pathelement path="${boot.jar.dir}/charsets.jar"/>
119      </path>      </path>
120      <property name="bootclasspath@{v}" value="${toString:bootclasspath@{v}}"/>      <property name="bootclasspath@{v}" value="${toString:bootclasspath@{v}}" unless:set="modules"/>
121      </sequential>      </sequential>
122    </macrodef>    </macrodef>
123    
# Line 117  Line 137 
137    <defjdklocations v="7"/>    <defjdklocations v="7"/>
138    <defjdklocations v="8"/>    <defjdklocations v="8"/>
139    <defjdklocations v="9"/>    <defjdklocations v="9"/>
140      <defjdklocations v="10"/>
141      <defjdklocations v="11"/>
142      <defjdklocations v="12"/>
143    
144    <!-- Source locations -->    <!-- Source locations -->
145    <property name="src.dir"              location="${basedir}/src/main"/>    <property name="src.dir"              location="${basedir}/src/main"/>
146    <property name="test.src.dir"         location="${basedir}/src/test"/>    <property name="test.src.dir"         location="${basedir}/src/test"/>
147    <property name="loops.src.dir"        location="${basedir}/src/loops"/>    <property name="loops.src.dir"        location="${basedir}/src/loops"/>
148    <property name="tck.src.dir"          location="${test.src.dir}/tck"/>    <property name="tck.src.dir"          location="${test.src.dir}/tck"/>
149    <property name="jtreg.src.dir"        location="${test.src.dir}/jtreg"/>    <property name="jtreg7.src.dir"       location="${test.src.dir}/jtreg-jdk7"/>
150      <property name="jtreg8.src.dir"       location="${test.src.dir}/jtreg-jdk8"/>
151      <property name="jtreg9.src.dir"       location="${test.src.dir}/jtreg"/>
152      <property name="jtreg10.src.dir"      location="${test.src.dir}/jtreg"/>
153      <property name="jtreg11.src.dir"      location="${test.src.dir}/jtreg"/>
154      <property name="jtreg12.src.dir"      location="${test.src.dir}/jtreg"/>
155      <property name="jtreg.src.dir"        location="${jtreg9.src.dir}"/>
156    <property name="lib.dir"              location="${basedir}/lib"/>    <property name="lib.dir"              location="${basedir}/lib"/>
157    <property name="dist.dir"             location="${basedir}/dist"/>    <property name="dist.dir"             location="${basedir}/dist"/>
158    <property name="topsrc.dir"           location="${basedir}/src"/>    <property name="topsrc.dir"           location="${basedir}/src"/>
159    <property name="4jdk7src.dir"         location="${topsrc.dir}/jdk7"/>    <property name="4jdk7src.dir"         location="${topsrc.dir}/jdk7"/>
160      <property name="4jdk8src.dir"         location="${topsrc.dir}/jdk8"/>
161    <property name="jsr166xsrc.dir"       location="${topsrc.dir}/jsr166x"/>    <property name="jsr166xsrc.dir"       location="${topsrc.dir}/jsr166x"/>
162    <property name="jsr166ysrc.dir"       location="${topsrc.dir}/jsr166y"/>    <property name="jsr166ysrc.dir"       location="${topsrc.dir}/jsr166y"/>
163    <property name="jsr166esrc.dir"       location="${topsrc.dir}/jsr166e"/>    <property name="jsr166esrc.dir"       location="${topsrc.dir}/jsr166e"/>
# Line 136  Line 166 
166    <!-- Javadoc locations -->    <!-- Javadoc locations -->
167    <property name="docs.dir"          location="${build.dir}/docs"/>    <property name="docs.dir"          location="${build.dir}/docs"/>
168    <property name="4jdk7docs.dir"     location="${build.4jdk7.dir}/docs"/>    <property name="4jdk7docs.dir"     location="${build.4jdk7.dir}/docs"/>
169      <property name="4jdk8docs.dir"     location="${build.4jdk8.dir}/docs"/>
170    <property name="jsr166xdocs.dir"   location="${build.jsr166x.dir}/docs"/>    <property name="jsr166xdocs.dir"   location="${build.jsr166x.dir}/docs"/>
171    <property name="jsr166ydocs.dir"   location="${build.jsr166y.dir}/docs"/>    <property name="jsr166ydocs.dir"   location="${build.jsr166y.dir}/docs"/>
172    <property name="jsr166edocs.dir"   location="${build.jsr166e.dir}/docs"/>    <property name="jsr166edocs.dir"   location="${build.jsr166e.dir}/docs"/>
# Line 143  Line 174 
174    
175    <property name="dist.docs.dir"          location="${dist.dir}/docs"/>    <property name="dist.docs.dir"          location="${dist.dir}/docs"/>
176    <property name="dist.4jdk7docs.dir"     location="${dist.dir}/jsr166-4jdk7docs"/>    <property name="dist.4jdk7docs.dir"     location="${dist.dir}/jsr166-4jdk7docs"/>
177      <property name="dist.4jdk8docs.dir"     location="${dist.dir}/jsr166-4jdk8docs"/>
178    <property name="dist.jsr166xdocs.dir"   location="${dist.dir}/jsr166xdocs"/>    <property name="dist.jsr166xdocs.dir"   location="${dist.dir}/jsr166xdocs"/>
179    <property name="dist.jsr166ydocs.dir"   location="${dist.dir}/jsr166ydocs"/>    <property name="dist.jsr166ydocs.dir"   location="${dist.dir}/jsr166ydocs"/>
180    <property name="dist.jsr166edocs.dir"   location="${dist.dir}/jsr166edocs"/>    <property name="dist.jsr166edocs.dir"   location="${dist.dir}/jsr166edocs"/>
# Line 151  Line 183 
183    <!-- Jar locations -->    <!-- Jar locations -->
184    <property name="product.jar"      location="${build.dir}/jsr166.jar"/>    <property name="product.jar"      location="${build.dir}/jsr166.jar"/>
185    <property name="4jdk7product.jar" location="${build.4jdk7.dir}/jsr166-4jdk7.jar"/>    <property name="4jdk7product.jar" location="${build.4jdk7.dir}/jsr166-4jdk7.jar"/>
186      <property name="4jdk8product.jar" location="${build.4jdk8.dir}/jsr166-4jdk8.jar"/>
187    <property name="jsr166x.jar"      location="${build.jsr166x.dir}/jsr166x.jar"/>    <property name="jsr166x.jar"      location="${build.jsr166x.dir}/jsr166x.jar"/>
188    <property name="jsr166y.jar"      location="${build.jsr166y.dir}/jsr166y.jar"/>    <property name="jsr166y.jar"      location="${build.jsr166y.dir}/jsr166y.jar"/>
189    <property name="jsr166e.jar"      location="${build.jsr166e.dir}/jsr166e.jar"/>    <property name="jsr166e.jar"      location="${build.jsr166e.dir}/jsr166e.jar"/>
# Line 158  Line 191 
191    <property name="junit.jar"        location="${lib.dir}/junit.jar"/>    <property name="junit.jar"        location="${lib.dir}/junit.jar"/>
192    
193    <!-- Canonical location of jdk docs root, to use with javadoc -Xdocrootparent flag -->    <!-- Canonical location of jdk docs root, to use with javadoc -Xdocrootparent flag -->
194    <property name="java5.docroot.url"      value="http://docs.oracle.com/javase/1.5.0/docs"/>    <!-- Switched to https: in 2017-10 - JDK-8190312 -->
195    <property name="java6.docroot.url"      value="http://docs.oracle.com/javase/6/docs"/>    <property name="java5.docroot.url"  value="https://docs.oracle.com/javase/1.5.0/docs"/>
196    <property name="java7.docroot.url"      value="http://docs.oracle.com/javase/7/docs"/>    <property name="java6.docroot.url"  value="https://docs.oracle.com/javase/6/docs"/>
197    <!-- The expected canonical location does not yet exist as of 2014-02 -->    <property name="java7.docroot.url"  value="https://docs.oracle.com/javase/7/docs"/>
198    <!-- <property name="java8.docroot.url" value="http://docs.oracle.com/javase/8/docs"/> -->    <property name="java8.docroot.url"  value="https://docs.oracle.com/javase/8/docs"/>
199    <property name="java8.docroot.url"      value="http://download.java.net/jdk8/docs"/>    <property name="java9.docroot.url"  value="https://docs.oracle.com/javase/9/docs"/>
200    <!-- No published jdk9 docs exist as of 2014-02 -->    <property name="java10.docroot.url" value="https://docs.oracle.com/javase/10/docs"/>
201    <!-- <property name="java9.docroot.url" value="http://docs.oracle.com/javase/9/docs"/> -->    <property name="java11.docroot.url" value="https://docs.oracle.com/en/java/javase/11/docs"/>
202    <property name="java9.docroot.url"      value="${java8.docroot.url}"/>    <!-- The location of jdk early access docs (RIP) -->
203    <!-- Default jdk doc location (latest stable release seems best) -->    <!-- <property name="java9.docroot.url" value="http://download.java.net/java/jdk9/docs"/> -->
204    <property name="java.docroot.url"       value="${java7.docroot.url}"/>    <!-- <property name="java10.docroot.url" value="http://download.java.net/java/jdk10/docs"/> -->
205      <!-- <property name="java11.docroot.url" value="http://download.java.net/java/jdk11/docs"/> -->
206      <property name="java12.docroot.url" value="https://download.java.net/java/jdk12/docs"/>
207      <!-- Default jdk doc location (latest stable LTS release seems best) -->
208      <property name="java.docroot.url"   value="${java11.docroot.url}"/>
209    
210    <!-- Canonical location of jdk API docs, to use with javadoc link attribute -->    <!-- Canonical location of jdk API docs, to use with javadoc link attribute -->
211    <property name="java5.api.url"      value="${java5.docroot.url}/api/"/>    <property name="java5.api.url"      value="${java5.docroot.url}/api/"/>
# Line 176  Line 213 
213    <property name="java7.api.url"      value="${java7.docroot.url}/api/"/>    <property name="java7.api.url"      value="${java7.docroot.url}/api/"/>
214    <property name="java8.api.url"      value="${java8.docroot.url}/api/"/>    <property name="java8.api.url"      value="${java8.docroot.url}/api/"/>
215    <property name="java9.api.url"      value="${java9.docroot.url}/api/"/>    <property name="java9.api.url"      value="${java9.docroot.url}/api/"/>
216      <property name="java10.api.url"     value="${java10.docroot.url}/api/"/>
217      <property name="java11.api.url"     value="${java11.docroot.url}/api/"/>
218      <property name="java12.api.url"     value="${java12.docroot.url}/api/"/>
219    <property name="java.api.url"       value="${java.docroot.url}/api/"/>    <property name="java.api.url"       value="${java.docroot.url}/api/"/>
220    
221    <!-- Define the "jtreg" task -->    <!-- Define the "jtreg" task -->
# Line 183  Line 223 
223    <taskdef name="jtreg" classname="com.sun.javatest.regtest.Main$$Ant"    <taskdef name="jtreg" classname="com.sun.javatest.regtest.Main$$Ant"
224             classpath="${lib.dir}/jtreg.jar" />             classpath="${lib.dir}/jtreg.jar" />
225    
226    <!-- Test classpath -->    <!-- Tck options; see JSR166TestCase.java
227    <path id="test.classpath">     To profile a single tck test class:
228      <pathelement location="${build.testcases.dir}"/>     ant -Djsr166.profileTests=true -Djsr166.profileThreshold=10 -Djsr166.tckTestClass=CompletableFutureTest tck
229      <pathelement location="${junit.jar}"/>     To stress test a single tck test class:
230    </path>     ant -Djsr166.tckTestClass=CountedCompleterTest -Djsr166.runsPerTest=100 tck
231       To stress test a single tck test method:
232       ant -Djsr166.tckTestClass=RecursiveTaskTest -Djsr166.runsPerTest=1000 -Djsr166.methodFilter=testAbnormalInvokeAll3 tck
233      -->
234      <property name="jsr166.tckTestClass"     value="JSR166TestCase"/>
235    <macrodef name="run-tck-tests">    <macrodef name="run-tck-tests">
236      <attribute name="tck.src.dir" default="${tck.src.dir}"/>      <attribute name="tck.src.dir" default="${tck.src.dir}"/>
237      <attribute name="target"/>      <attribute name="target"/>
238      <attribute name="compile-target" default="@{target}"/>      <attribute name="compile-target" default="@{target}"/>
239      <attribute name="workdir"/>      <attribute name="workdir"/>
240      <attribute name="classes"/>      <attribute name="classes"/>
241      <attribute name="jvmflags" default="-ea -esa"/>      <!--
242            <attribute name="jvmflags" default="-XX:+UseParallelGC -XX:-UseBiasedLocking -ea -esa -Djsr166.testImplementationDetails=true"/>
243        -->
244            <attribute name="jvmflags" default="-ea -esa -Djsr166.testImplementationDetails=true"/>
245      <element name="javac-elements" optional="true"/>      <element name="javac-elements" optional="true"/>
246    
247      <sequential>      <sequential>
248    
249        <local name="modules"/>
250        <condition property="modules">
251          <available file="${jdk@{compile-target}.home}/lib/modules" type="file"/>
252        </condition>
253    
254        <local name="use-doclint"/>
255        <condition property="use-doclint">
256          <not> <equals arg1="@{target}" arg2="7"/> </not>
257        </condition>
258    
259      <mkdir dir="@{workdir}/tck-classes"/>      <mkdir dir="@{workdir}/tck-classes"/>
260    
261      <javac srcdir="@{tck.src.dir}"      <javac srcdir="@{tck.src.dir}"
# Line 209  Line 266 
266             source="@{compile-target}"             source="@{compile-target}"
267             target="@{compile-target}"             target="@{compile-target}"
268             classpath="${junit.jar}"             classpath="${junit.jar}"
            bootclasspath="@{classes}:${bootclasspath@{compile-target}}"  
269             includeAntRuntime="false"             includeAntRuntime="false"
270             includeJavaRuntime="false"             includeJavaRuntime="false"
271               encoding="ASCII"
272             executable="${javac@{compile-target}}"             executable="${javac@{compile-target}}"
273             fork="true">             fork="true">
274    
275        <include name="*.java"/>        <include name="*.java"/>
276        <compilerarg value="-XDignore.symbol.file=true"/>        <compilerarg value="-XDignore.symbol.file=true"/>
277        <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial,-deprecation"/>        <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial,-deprecation,-try"/>
278          <compilerarg value="-Xdoclint:reference/private" if:set="use-doclint"/>
279          <compilerarg value="-Xbootclasspath/p:@{classes}" unless:set="modules"/>
280          <compilerarg value="--patch-module=java.base=@{classes}" if:set="modules"/>
281        <compilerarg line="${build.args}"/>        <compilerarg line="${build.args}"/>
282        <javac-elements/>        <javac-elements/>
283    
# Line 227  Line 287 
287            failonerror="true"            failonerror="true"
288            jvm="${java@{target}}"            jvm="${java@{target}}"
289            fork="true">            fork="true">
290          <jvmarg value="-Xbootclasspath/p:@{classes}"/>          <jvmarg value="-Xbootclasspath/p:@{classes}" unless:set="modules"/>
291            <jvmarg value="--patch-module=java.base=@{classes}" if:set="modules"/>
292            <jvmarg value="--add-opens=java.base/java.lang=ALL-UNNAMED" if:set="modules"/>
293            <jvmarg value="--add-opens=java.base/java.util=ALL-UNNAMED" if:set="modules"/>
294            <jvmarg value="--add-opens=java.base/java.util.concurrent=ALL-UNNAMED" if:set="modules"/>
295            <jvmarg value="--add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED" if:set="modules"/>
296            <jvmarg value="--add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED" if:set="modules"/>
297          <jvmarg line="@{jvmflags}"/>          <jvmarg line="@{jvmflags}"/>
298          <sysproperty key="jsr166.profileTests"     value="${jsr166.profileTests}"/>          <!-- ant -Dvmoptions="-Xmx8m" -Djsr166.tckTestClass=CompletableFutureTest tck -->
299          <sysproperty key="jsr166.profileThreshold" value="${jsr166.profileThreshold}"/>          <jvmarg line="${vmoptions}" if:set="vmoptions"/>
300          <sysproperty key="jsr166.runsPerTest"      value="${jsr166.runsPerTest}"/>  
301            <!-- ant -Djava.util.concurrent.ForkJoinPool.common.parallelism=1 tck -->
302            <syspropertyset id="system-properties-used-by-tck">
303              <propertyref prefix="java.util.concurrent.ForkJoinPool"/>
304              <propertyref prefix="jsr166."/>
305              <propertyref name="test.timeout.factor"/>
306            </syspropertyset>
307    
308          <classpath>          <classpath>
309            <pathelement location="${junit.jar}"/>            <pathelement location="${junit.jar}"/>
310            <pathelement location="@{workdir}/tck-classes"/>            <pathelement location="@{workdir}/tck-classes"/>
# Line 241  Line 314 
314      </sequential>      </sequential>
315    </macrodef>    </macrodef>
316    
317      <!-- Define jtreg test sets for different jdk versions -->
318      <!-- ant -Djtreg.test.pattern="**/ConcurrentHashMap/" -->
319      <!-- ant -Djtreg.test.pattern="**/ToArray.java" -->
320      <property name="jtreg.test.pattern" value="**/*.java"/>
321      <macrodef name="defjtregtests">
322        <attribute name="v"/>
323        <sequential>
324          <fileset dir="${jtreg@{v}.src.dir}">
325            <patternset id="jdk@{v}.jtreg.tests">
326              <include name="${jtreg.test.pattern}"/>
327            </patternset>
328          </fileset>
329        </sequential>
330      </macrodef>
331    
332      <defjtregtests v="12"/>
333      <defjtregtests v="11"/>
334      <defjtregtests v="10"/>
335      <defjtregtests v="9"/>
336      <defjtregtests v="8"/>
337      <defjtregtests v="7"/>
338    
339      <!-- ant -Djtreg.flags=-timeoutFactor:4 -->
340      <property name="jtreg.flags" value=""/>
341    
342    <macrodef name="run-jtreg-tests">    <macrodef name="run-jtreg-tests">
343      <!-- ant -Djtreg.src.dir=src/test/jtreg/util/concurrent/CompletableFuture test-jtreg -->      <!-- ant -Djtreg11.src.dir=src/test/jtreg/util/concurrent/CompletableFuture jtreg -->
     <attribute name="jtreg.src.dir" default="${jtreg.src.dir}"/>  
     <attribute name="source" default="7"/>  
344      <attribute name="target"/>      <attribute name="target"/>
345      <attribute name="workdir"/>      <attribute name="workdir"/>
346      <attribute name="classes"/>      <attribute name="classes"/>
347        <attribute name="verbose" default="${jtreg.verbose}"/>
348      <attribute name="jtregflags" default=""/>      <attribute name="jtregflags" default=""/>
349        <element name="jtreg-elements" optional="true"/>
350    
351      <sequential>      <sequential>
352    
353        <!-- ant -Djtreg.verbose=time,fail,error jtreg -->
354        <property name="jtreg.verbose" value="nopass,fail,error"/>
355    
356        <local name="modules"/>
357        <condition property="modules">
358          <available file="${jdk@{target}.home}/lib/modules" type="file"/>
359        </condition>
360    
361      <delete dir="@{workdir}/JTwork"   quiet="true"/>      <delete dir="@{workdir}/JTwork"   quiet="true"/>
362      <delete dir="@{workdir}/JTreport" quiet="true"/>      <jtreg dir="${jtreg@{target}.src.dir}"
     <mkdir dir="@{workdir}/JTwork/scratch"/>  
     <mkdir dir="@{workdir}/JTreport"/>  
     <jtreg dir="@{jtreg.src.dir}"  
363             jdk="${jdk@{target}.home}"             jdk="${jdk@{target}.home}"
364             workDir="@{workdir}/JTwork"             workDir="@{workdir}/JTwork">
365             reportDir="@{workdir}/JTreport">        <patternset refid="jdk@{target}.jtreg.tests"/>
366          <arg value="-Xbootclasspath/p:@{classes}" unless:set="modules"/>
367        <arg value="-Xbootclasspath/p:@{classes}"/>        <arg value="-javacoptions:--patch-module=java.base=@{classes}" if:set="modules"/>
368          <arg value="-vmoptions:--patch-module=java.base=@{classes}" if:set="modules"/>
369        <arg value="-agentvm"/>        <arg value="-agentvm"/>
370        <arg value="-v:nopass,fail"/>        <arg value="-noreport"/>
371          <arg value="-verbose:@{verbose}"/>
372        <arg value="-vmoptions:-esa -ea"/>        <arg value="-vmoptions:-esa -ea"/>
373        <arg value="-automatic"/>        <arg value="-automatic"/>
374        <arg value="-k:!ignore"/>        <arg value="-k:!ignore"/>
375        <arg line="@{jtregflags}"/>        <arg line="@{jtregflags}"/>
376          <arg line="${jtreg.flags}"/>
377          <jtreg-elements/>
378      </jtreg>      </jtreg>
379      </sequential>      </sequential>
380    </macrodef>    </macrodef>
# Line 281  Line 390 
390    
391    <!-- Main targets -->    <!-- Main targets -->
392    
393    <property name="build.main.java.version" value="9"/>    <!-- Default values: may seem strange ... -->
394      <!-- At runtime, target latest LTS, i.e. jdk11 -->
395      <!-- But at build time, target jdk9, for maximal binary portability -->
396      <!-- Use javadoc12 (but -link to jdk11 api docs!), to get:
397        o override-methods=summary
398        o {@systemProperty ...}
399        o 8211194: issues linking to external documentation (was: missing package-list for JDK10 / JDK11 documentation)
400        o 8202628: javadoc generates bad links in TestModules.java
401        -->
402      <property name="java.runtime.target" value="11"/>
403      <property name="build.main.java" value="${java11}"/>
404    <property name="build.main.javac" value="${javac9}"/>    <property name="build.main.javac" value="${javac9}"/>
405      <property name="build.main.javadoc" value="${javadoc12}"/>
406      <property name="build.main.javadoc.source" value="${java.runtime.target}"/>
407    
408    <target name="dists"    <target name="dists"
409            depends="dist, 4jdk7dist, jsr166edist, jsr166ydist, extra166ydist, jsr166xdist"            depends="dist, 4jdk8dist"
410            description="Builds all public jars and docs"/>            description="Builds all public jars and docs"/>
411              <!-- no longer supported: 4jdk7dist, jsr166edist, jsr166ydist, extra166ydist, jsr166xdist -->
412    
413    <target name="compile"    <target name="compile"
414            depends="configure-compiler"            depends="configure-compiler"
415            description="Compiles src/main sources to build dir">            description="Compiles src/main sources to build dir">
416    
417      <mkdir dir="${build.classes.dir}"/>      <local name="destdir"/>
418        <property name="destdir" value="${build.classes.dir}/java.base"/>
419    
420        <mkdir dir="${destdir}"/>
421    
422      <javac srcdir="${src.dir}"      <javac srcdir="${src.dir}"
423             destdir="${build.classes.dir}"             destdir="${destdir}"
424             debug="${build.debug}"             debug="${build.debug}"
425             debuglevel="${build.debuglevel}"             debuglevel="${build.debuglevel}"
426             deprecation="${build.deprecation}"             deprecation="${build.deprecation}"
427             classpath=""             classpath=""
428             includeAntRuntime="false"             includeAntRuntime="false"
429             includeJavaRuntime="false"             includeJavaRuntime="false"
430               encoding="ASCII"
431             executable="${build.main.javac}"             executable="${build.main.javac}"
432             fork="true">             fork="true">
433    
434        <include name="**/*.java"/>        <include name="**/*.java"/>
435          <compilerarg value="--patch-module=java.base=${src.dir}"/>
436        <compilerarg value="-Xprefer:source"/>        <compilerarg value="-Xprefer:source"/>
437        <compilerarg value="-XDignore.symbol.file=true"/>        <compilerarg value="-XDignore.symbol.file=true"/>
438        <compilerarg value="-Xlint:all"/>        <compilerarg value="-Xlint:all,-removal"/>
439        <compilerarg value="-Xdoclint:all/protected"/>        <compilerarg line="--doclint-format html5"/>
440          <compilerarg value="-Xdoclint:all/protected,reference/private"/>
441          <compilerarg value="-Werror"/>
442        <compilerarg line="-Xmaxerrs 1000 -Xmaxwarns 1000"/>        <compilerarg line="-Xmaxerrs 1000 -Xmaxwarns 1000"/>
443        <compilerarg line="${build.args}"/>        <compilerarg line="${build.args}"/>
444    
# Line 319  Line 448 
448    
449    <target name="jar"    <target name="jar"
450            depends="compile"            depends="compile"
451            description="Builds library jar from compiled sources">            description="Builds library jar for src/main from compiled sources">
452        <local name="subdir"/>
453        <available property="subdir" file="${build.classes.dir}/java.base" type="dir" value="/java.base"/>
454      <jar destfile="${product.jar}">      <jar destfile="${product.jar}">
455        <fileset dir="${build.classes.dir}"/>        <fileset dir="${build.classes.dir}${subdir}"/>
456          <manifest>
457            <attribute name="Built-By" value="${user.name}"/>
458            <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
459          </manifest>
460      </jar>      </jar>
461    </target>    </target>
462    
# Line 336  Line 470 
470      <!-- the packagenames="none" hack below prevents scanning the -->      <!-- the packagenames="none" hack below prevents scanning the -->
471      <!-- sourcepath for packages -->      <!-- sourcepath for packages -->
472    
473    <!-- TODO: sourcepath="${src.dir}:${jdk9.src.dir}" -->
474    <!-- TODO: sourcepath="${src.dir}:${jdk9.src.dir}:${jdk9.src.home}/jdk/src/java.logging/share/classes" -->
475    <!-- TODO: sourcepath="${src.dir}:${jdk9.home}/src.zip" -->
476    <!-- TODO: <arg line="-sourcepath ${src.dir}:${jdk9.home}/src.zip"/> -->
477    <!-- TODO: <arg line="- -module-source-path ${jdk9.home}/src.zip"/> -->
478      <javadoc destdir="${docs.dir}"      <javadoc destdir="${docs.dir}"
479               packagenames="none"               packagenames="none"
480               link="${java9.api.url}"               link="${java.api.url}"
481               overview="${src.dir}/intro.html"               overview="${src.dir}/intro.html"
482               access="${build.javadoc.access}"               access="${build.javadoc.access}"
483               sourcepath="${src.dir}:${jdk9src.dir}"               sourcepath="${src.dir}"
484               classpath=""               classpath=""
485               executable="${javadoc9}">               source="${build.main.javadoc.source}"
486                 executable="${build.main.javadoc}">
487    <!-- TODO: JDK-8214571 failonerror = "true" -->
488        <fileset dir="${src.dir}" defaultexcludes="yes">        <fileset dir="${src.dir}" defaultexcludes="yes">
489          <include name="**/*.java"/>          <include name="**/*.java"/>
490        </fileset>        </fileset>
491        <arg line="-Xdocrootparent ${java9.docroot.url}"/>        <arg line="-Xdocrootparent ${java.docroot.url}"/>
492        <arg line="-Xmaxerrs 1000 -Xmaxwarns 1000"/>        <arg line="-Xmaxerrs 1000 -Xmaxwarns 1000"/>
493        <arg value="-XDignore.symbol.file=true"/>        <arg value="-XDignore.symbol.file=true"/>
494        <arg value="-tag"/>        <arg value="-html5"/>
495        <arg value="${javadoc.jls.option}"/>        <arg value="--patch-module=java.base=${src.dir}"/>
496        <arg value="-tag"/>  <!-- old school frames via docs/index.html?overview-summary.html -->
497        <arg value="apiNote:a:&lt;em&gt;API Note:&lt;/em&gt;"/>        <arg value="--frames"/>
498        <arg value="-tag"/>        <arg value="--override-methods=summary"/>
499        <arg value="implSpec:a:&lt;em&gt;Implementation Requirements:&lt;/em&gt;"/>        <arg value="-tag"/> <arg value="${javadoc.jls.option}"/>
500        <arg value="-tag"/>        <arg value="-tag"/> <arg value="implSpec:a:Implementation Requirements:"/>
501        <arg value="implNote:a:&lt;em&gt;Implementation Note:&lt;/em&gt;"/>        <arg value="-tag"/> <arg value="implNote:a:Implementation Note:"/>
502          <arg value="-tag"/> <arg value="apiNote:a:API Note:"/>
503    <!-- tags added in jdk9: currently unused -->
504    <!--  <arg value="-tag"/> <arg value="revised:X"/> -->
505    <!--  <arg value="-tag"/> <arg value="spec:X"/> -->
506      </javadoc>      </javadoc>
507    </target>    </target>
508    
# Line 367  Line 512 
512            description="Puts all distributable products in single hierarchy"/>            description="Puts all distributable products in single hierarchy"/>
513    
514    
   <target name="release"  
           depends="dist"  
           description="Puts entire CVS tree, plus distribution productions, in a jar">  
   
     <property name="release.jar" value="dist/jsr166-${version}-dist.jar"/>  
   
     <jar basedir="${basedir}" destfile="${release.jar}">  
       <!-- <exclude name="build/**"/> -->  
       <exclude name="${release.jar}"/>  
       <exclude name="user.properties"/>  
       <exclude name="etc/notes/**"/>  
       <exclude name="src/emulation/**"/>  
       <exclude name="**/SyntaxTest.java"/>  
       <exclude name="**/SuperfluousAbstract.java"/>  
     </jar>  
   </target>  
   
   
515    <target name="clean"    <target name="clean"
516            description="Removes all build products">            description="Removes all build products">
   
517      <delete dir="${build.dir}"/>      <delete dir="${build.dir}"/>
   
518    </target>    </target>
519    
520    
521    <target name="dist-clean"    <target name="dist-clean"
522            description="Removes all build and distribution products">            description="Removes all build and distribution products">
   
523      <delete dir="${build.dir}"/>      <delete dir="${build.dir}"/>
524      <delete dir="${dist.dir}"/>      <delete dir="${dist.dir}"/>
   
525    </target>    </target>
526    
527    
# Line 412  Line 535 
535      <mirror-dir src="${docs.dir}" dst="${dist.docs.dir}"/>      <mirror-dir src="${docs.dir}" dst="${dist.docs.dir}"/>
536    </target>    </target>
537    
538      <target name="tck"
   <target name="test-tck"  
539            depends="jar"            depends="jar"
540            description="Runs tck tests for main directly">            description="Runs tck tests for src/main directly">
541    
542      <run-tck-tests      <run-tck-tests
543        target="${build.main.java.version}"        target="${java.runtime.target}"
544        workdir="${build.dir}"        workdir="${build.dir}"
545        classes="${product.jar}"/>        classes="${product.jar}">
546          <javac-elements>
547            <compilerarg value="-Werror"/>
548          </javac-elements>
549        </run-tck-tests>
550    </target>    </target>
551    
552    <target name="test-jtreg"    <target name="tck-parallelism-1"
553              description="Runs tck with common pool parallelism 1">
554        <antcall target="tck">
555          <param name="java.util.concurrent.ForkJoinPool.common.parallelism" value="1"/>
556        </antcall>
557      </target>
558    
559      <target name="tck-parallelism-0"
560              description="Runs tck with common pool parallelism 0">
561        <antcall target="tck">
562          <param name="java.util.concurrent.ForkJoinPool.common.parallelism" value="0"/>
563        </antcall>
564      </target>
565    
566      <target name="tck-security-manager"
567              description="Runs tck with a security manager">
568        <antcall target="tck">
569          <param name="jsr166.useSecurityManager" value="true"/>
570        </antcall>
571      </target>
572    
573      <target name="jtreg"
574            depends="jar"            depends="jar"
575            description="Runs jtreg tests for main using the jtreg ant task">            description="Runs jtreg tests for src/main using the jtreg ant task">
576      <run-jtreg-tests      <run-jtreg-tests
577         target="${build.main.java.version}"         target="${java.runtime.target}"
578         workdir="${build.dir}"         workdir="${build.dir}"
579         classes="${product.jar}"/>         classes="${product.jar}"/>
580    </target>    </target>
581    
582    <target name="test"    <target name="test"
583            depends="test-tck, test-jtreg"            depends="tck, tck-parallelism-1, tck-parallelism-0, jtreg"
584            description="Runs tck and jtreg tests for main">            description="Runs tck and jtreg tests for src/main"/>
585    
586      <target name="test-version-permutations"
587              depends="test9, test10, test11, test12, test9-11, test9-12, clean, test, docs">
588    </target>    </target>
589    
590    <target name="test89"    <target name="test9">
591            description="Runs tck and jtreg tests for main for multiple java versions">      <antcall target="clean"/>
592        <antcall>
593          <param name="java.runtime.target" value="9"/>
594          <param name="build.main.javac" value="${javac9}"/>
595          <param name="build.main.javadoc" value="${javadoc12}"/>
596          <param name="build.main.javadoc.source" value="9"/>
597          <target name="test"/>
598          <target name="docs"/>
599        </antcall>
600      </target>
601    
602      <target name="test10">
603      <antcall target="clean"/>      <antcall target="clean"/>
604      <antcall target="test">      <antcall>
605        <param name="build.main.java.version" value="8"/>        <param name="java.runtime.target" value="10"/>
606        <param name="build.main.javac" value="${javac8}"/>        <param name="build.main.javac" value="${javac10}"/>
607          <param name="build.main.javadoc" value="${javadoc12}"/>
608          <param name="build.main.javadoc.source" value="10"/>
609          <target name="test"/>
610          <target name="docs"/>
611      </antcall>      </antcall>
612      </target>
613    
614      <target name="test11">
615      <antcall target="clean"/>      <antcall target="clean"/>
616      <antcall target="test">      <antcall>
617        <param name="build.main.java.version" value="9"/>        <param name="java.runtime.target" value="11"/>
618        <param name="build.main.javac" value="${javac9}"/>        <param name="build.main.javac" value="${javac11}"/>
619          <param name="build.main.javadoc" value="${javadoc12}"/>
620          <param name="build.main.javadoc.source" value="11"/>
621          <target name="test"/>
622          <target name="docs"/>
623      </antcall>      </antcall>
624      </target>
625    
626      <target name="test12">
627        <antcall target="clean"/>
628        <antcall>
629          <param name="java.runtime.target" value="12"/>
630          <param name="build.main.javac" value="${javac12}"/>
631          <param name="build.main.javadoc" value="${javadoc12}"/>
632          <param name="build.main.javadoc.source" value="12"/>
633          <target name="test"/>
634          <target name="docs"/>
635        </antcall>
636    </target>    </target>
637    
638      <target name="test9-11">
639        <antcall target="clean"/>
640        <antcall>
641          <param name="java.runtime.target" value="11"/>
642          <param name="build.main.javac" value="${javac9}"/>
643          <param name="build.main.javadoc" value="${javadoc12}"/>
644          <param name="build.main.javadoc.source" value="9"/>
645          <target name="test"/>
646          <target name="docs"/>
647        </antcall>
648      </target>
649    
650      <target name="test9-12">
651        <antcall target="clean"/>
652        <antcall>
653          <param name="java.runtime.target" value="12"/>
654          <param name="build.main.javac" value="${javac9}"/>
655          <param name="build.main.javadoc" value="${javadoc12}"/>
656          <param name="build.main.javadoc.source" value="9"/>
657          <target name="test"/>
658          <target name="docs"/>
659        </antcall>
660      </target>
661    
662    
663    <target name="configure-compiler">    <target name="configure-compiler">
664        <fail message="ant version too old">
665          <condition> <not> <antversion atleast="1.9.1"/> </not> </condition>
666        </fail>
667    
668      <property name="unchecked.option" value="-Xlint:unchecked"/>      <property name="unchecked.option" value="-Xlint:unchecked"/>
669    
# Line 473  Line 680 
680    </target>    </target>
681    
682    
683      <target name="compile-test-loops" depends="jar"
684              description="Compiles all the perf tests in src/test/loops">
685    
686    <!-- Various demos and test programs -->      <mkdir dir="${build.dir}/test/loops"/>
687    
688        <javac srcdir="${basedir}/src/test/loops"
689               destdir="${build.dir}/test/loops"
690               debug="${build.debug}"
691               debuglevel="${build.debuglevel}"
692               deprecation="${build.deprecation}"
693               includeAntRuntime="false"
694               includeJavaRuntime="false"
695               encoding="ASCII"
696               executable="${build.main.javac}"
697               fork="true">
698    
699          <include name="*.java"/>
700          <compilerarg value="-XDignore.symbol.file=true"/>
701          <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial"/>
702          <compilerarg value="-Xbootclasspath/p:${product.jar}"/>
703          <compilerarg line="${build.args}"/>
704        </javac>
705      </target>
706    
   <target name="loops" depends="configure-compiler"  
           description="Benchmark from Doug Lea's AQS paper">  
707    
708      <mkdir dir="${build.loops.dir}"/>    <!-- jsr166 4jdk8 -->
709    
710      <javac srcdir="${loops.src.dir}"    <target name="4jdk8compile"
711            destdir="${build.loops.dir}"            depends="configure-compiler"
712              debug="${build.debug}"            description="Compiles src/jdk8 sources, targeting jdk8">
        debuglevel="${build.debuglevel}"  
       deprecation="${build.deprecation}"  
            source="${build.sourcelevel}"  
              fork="true">  
713    
714        <compilerarg line="${build.args}"/>      <mkdir dir="${build.4jdk8.classes.dir}"/>
715        <classpath refid="loops.classpath"/>  
716        <javac srcdir="${4jdk8src.dir}"
717               destdir="${build.4jdk8.classes.dir}"
718               debug="${build.debug}"
719               debuglevel="${build.debuglevel}"
720               deprecation="${build.deprecation}"
721               source="8"
722               target="8"
723               classpath=""
724               bootclasspath="${bootclasspath8}"
725               includeAntRuntime="false"
726               includeJavaRuntime="false"
727               encoding="ASCII"
728               executable="${javac8}"
729               fork="true">
730          <include name="**/*.java"/>
731          <compilerarg value="-Xprefer:source"/>
732        <compilerarg value="-XDignore.symbol.file=true"/>        <compilerarg value="-XDignore.symbol.file=true"/>
733          <compilerarg value="-Xlint:all"/>
734          <compilerarg value="-Werror"/>
735          <compilerarg line="${build.args}"/>
736        </javac>
737      </target>
738    
739      <target name="4jdk8doclint"
740              depends="configure-compiler"
741              description="Finds doclint warnings">
742    
743        <mkdir dir="${build.4jdk8.classes.dir}"/>
744    
745        <javac srcdir="${4jdk8src.dir}"
746               destdir="${build.4jdk8.classes.dir}"
747               debug="${build.debug}"
748               debuglevel="${build.debuglevel}"
749               deprecation="${build.deprecation}"
750               source="8"
751               target="8"
752               classpath=""
753               bootclasspath="${bootclasspath8}"
754               includeAntRuntime="false"
755               includeJavaRuntime="false"
756               encoding="ASCII"
757               executable="${javac8}"
758               fork="true">
759          <include name="**/*.java"/>
760          <compilerarg value="-Xprefer:source"/>
761          <compilerarg value="-XDignore.symbol.file=true"/>
762          <compilerarg value="-Xlint:all"/>
763          <compilerarg value="-Xdoclint:all/protected,reference/private"/>
764          <compilerarg line="${build.args}"/>
765      </javac>      </javac>
766      </target>
767    
     <java classname="ALoops" fork="true">  
       <classpath refid="loops.classpath"/>  
     </java>  
768    
769      <target name="4jdk8jar"
770              depends="4jdk8compile"
771              description="Builds library jar from compiled sources">
772    
773        <jar destfile="${4jdk8product.jar}">
774          <fileset dir="${build.4jdk8.classes.dir}"/>
775          <manifest>
776            <attribute name="Built-By" value="${user.name}"/>
777            <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
778          </manifest>
779        </jar>
780    </target>    </target>
781    
782    
783    <!-- jsr166 4jdk7 -->    <target name="4jdk8-tck"
784              depends="4jdk8jar"
785              description="Runs tck tests for jsr166-4jdk8 directly">
786    
787    <target name="4jdk7compile"      <run-tck-tests
788            depends="configure-compiler"        target="8"
789            description="Compiles src/jdk7 sources, targeting jdk7">        workdir="${build.4jdk8.dir}"
790          classes="${4jdk8product.jar}">
791          <javac-elements>
792            <!-- JDK9+ test classes -->
793            <exclude name="*9Test.java"/>
794            <exclude name="*10Test.java"/>
795            <compilerarg value="-Werror"/>
796          </javac-elements>
797        </run-tck-tests>
798      </target>
799    
800    
801      <target name="4jdk8-jtreg"
802              depends="4jdk8jar"
803              description="Runs jtreg tests for jsr166-4jdk8 using the jtreg ant task">
804        <run-jtreg-tests
805           target="8"
806           workdir="${build.4jdk8.dir}"
807           classes="${4jdk8product.jar}"/>
808      </target>
809    
810    
811      <target name="4jdk8-test"
812              depends="4jdk8-tck, 4jdk8-jtreg"
813              description="Runs tck and jtreg tests for jsr166-4jdk8"/>
814    
815    
816      <target name="4jdk8docs"
817              description="Builds javadocs for src/jdk8 to dist dir">
818    
819        <delete dir="${4jdk8docs.dir}"/>
820        <mkdir dir="${4jdk8docs.dir}"/>
821    
822        <javadoc destdir="${4jdk8docs.dir}"
823                 packagenames="none"
824                 link="${java8.api.url}"
825                 overview="${4jdk8src.dir}/intro.html"
826                 access="${build.javadoc.access}"
827                 sourcepath="${4jdk8src.dir}:${jdk8.src.dir}"
828                 classpath=""
829                 source="8"
830                 executable="${javadoc8}"
831                 failonerror = "true">
832          <fileset dir="${4jdk8src.dir}" defaultexcludes="yes">
833            <include name="**/*.java"/>
834          </fileset>
835          <arg line="-Xdocrootparent ${java8.docroot.url}"/>
836          <arg value="-XDignore.symbol.file=true"/>
837          <arg value="-tag"/> <arg value="${javadoc.jls.option}"/>
838          <arg value="-tag"/> <arg value="implSpec:a:&lt;em&gt;Implementation Requirements:&lt;/em&gt;"/>
839          <arg value="-tag"/> <arg value="implNote:a:&lt;em&gt;Implementation Note:&lt;/em&gt;"/>
840    <!-- @apiNote tag currently unused -->
841    <!--  <arg value="-tag"/> <arg value="apiNote:a:&lt;em&gt;API Note:&lt;/em&gt;"/> -->
842        </javadoc>
843      </target>
844    
845    
846      <target name="4jdk8dist"
847              depends="4jdk8dist-jar, 4jdk8dist-docs"
848              description="Puts all distributable products in single hierarchy"/>
849    
850    
851      <target name="4jdk8clean"
852              description="Removes all 4jdk8 build products">
853        <delete dir="${build.4jdk8.dir}"/>
854      </target>
855    
856    
857      <target name="4jdk8dist-jar"
858              depends="4jdk8clean, 4jdk8jar">
859        <copy file="${4jdk8product.jar}" todir="${dist.dir}"/>
860      </target>
861    
862    
863      <target name="4jdk8dist-docs"
864              depends="4jdk8clean, 4jdk8docs">
865        <mirror-dir src="${4jdk8docs.dir}" dst="${dist.4jdk8docs.dir}"/>
866      </target>
867    
868    
869      <!-- jsr166 4jdk7 (no longer maintained) -->
870    
871      <target name="4jdk7compile" depends="configure-compiler">
872      <mkdir dir="${build.4jdk7.classes.dir}"/>      <mkdir dir="${build.4jdk7.classes.dir}"/>
873    
874      <javac srcdir="${4jdk7src.dir}"      <javac srcdir="${4jdk7src.dir}"
# Line 517  Line 877 
877             debuglevel="${build.debuglevel}"             debuglevel="${build.debuglevel}"
878             deprecation="${build.deprecation}"             deprecation="${build.deprecation}"
879             source="6"             source="6"
880               target="6"
881             classpath=""             classpath=""
882             bootclasspath="${bootclasspath6}"             bootclasspath="${bootclasspath6}"
883             includeAntRuntime="false"             includeAntRuntime="false"
884             includeJavaRuntime="false"             includeJavaRuntime="false"
885               encoding="ASCII"
886             executable="${javac7}"             executable="${javac7}"
887             fork="true">             fork="true">
888    
# Line 528  Line 890 
890        <compilerarg value="-Xprefer:source"/>        <compilerarg value="-Xprefer:source"/>
891        <compilerarg value="-XDignore.symbol.file=true"/>        <compilerarg value="-XDignore.symbol.file=true"/>
892        <compilerarg value="-Xlint:all"/>        <compilerarg value="-Xlint:all"/>
893          <compilerarg value="-Werror"/>
894        <compilerarg line="${build.args}"/>        <compilerarg line="${build.args}"/>
   
895      </javac>      </javac>
896    </target>    </target>
897    
898    <target name="4jdk7doclint"    <target name="4jdk7doclint" depends="configure-compiler">
           depends="configure-compiler"  
           description="Finds doclint warnings">  
   
899      <mkdir dir="${build.4jdk7.classes.dir}"/>      <mkdir dir="${build.4jdk7.classes.dir}"/>
900    
901      <javac srcdir="${4jdk7src.dir}"      <javac srcdir="${4jdk7src.dir}"
# Line 545  Line 904 
904             debuglevel="${build.debuglevel}"             debuglevel="${build.debuglevel}"
905             deprecation="${build.deprecation}"             deprecation="${build.deprecation}"
906             source="6"             source="6"
907               target="6"
908             classpath=""             classpath=""
909             bootclasspath="${bootclasspath7}"             bootclasspath="${bootclasspath6}"
910             includeAntRuntime="false"             includeAntRuntime="false"
911             includeJavaRuntime="false"             includeJavaRuntime="false"
912               encoding="ASCII"
913             executable="${javac8}"             executable="${javac8}"
914             fork="true">             fork="true">
915    
# Line 558  Line 919 
919        <compilerarg value="-Xlint:all"/>        <compilerarg value="-Xlint:all"/>
920        <compilerarg value="-Xdoclint:all/protected"/>        <compilerarg value="-Xdoclint:all/protected"/>
921        <compilerarg line="${build.args}"/>        <compilerarg line="${build.args}"/>
   
922      </javac>      </javac>
923    </target>    </target>
924    
925      <target name="4jdk7jar" depends="4jdk7compile">
   <target name="4jdk7jar"  
           depends="4jdk7compile"  
           description="Builds library jar from compiled sources">  
   
926      <jar destfile="${4jdk7product.jar}">      <jar destfile="${4jdk7product.jar}">
927        <fileset dir="${build.4jdk7.classes.dir}"/>        <fileset dir="${build.4jdk7.classes.dir}"/>
928          <manifest>
929            <attribute name="Built-By" value="${user.name}"/>
930            <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
931          </manifest>
932      </jar>      </jar>
   
933    </target>    </target>
934    
935      <target name="4jdk7-tck" depends="4jdk7jar">
   <target name="4jdk7-test-tck"  
           depends="4jdk7jar"  
           description="Runs tck tests for jsr166-4jdk7 directly">  
   
936      <run-tck-tests      <run-tck-tests
937        target="7"        target="7"
938        workdir="${build.4jdk7.dir}"        workdir="${build.4jdk7.dir}"
# Line 586  Line 941 
941          <!-- JDK8+ test classes -->          <!-- JDK8+ test classes -->
942          <exclude name="*8Test.java"/>          <exclude name="*8Test.java"/>
943          <exclude name="*9Test.java"/>          <exclude name="*9Test.java"/>
944            <exclude name="*10Test.java"/>
945          <exclude name="DoubleAccumulatorTest.java"/>          <exclude name="DoubleAccumulatorTest.java"/>
946          <exclude name="DoubleAdderTest.java"/>          <exclude name="DoubleAdderTest.java"/>
947          <exclude name="LongAccumulatorTest.java"/>          <exclude name="LongAccumulatorTest.java"/>
# Line 593  Line 949 
949          <exclude name="CompletableFutureTest.java"/>          <exclude name="CompletableFutureTest.java"/>
950          <exclude name="SplittableRandomTest.java"/>          <exclude name="SplittableRandomTest.java"/>
951          <exclude name="StampedLockTest.java"/>          <exclude name="StampedLockTest.java"/>
952            <exclude name="SubmissionPublisherTest.java"/>
953            <compilerarg value="-Werror"/>
954        </javac-elements>        </javac-elements>
955      </run-tck-tests>      </run-tck-tests>
956    </target>    </target>
957    
958      <!-- Runs tck tests for jsr166-4jdk7 via junit task (dead experiment) -->
959    <target name="4jdk7-test-tck-junit"    <target name="4jdk7-tck-junit" depends="4jdk7compile">
           depends="4jdk7compile"  
           description="Runs tck tests for jsr166-4jdk7 via junit task (experimental)">  
960    
961      <junit printsummary="true"      <junit printsummary="true"
962             showoutput="true"             showoutput="true"
# Line 622  Line 978 
978    
979        <test name="${jsr166.tckTestClass}" haltonfailure="no">        <test name="${jsr166.tckTestClass}" haltonfailure="no">
980        </test>        </test>
   
981      </junit>      </junit>
982    </target>    </target>
983    
984    <target name="4jdk7-test-jtreg"    <target name="4jdk7-jtreg" depends="4jdk7jar">
           depends="4jdk7jar"  
           description="Runs jtreg tests for jsr166-4jdk7 using the jtreg ant task">  
985      <run-jtreg-tests      <run-jtreg-tests
986         target="7"         target="7"
987         workdir="${build.4jdk7.dir}"         workdir="${build.4jdk7.dir}"
988         classes="${4jdk7product.jar}"         classes="${4jdk7product.jar}"/>
        jtregflags="-exclude:${jtreg.src.dir}/jdk8tests"/>  
989    </target>    </target>
990    
991      <target name="4jdk7-test" depends="4jdk7-tck, 4jdk7-jtreg"/>
992    
993    <target name="4jdk7-test"    <target name="4jdk7docs">
           depends="4jdk7-test-tck, 4jdk7-test-jtreg"  
           description="Runs tck and jtreg tests for jsr166-4jdk7">  
   </target>  
   
   
   <target name="4jdk7docs"  
           description="Builds javadocs for src/jdk7 to dist dir">  
   
994      <delete dir="${4jdk7docs.dir}"/>      <delete dir="${4jdk7docs.dir}"/>
995      <mkdir dir="${4jdk7docs.dir}"/>      <mkdir dir="${4jdk7docs.dir}"/>
996    
# Line 654  Line 999 
999               link="${java7.api.url}"               link="${java7.api.url}"
1000               overview="${4jdk7src.dir}/intro.html"               overview="${4jdk7src.dir}/intro.html"
1001               access="${build.javadoc.access}"               access="${build.javadoc.access}"
1002               sourcepath="${4jdk7src.dir}:${jdk7src.dir}"               sourcepath="${4jdk7src.dir}:${jdk7.src.dir}"
1003               classpath=""               classpath=""
1004               executable="${javadoc7}">               executable="${javadoc7}"
1005                 failonerror = "true">
1006        <fileset dir="${4jdk7src.dir}" defaultexcludes="yes">        <fileset dir="${4jdk7src.dir}" defaultexcludes="yes">
1007          <include name="**/*.java"/>          <include name="**/*.java"/>
1008        </fileset>        </fileset>
# Line 665  Line 1011 
1011      </javadoc>      </javadoc>
1012    </target>    </target>
1013    
1014      <target name="4jdk7dist" depends="4jdk7dist-jar, 4jdk7dist-docs"/>
1015    
1016    <target name="4jdk7dist"    <target name="4jdk7clean">
           depends="4jdk7dist-jar, 4jdk7dist-docs"  
           description="Puts all distributable products in single hierarchy"/>  
   
   
   <target name="4jdk7clean"  
           description="Removes all 4jdk7 build products">  
   
1017      <delete dir="${build.4jdk7.dir}"/>      <delete dir="${build.4jdk7.dir}"/>
   
1018    </target>    </target>
1019    
1020      <target name="4jdk7dist-jar" depends="4jdk7clean, 4jdk7jar">
   <target name="4jdk7dist-jar"  
           depends="4jdk7clean, 4jdk7jar">  
1021      <copy file="${4jdk7product.jar}" todir="${dist.dir}"/>      <copy file="${4jdk7product.jar}" todir="${dist.dir}"/>
1022    </target>    </target>
1023    
1024      <target name="4jdk7dist-docs" depends="4jdk7clean, 4jdk7docs">
   <target name="4jdk7dist-docs"  
           depends="4jdk7clean, 4jdk7docs">  
1025      <mirror-dir src="${4jdk7docs.dir}" dst="${dist.4jdk7docs.dir}"/>      <mirror-dir src="${4jdk7docs.dir}" dst="${dist.4jdk7docs.dir}"/>
1026    </target>    </target>
1027    
1028    
1029    <!-- jsr166x -->    <!-- jsr166x (no longer maintained) -->
   
   <target name="jsr166xcompile"  
           depends="configure-compiler"  
           description="Compiles jsr166x sources to build dir">  
1030    
1031      <target name="jsr166xcompile" depends="configure-compiler">
1032      <mkdir dir="${build.jsr166x.classes.dir}"/>      <mkdir dir="${build.jsr166x.classes.dir}"/>
1033    
1034      <javac srcdir="${topsrc.dir}"      <javac srcdir="${topsrc.dir}"
# Line 707  Line 1039 
1039             classpath=""             classpath=""
1040             bootclasspath="${bootclasspath6}"             bootclasspath="${bootclasspath6}"
1041             source="5"             source="5"
1042               target="5"
1043             includeAntRuntime="false"             includeAntRuntime="false"
1044             includeJavaRuntime="false"             includeJavaRuntime="false"
1045               encoding="ASCII"
1046             executable="${javac7}"             executable="${javac7}"
1047             fork="true">             fork="true">
   
1048        <include name="jsr166x/**/*.java"/>        <include name="jsr166x/**/*.java"/>
1049        <compilerarg value="-XDignore.symbol.file=true"/>        <compilerarg value="-XDignore.symbol.file=true"/>
1050        <compilerarg value="-Xlint:all,-unchecked,-rawtypes"/>        <compilerarg value="-Xlint:all,-unchecked,-rawtypes"/>
1051          <compilerarg value="-Werror"/>
1052        <compilerarg line="${build.args}"/>        <compilerarg line="${build.args}"/>
   
1053      </javac>      </javac>
1054    </target>    </target>
1055    
1056      <target name="jsr166xjar" depends="jsr166xcompile">
   <target name="jsr166xjar"  
           depends="jsr166xcompile"  
           description="Builds library jar from compiled sources">  
   
1057      <jar destfile="${jsr166x.jar}">      <jar destfile="${jsr166x.jar}">
1058        <fileset dir="${build.jsr166x.classes.dir}"/>        <fileset dir="${build.jsr166x.classes.dir}"/>
1059          <manifest>
1060            <attribute name="Built-By" value="${user.name}"/>
1061            <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
1062          </manifest>
1063      </jar>      </jar>
   
1064    </target>    </target>
1065    
1066      <target name="jsr166xdocs">
   <target name="jsr166xdocs"  
           description="Builds javadocs to dist dir">  
   
1067      <delete dir="${jsr166xdocs.dir}"/>      <delete dir="${jsr166xdocs.dir}"/>
1068      <mkdir dir="${jsr166xdocs.dir}"/>      <mkdir dir="${jsr166xdocs.dir}"/>
1069    
# Line 742  Line 1071 
1071               packagenames="jsr166x.*"               packagenames="jsr166x.*"
1072               link="${java.api.url}"               link="${java.api.url}"
1073               access="${build.javadoc.access}"               access="${build.javadoc.access}"
1074               sourcepath="${topsrc.dir}:${jdk6src.dir}"               sourcepath="${topsrc.dir}:${jdk6.src.dir}"
1075               bootclasspath="${bootclasspath6}"               bootclasspath="${bootclasspath6}"
1076               source="5"               source="5"
1077               executable="${javadoc7}">               executable="${javadoc7}"
1078                 failonerror = "true">
1079        <arg line="-Xdocrootparent ${java.docroot.url}"/>        <arg line="-Xdocrootparent ${java.docroot.url}"/>
1080        <arg value="-XDignore.symbol.file=true"/>        <arg value="-XDignore.symbol.file=true"/>
   
1081      </javadoc>      </javadoc>
1082    </target>    </target>
1083    
1084      <target name="jsr166xdist" depends="jsr166xdist-jar, jsr166xdist-docs"/>
1085    
1086    <target name="jsr166xdist"    <target name="jsr166xclean">
           depends="jsr166xdist-jar, jsr166xdist-docs"  
           description="Puts all distributable products in single hierarchy"/>  
   
   
   <target name="jsr166xclean"  
           description="Removes all jsr166x build products">  
   
1087      <delete dir="${build.jsr166x.dir}"/>      <delete dir="${build.jsr166x.dir}"/>
   
1088    </target>    </target>
1089    
1090      <target name="jsr166xdist-jar" depends="jsr166xclean, jsr166xjar">
   <target name="jsr166xdist-jar"  
           depends="jsr166xclean, jsr166xjar">  
1091      <copy file="${jsr166x.jar}" todir="${dist.dir}"/>      <copy file="${jsr166x.jar}" todir="${dist.dir}"/>
1092    </target>    </target>
1093    
1094    <target name="jsr166xdist-docs"    <target name="jsr166xdist-docs" depends="jsr166xclean, jsr166xdocs">
           depends="jsr166xclean, jsr166xdocs">  
1095      <mirror-dir src="${jsr166xdocs.dir}" dst="${dist.jsr166xdocs.dir}"/>      <mirror-dir src="${jsr166xdocs.dir}" dst="${dist.jsr166xdocs.dir}"/>
1096    </target>    </target>
1097    
   <!-- jsr166y -->  
1098    
1099      <!-- jsr166y (no longer maintained) -->
1100    
1101    <target name="jsr166ycompile"    <target name="jsr166ycompile" depends="configure-compiler">
           depends="configure-compiler"  
           description="Compiles jsr166y sources">  
   
1102      <mkdir dir="${build.jsr166y.classes.dir}"/>      <mkdir dir="${build.jsr166y.classes.dir}"/>
1103    
1104      <javac srcdir="${topsrc.dir}"      <javac srcdir="${topsrc.dir}"
# Line 791  Line 1107 
1107             debuglevel="${build.debuglevel}"             debuglevel="${build.debuglevel}"
1108             deprecation="${build.deprecation}"             deprecation="${build.deprecation}"
1109             source="6"             source="6"
1110               target="6"
1111             classpath=""             classpath=""
1112             bootclasspath="${bootclasspath6}"             bootclasspath="${bootclasspath6}"
1113             includeAntRuntime="false"             includeAntRuntime="false"
1114             includeJavaRuntime="false"             includeJavaRuntime="false"
1115               encoding="ASCII"
1116             executable="${javac7}"             executable="${javac7}"
1117             fork="true">             fork="true">
1118    
1119        <include name="jsr166y/**/*.java"/>        <include name="jsr166y/**/*.java"/>
1120        <compilerarg value="-XDignore.symbol.file=true"/>        <compilerarg value="-XDignore.symbol.file=true"/>
1121        <compilerarg value="-Xlint:all"/>        <compilerarg value="-Xlint:all"/>
1122          <compilerarg value="-Werror"/>
1123        <compilerarg line="${build.args}"/>        <compilerarg line="${build.args}"/>
   
1124      </javac>      </javac>
1125    </target>    </target>
1126    
1127      <target name="jsr166yjar" depends="jsr166ycompile">
   <target name="jsr166yjar"  
           depends="jsr166ycompile"  
           description="Builds library jar from compiled sources">  
   
1128      <jar destfile="${jsr166y.jar}" index="true">      <jar destfile="${jsr166y.jar}" index="true">
1129        <fileset dir="${build.jsr166y.classes.dir}"/>        <fileset dir="${build.jsr166y.classes.dir}"/>
1130          <manifest>
1131            <attribute name="Built-By" value="${user.name}"/>
1132            <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
1133          </manifest>
1134      </jar>      </jar>
   
1135    </target>    </target>
1136    
1137      <target name="jsr166ydocs">
   <target name="jsr166ydocs"  
           description="Builds javadocs to dist dir">  
   
1138      <delete dir="${jsr166ydocs.dir}"/>      <delete dir="${jsr166ydocs.dir}"/>
1139      <mkdir dir="${jsr166ydocs.dir}"/>      <mkdir dir="${jsr166ydocs.dir}"/>
1140    
# Line 828  Line 1142 
1142               packagenames="jsr166y.*"               packagenames="jsr166y.*"
1143               link="${java.api.url}"               link="${java.api.url}"
1144               access="${build.javadoc.access}"               access="${build.javadoc.access}"
1145               sourcepath="${topsrc.dir}:${jdk6src.dir}"               sourcepath="${topsrc.dir}:${jdk6.src.dir}"
1146               bootclasspath="${bootclasspath6}"               bootclasspath="${bootclasspath6}"
1147               source="6"               source="6"
1148               executable="${javadoc7}">               executable="${javadoc7}"
1149                 failonerror = "true">
1150        <arg line="-Xdocrootparent ${java.docroot.url}"/>        <arg line="-Xdocrootparent ${java.docroot.url}"/>
1151        <arg value="-XDignore.symbol.file=true"/>        <arg value="-XDignore.symbol.file=true"/>
   
1152      </javadoc>      </javadoc>
1153    </target>    </target>
1154    
1155      <target name="jsr166ydist" depends="jsr166ydist-jar, jsr166ydist-docs"/>
1156    
1157    <target name="jsr166ydist"    <target name="jsr166yclean">
           depends="jsr166ydist-jar, jsr166ydist-docs"  
           description="Puts all distributable products in single hierarchy"/>  
   
   
   <target name="jsr166yclean"  
           description="Removes all jsr166y build products">  
   
1158      <delete dir="${build.jsr166y.dir}"/>      <delete dir="${build.jsr166y.dir}"/>
   
1159    </target>    </target>
1160    
1161      <target name="jsr166ydist-jar" depends="jsr166yclean, jsr166yjar">
   <target name="jsr166ydist-jar"  
           depends="jsr166yclean, jsr166yjar">  
1162      <copy file="${jsr166y.jar}" todir="${dist.dir}"/>      <copy file="${jsr166y.jar}" todir="${dist.dir}"/>
1163    </target>    </target>
1164    
1165    <target name="jsr166ydist-docs"    <target name="jsr166ydist-docs" depends="jsr166yclean, jsr166ydocs">
           depends="jsr166yclean, jsr166ydocs">  
1166      <mirror-dir src="${jsr166ydocs.dir}" dst="${dist.jsr166ydocs.dir}"/>      <mirror-dir src="${jsr166ydocs.dir}" dst="${dist.jsr166ydocs.dir}"/>
1167    </target>    </target>
1168    
1169    
1170    <!-- extra166y -->    <!-- extra166y (no longer maintained) -->
   
   
   <target name="extra166ycompile"  
           depends="configure-compiler, jsr166yjar"  
           description="Compiles extra166y sources">  
1171    
1172      <target name="extra166ycompile" depends="configure-compiler, jsr166yjar">
1173      <mkdir dir="${build.extra166y.classes.dir}"/>      <mkdir dir="${build.extra166y.classes.dir}"/>
1174    
1175      <javac srcdir="${topsrc.dir}"      <javac srcdir="${topsrc.dir}"
# Line 880  Line 1180 
1180             bootclasspath="@{jsr166y.jar}:${bootclasspath6}"             bootclasspath="@{jsr166y.jar}:${bootclasspath6}"
1181             classpath=""             classpath=""
1182             source="6"             source="6"
1183               target="6"
1184             includeAntRuntime="false"             includeAntRuntime="false"
1185             includeJavaRuntime="false"             includeJavaRuntime="false"
1186               encoding="ASCII"
1187             executable="${javac7}"             executable="${javac7}"
1188             fork="true">             fork="true">
1189    
1190        <include name="extra166y/**/*.java"/>        <include name="extra166y/**/*.java"/>
1191        <compilerarg value="-XDignore.symbol.file=true"/>        <compilerarg value="-XDignore.symbol.file=true"/>
1192        <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial"/>        <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial"/>
1193          <compilerarg value="-Werror"/>
1194        <compilerarg line="${build.args}"/>        <compilerarg line="${build.args}"/>
   
1195      </javac>      </javac>
1196    </target>    </target>
1197    
1198      <target name="extra166yjar" depends="extra166ycompile">
   <target name="extra166yjar"  
           depends="extra166ycompile"  
           description="Builds library jar from compiled sources">  
   
1199      <jar destfile="${extra166y.jar}" index="true">      <jar destfile="${extra166y.jar}" index="true">
1200        <fileset dir="${build.extra166y.classes.dir}"/>        <fileset dir="${build.extra166y.classes.dir}"/>
1201          <manifest>
1202            <attribute name="Built-By" value="${user.name}"/>
1203            <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
1204          </manifest>
1205      </jar>      </jar>
   
1206    </target>    </target>
1207    
1208      <target name="extra166ydocs">
   <target name="extra166ydocs"  
           description="Builds javadocs to build dir">  
   
1209      <delete dir="${extra166ydocs.dir}"/>      <delete dir="${extra166ydocs.dir}"/>
1210      <mkdir dir="${extra166ydocs.dir}"/>      <mkdir dir="${extra166ydocs.dir}"/>
1211    
# Line 915  Line 1213 
1213               packagenames="extra166y.*"               packagenames="extra166y.*"
1214               link="${java.api.url}"               link="${java.api.url}"
1215               access="${build.javadoc.access}"               access="${build.javadoc.access}"
1216               sourcepath="${topsrc.dir}:${jdk6src.dir}"               sourcepath="${topsrc.dir}:${jdk6.src.dir}"
1217               bootclasspath="${bootclasspath6}"               bootclasspath="${bootclasspath6}"
1218               source="6"               source="6"
1219               executable="${javadoc7}">               executable="${javadoc7}">
1220        <arg line="-Xdocrootparent ${java.docroot.url}"/>        <arg line="-Xdocrootparent ${java.docroot.url}"/>
1221        <arg value="-XDignore.symbol.file=true"/>        <arg value="-XDignore.symbol.file=true"/>
   
1222      </javadoc>      </javadoc>
1223    </target>    </target>
1224    
1225      <target name="extra166ydist" depends="extra166ydist-jar, extra166ydist-docs"/>
1226    
1227    <target name="extra166ydist"    <target name="extra166yclean">
           depends="extra166ydist-jar, extra166ydist-docs"  
           description="Puts all distributable products in single hierarchy"/>  
   
   
   <target name="extra166yclean"  
           description="Removes all extra166y build products">  
   
1228      <delete dir="${build.extra166y.dir}"/>      <delete dir="${build.extra166y.dir}"/>
   
1229    </target>    </target>
1230    
1231      <target name="extra166ydist-jar" depends="extra166yclean, extra166yjar">
   <target name="extra166ydist-jar"  
           depends="extra166yclean, extra166yjar">  
1232      <copy file="${extra166y.jar}" todir="${dist.dir}"/>      <copy file="${extra166y.jar}" todir="${dist.dir}"/>
1233    </target>    </target>
1234    
1235    <target name="extra166ydist-docs"    <target name="extra166ydist-docs" depends="extra166yclean, extra166ydocs">
           depends="extra166yclean, extra166ydocs">  
1236      <mirror-dir src="${extra166ydocs.dir}" dst="${dist.extra166ydocs.dir}"/>      <mirror-dir src="${extra166ydocs.dir}" dst="${dist.extra166ydocs.dir}"/>
1237    </target>    </target>
1238    
1239    <!-- jsr166e -->  
1240      <!-- jsr166e (no longer maintained) -->
1241    
1242    <property name="build.jsr166e.java.version" value="6"/>    <property name="build.jsr166e.java.version" value="6"/>
1243    <property name="build.jsr166e.javac" value="${javac6}"/>    <property name="build.jsr166e.javac" value="${javac6}"/>
1244    
1245    <target name="jsr166ecompile"    <target name="jsr166ecompile" depends="configure-compiler">
           depends="configure-compiler"  
           description="Compiles jsr166e sources">  
   
1246      <mkdir dir="${build.jsr166e.classes.dir}"/>      <mkdir dir="${build.jsr166e.classes.dir}"/>
1247    
1248      <javac srcdir="${topsrc.dir}"      <javac srcdir="${topsrc.dir}"
# Line 966  Line 1251 
1251             debuglevel="${build.debuglevel}"             debuglevel="${build.debuglevel}"
1252             deprecation="${build.deprecation}"             deprecation="${build.deprecation}"
1253             source="${build.jsr166e.java.version}"             source="${build.jsr166e.java.version}"
1254               target="${build.jsr166e.java.version}"
1255             classpath=""             classpath=""
1256             includeAntRuntime="false"             includeAntRuntime="false"
1257             includeJavaRuntime="false"             includeJavaRuntime="false"
# Line 975  Line 1261 
1261        <include name="jsr166e/**/*.java"/>        <include name="jsr166e/**/*.java"/>
1262        <compilerarg value="-XDignore.symbol.file=true"/>        <compilerarg value="-XDignore.symbol.file=true"/>
1263        <compilerarg value="-Xlint:all"/>        <compilerarg value="-Xlint:all"/>
1264          <compilerarg value="-Werror"/>
1265        <compilerarg line="${build.args}"/>        <compilerarg line="${build.args}"/>
   
1266      </javac>      </javac>
1267    </target>    </target>
1268    
   <!-- jsr166e: find doclint errors -->  
1269    <target name="jsr166edoclint">    <target name="jsr166edoclint">
   
1270      <mkdir dir="${build.jsr166e.classes.dir}"/>      <mkdir dir="${build.jsr166e.classes.dir}"/>
1271    
1272      <javac srcdir="${topsrc.dir}"      <javac srcdir="${topsrc.dir}"
# Line 991  Line 1275 
1275             debuglevel="${build.debuglevel}"             debuglevel="${build.debuglevel}"
1276             deprecation="${build.deprecation}"             deprecation="${build.deprecation}"
1277             source="${build.jsr166e.java.version}"             source="${build.jsr166e.java.version}"
1278               target="${build.jsr166e.java.version}"
1279             classpath=""             classpath=""
1280             bootclasspath="${bootclasspath7}"             bootclasspath="${bootclasspath6}"
1281             includeAntRuntime="false"             includeAntRuntime="false"
1282             includeJavaRuntime="false"             includeJavaRuntime="false"
1283             executable="${javac8}"             executable="${javac8}"
# Line 1001  Line 1286 
1286        <include name="jsr166e/**/*.java"/>        <include name="jsr166e/**/*.java"/>
1287        <compilerarg value="-XDignore.symbol.file=true"/>        <compilerarg value="-XDignore.symbol.file=true"/>
1288        <compilerarg value="-Xlint:all"/>        <compilerarg value="-Xlint:all"/>
1289          <compilerarg value="-Werror"/>
1290        <compilerarg value="-Xdoclint:all/protected"/>        <compilerarg value="-Xdoclint:all/protected"/>
   
1291      </javac>      </javac>
1292    </target>    </target>
1293    
1294      <target name="jsr166ejar" depends="jsr166ecompile">
   <target name="jsr166ejar"  
           depends="jsr166ecompile"  
           description="Builds library jar from compiled sources">  
   
1295      <jar destfile="${jsr166e.jar}" index="true">      <jar destfile="${jsr166e.jar}" index="true">
1296        <fileset dir="${build.jsr166e.classes.dir}"/>        <fileset dir="${build.jsr166e.classes.dir}"/>
1297          <manifest>
1298            <attribute name="Built-By" value="${user.name}"/>
1299            <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
1300          </manifest>
1301      </jar>      </jar>
   
1302    </target>    </target>
1303    
1304      <target name="jsr166edocs">
   <target name="jsr166edocs"  
           description="Builds javadocs to build dir">  
   
1305      <delete dir="${jsr166edocs.dir}"/>      <delete dir="${jsr166edocs.dir}"/>
1306      <mkdir dir="${jsr166edocs.dir}"/>      <mkdir dir="${jsr166edocs.dir}"/>
1307    
# Line 1028  Line 1309 
1309               packagenames="jsr166e.*"               packagenames="jsr166e.*"
1310               link="${java.api.url}"               link="${java.api.url}"
1311               access="${build.javadoc.access}"               access="${build.javadoc.access}"
1312               sourcepath="${topsrc.dir}:${jdk6src.dir}"               sourcepath="${topsrc.dir}:${jdk6.src.dir}"
1313               source="${build.jsr166e.java.version}"               source="${build.jsr166e.java.version}"
1314               executable="${javadoc7}">               executable="${javadoc7}"
1315                 failonerror = "true">
1316        <arg line="-Xdocrootparent ${java.docroot.url}"/>        <arg line="-Xdocrootparent ${java.docroot.url}"/>
1317        <arg value="-XDignore.symbol.file=true"/>        <arg value="-XDignore.symbol.file=true"/>
   
1318      </javadoc>      </javadoc>
1319    </target>    </target>
1320    
1321      <target name="jsr166e-tck-one-java-version" depends="jsr166ejar">
   <target name="jsr166e-test-tck-one-java-version"  
           depends="jsr166ejar">  
   
1322      <echo message="Testing with jdk${build.jsr166e.java.version} ..."/>      <echo message="Testing with jdk${build.jsr166e.java.version} ..."/>
   
1323      <run-tck-tests      <run-tck-tests
1324        tck.src.dir="${test.src.dir}/tck-jsr166e"        tck.src.dir="${test.src.dir}/tck-jsr166e"
1325        target="${build.jsr166e.java.version}"        target="${build.jsr166e.java.version}"
# Line 1050  Line 1327 
1327        classes="${jsr166e.jar}"/>        classes="${jsr166e.jar}"/>
1328    </target>    </target>
1329    
1330    <target name="jsr166e-test-tck"    <target name="jsr166e-tck">
           description="Runs tck tests for jsr166e for multiple java versions">  
1331    
1332  <!--     <antcall target="clean"/> -->  <!--     <antcall target="clean"/> -->
1333  <!--     <antcall target="jsr166e-test-tck-one-java-version"> -->  <!--     <antcall target="jsr166e-tck-one-java-version"> -->
1334  <!--       <param name="build.jsr166e.java.version" value="8"/> -->  <!--       <param name="build.jsr166e.java.version" value="8"/> -->
1335  <!--       <param name="build.jsr166e.javac" value="${javac8}"/> -->  <!--       <param name="build.jsr166e.javac" value="${javac8}"/> -->
1336  <!--     </antcall> -->  <!--     </antcall> -->
1337    
1338      <antcall target="clean"/>      <antcall target="clean"/>
1339      <antcall target="jsr166e-test-tck-one-java-version">      <antcall target="jsr166e-tck-one-java-version">
1340        <param name="build.jsr166e.java.version" value="7"/>        <param name="build.jsr166e.java.version" value="7"/>
1341        <param name="build.jsr166e.javac" value="${javac7}"/>        <param name="build.jsr166e.javac" value="${javac7}"/>
1342      </antcall>      </antcall>
1343    
1344      <antcall target="clean"/>      <antcall target="clean"/>
1345      <antcall target="jsr166e-test-tck-one-java-version">      <antcall target="jsr166e-tck-one-java-version">
1346        <param name="build.jsr166e.java.version" value="6"/>        <param name="build.jsr166e.java.version" value="6"/>
1347        <param name="build.jsr166e.javac" value="${javac6}"/>        <param name="build.jsr166e.javac" value="${javac6}"/>
1348      </antcall>      </antcall>
1349    </target>    </target>
1350    
1351      <target name="jsr166e-test" depends="jsr166e-tck"/>
1352    
1353    <target name="jsr166e-test"    <target name="jsr166edist" depends="jsr166edist-jar, jsr166edist-docs"/>
           depends="jsr166e-test-tck"  
           description="Runs all tests for jsr166e">  
   </target>  
   
   <target name="jsr166edist"  
           depends="jsr166edist-jar, jsr166edist-docs"  
           description="Puts all distributable products in single hierarchy"/>  
   
1354    
1355    <target name="jsr166eclean"    <target name="jsr166eclean">
           description="Removes all jsr166e build products">  
1356      <delete dir="${build.jsr166e.dir}"/>      <delete dir="${build.jsr166e.dir}"/>
1357    </target>    </target>
1358    
   
1359    <target name="jsr166edist-jar"    <target name="jsr166edist-jar"
1360            depends="jsr166eclean, jsr166ejar">            depends="jsr166eclean, jsr166ejar">
1361      <copy file="${jsr166e.jar}" todir="${dist.dir}"/>      <copy file="${jsr166e.jar}" todir="${dist.dir}"/>
1362    </target>    </target>
1363    
1364    <target name="jsr166edist-docs"    <target name="jsr166edist-docs" depends="jsr166eclean, jsr166edocs">
           depends="jsr166eclean, jsr166edocs">  
1365      <mirror-dir src="${jsr166edocs.dir}" dst="${dist.jsr166edocs.dir}"/>      <mirror-dir src="${jsr166edocs.dir}" dst="${dist.jsr166edocs.dir}"/>
1366    </target>    </target>
1367    
1368    
1369  <!-- Find buglets that can be detected by static build tools -->  <!-- Find buglets that can be detected by static build tools -->
1370    
1371    <target name="lint">  <!--   <target name="lint"> -->
1372      <antcall target="dists">  <!--     <antcall target="dists"> -->
1373    <!--       <param name="build.javadoc.access" value="protected"/> -->
1374    <!--     </antcall> -->
1375    <!--   </target> -->
1376    
1377    <!-- Generates all doclint warnings, even for private methods (rarely useful) -->
1378      <target name="doclint-private">
1379        <antcall target="dist">
1380        <param name="build.javadoc.access" value="private"/>        <param name="build.javadoc.access" value="private"/>
1381      </antcall>      </antcall>
1382    </target>    </target>
1383    
1384    
1385    <!-- ==============================================================
1386      Experimental errorprone support
1387      https://errorprone.info
1388      https://errorprone.info/docs/installation
1389      https://github.com/google/error-prone/issues/1143
1390    =================================================================== -->
1391      <path id="errorprone.processorpath.path">
1392        <pathelement location="${lib.dir}/error_prone_core-2.3.2-with-dependencies.jar"/>
1393        <pathelement location="${lib.dir}/dataflow-2.5.7.jar"/>
1394        <pathelement location="${lib.dir}/javacutil-2.5.7.jar"/>
1395        <pathelement location="${lib.dir}/jFormatString-3.0.0.jar"/>
1396      </path>
1397      <property name="errorprone.processorpath" refid="errorprone.processorpath.path" />
1398      <property name="errorprone.jsr166.user.flags" value=""/>
1399      <property name="errorprone.jsr166.flags"
1400                value="-Xep:HashtableContains:OFF
1401                       -Xep:JdkObsolete:OFF
1402                       -Xep:MissingOverride:OFF
1403                       -Xep:MissingFail:OFF
1404                       -Xep:ThreadPriorityCheck:OFF
1405                       -Xep:MixedArrayDimensions:ERROR
1406                       -Xep:RemoveUnusedImports:ERROR
1407                       -Xep:EmptyIf:ERROR
1408                       -Xep:MultipleTopLevelClasses:ERROR
1409                       -Xep:ClassName:ERROR
1410                       -Xep:LongLiteralLowerCaseSuffix:ERROR
1411                       -Xep:RedundantThrows:ERROR
1412                       -Xep:IdentityBinaryExpression:WARN
1413                       -Xep:ConstructorInvokesOverridable:WARN
1414                       -Xep:MethodCanBeStatic:WARN
1415                       ${errorprone.jsr166.user.flags}"/>
1416      <!-- -Xep:WildcardImport:ERROR -->
1417      <property name="errorprone.jsr166.test.flags"
1418                value="-Xep:StringSplitter:OFF
1419                       -Xep:BoxedPrimitiveConstructor:OFF
1420                       -Xep:ModifyingCollectionWithItself:OFF"/>
1421      <!-- ant -emacs errorprone |& grep -EA1 '(warning|error):|warnings' -->
1422      <target name="errorprone"
1423              depends="clean, configure-compiler"
1424              description="Run errorprone over jsr166 source code (experimental)">
1425    
1426        <local name="destdir"/>
1427        <property name="destdir" value="${build.classes.dir}/java.base"/>
1428        <mkdir dir="${destdir}"/>
1429    
1430        <javac srcdir="${src.dir}"
1431               destdir="${destdir}"
1432               debug="${build.debug}"
1433               debuglevel="${build.debuglevel}"
1434               deprecation="${build.deprecation}"
1435               classpath=""
1436               includeAntRuntime="false"
1437               includeJavaRuntime="false"
1438               encoding="ASCII"
1439               executable="${build.main.javac}"
1440               fork="true">
1441    
1442          <include name="**/*.java"/>
1443          <!-- Needed to silence -Xep:FutureReturnValueIgnored -->
1444          <compilerarg value="-J--illegal-access=permit"/>
1445          <compilerarg value="-XDcompilePolicy=simple"/>
1446          <compilerarg value="-processorpath"/>
1447          <compilerarg pathref="errorprone.processorpath.path"/>
1448          <compilerarg value="-Xplugin:ErrorProne
1449                              ${errorprone.jsr166.flags}"/>
1450          <compilerarg value="--patch-module=java.base=${src.dir}"/>
1451          <compilerarg value="-Xprefer:source"/>
1452          <compilerarg value="-XDignore.symbol.file=true"/>
1453          <compilerarg value="-Xlint:all"/>
1454          <compilerarg value="-Xdoclint:all/protected,reference/private"/>
1455          <compilerarg line="-Xmaxerrs 3000 -Xmaxwarns 3000"/>
1456          <compilerarg line="${build.args}"/>
1457        </javac>
1458    
1459        <jar destfile="${product.jar}">
1460          <fileset dir="${destdir}"/>
1461        </jar>
1462    
1463        <run-tck-tests
1464          target="${java.runtime.target}"
1465          workdir="${build.dir}"
1466          classes="${product.jar}">
1467          <javac-elements>
1468            <!-- Needed to silence -Xep:FutureReturnValueIgnored -->
1469            <compilerarg value="-J--illegal-access=permit"/>
1470            <compilerarg value="-XDcompilePolicy=simple"/>
1471            <compilerarg line="-processorpath ${errorprone.processorpath}"/>
1472            <compilerarg value="-Xplugin:ErrorProne
1473                                ${errorprone.jsr166.flags}
1474                                ${errorprone.jsr166.test.flags}"/>
1475            <compilerarg line="-Xmaxerrs 3000 -Xmaxwarns 3000"/>
1476          </javac-elements>
1477        </run-tck-tests>
1478      </target>
1479    
1480      <!-- ant -emacs errorprone-jtreg |& grep -EA1 '(warning|error):' -->
1481      <!-- -XDcompilePolicy=simple or byfile avoids confusing UnusedImports -->
1482      <target name="errorprone-jtreg"
1483              depends="jar"
1484              description="Run errorprone over jtreg tests (experimental)">
1485    
1486        <run-jtreg-tests
1487           target="${java.runtime.target}"
1488           workdir="${build.dir}"
1489           classes="${product.jar}"
1490           verbose="all">
1491          <jtreg-elements>
1492            <arg value="-javacoption:-XDcompilePolicy=simple"/>
1493            <arg value="-javacoption:-processorpath"/>
1494            <arg value="-javacoption:${errorprone.processorpath}"/>
1495            <arg value="-javacoption:-Xplugin:ErrorProne
1496                                ${errorprone.jsr166.flags}
1497                                ${errorprone.jsr166.test.flags}
1498                                -Xep:MultipleTopLevelClasses:WARN
1499                                -Xep:NonAtomicVolatileUpdate:OFF"/>
1500          </jtreg-elements>
1501        </run-jtreg-tests>
1502      </target>
1503    
1504    
1505    <!-- ==============================================================
1506      Running guava tests against jsr166 code
1507    =================================================================== -->
1508    
1509    <!-- <ivy:cachepath pathid="lib.path.id" inline="true" conf="*" -->
1510    <!--   organisation="com.google.guava" module="guava-testlib" revision="21.0"/> -->
1511    <!-- <property name="guava.version" value="21.0"/> -->
1512    
1513    <!-- HOWTO debug print a path id -->
1514    <!-- <pathconvert property="guava.testlib.classpath" refid="guava.testlib.classpath" /> -->
1515    <!-- <echo message="guava.testlib.classpath=${guava.testlib.classpath}"/> -->
1516    
1517    <!-- <ivy:retrieve pathid="guava.tests.classpath" type="jar" inline="true" conf="*" pattern="${lib.dir}/[type]/[artifact].[ext]" -->
1518    <!--   organisation="com.google.guava" module="guava-tests"/> -->
1519    <!-- <get src="http://repo2.maven.org/maven2/com/google/guava/guava-tests/${guava.version}/guava-tests-${guava.version}-tests.jar" -->
1520    <!--   dest="${lib.dir}/jar/guava-tests-tests.jar" usetimestamp="true"/> -->
1521    <!--     <ivy:cachepath pathid="lib.path.id" inline="true" conf="*" type="*" -->
1522    <!--       organisation="com.google.guava" module="guava-testlib" revision="${guava.version}"/> -->
1523    
1524    <!-- <test name="com.google.common.collect.testing.TestsForQueuesInJavaUtil"/> -->
1525    <!-- <test name="com.google.common.collect.testing.TestsForListsInJavaUtil"/> -->
1526    <!-- <test name="com.google.common.collect.testing.TestsForSetsInJavaUtil"/> -->
1527    <!-- <test name="com.google.common.collect.testing.TestsForMapsInJavaUtil"/> -->
1528    
1529    <!-- <ivy:retrieve pathid="guava.testlib.classpath" -->
1530    <!--   type="*" inline="true" conf="*(private),*(public)" -->
1531    <!--   pattern="${guava.dir}/[artifact].[ext]" -->
1532    <!--   organisation="com.google.guava" module="guava-testlib"/> -->
1533    
1534    <!-- Work around bug below by downloading guava-testlib-tests.jar "by hand": -->
1535    <!-- https://issues.apache.org/jira/browse/IVY-1444 -->
1536    <!-- maven tests artifacts cannot be downloaded because they are mapped to private configurations -->
1537    
1538      <target name="init-ivy">
1539        <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/2.4.0/ivy-2.4.0.jar"
1540             dest="${build.dir}/ivy.jar" usetimestamp="true" skipexisting="true"/>
1541        <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant"
1542                 classpath="${build.dir}/ivy.jar"/>
1543      </target>
1544    
1545      <target name="guava-tests" depends="jar, init-ivy"
1546              description="Guava tests run against jsr166 collections">
1547        <property name="guava.dir" value="${build.dir}/guava-testlib"/>
1548        <mkdir dir="${guava.dir}"/>
1549        <ivy:retrieve pathid="guava.testlib.classpath"
1550          type="jar,bundle" inline="true" conf="default,master"
1551          pattern="${guava.dir}/[artifact].[ext]"
1552          organisation="com.google.guava" module="guava-testlib"/>
1553        <property name="guava.version" value="21.0"/>
1554        <get src="http://repo2.maven.org/maven2/com/google/guava/guava-testlib/${guava.version}/guava-testlib-${guava.version}-tests.jar"
1555             dest="${guava.dir}/guava-testlib-tests.jar" usetimestamp="true"/>
1556        <junit printsummary="true" showoutput="true" haltonfailure="true"
1557               jvm="${build.main.java}" fork="true">
1558          <jvmarg line="-ea -esa --patch-module=java.base=${product.jar}"/>
1559          <formatter type="brief"/>
1560          <classpath>
1561            <pathelement location="${guava.dir}/guava-testlib-tests.jar"/>
1562            <path refid="guava.testlib.classpath"/>
1563          </classpath>
1564    
1565          <!-- "6" in "OpenJdk6Tests" misleadingly means "6+" -->
1566          <test name="com.google.common.collect.testing.OpenJdk6Tests"/>
1567        </junit>
1568      </target>
1569    
1570  </project>  </project>

Legend:
Removed from v.1.154  
changed lines
  Added in v.1.293

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