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

Annotation of /jsr166/build.xml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.315 - (hide annotations)
Fri Jun 5 00:59:33 2020 UTC (5 months, 3 weeks ago) by jsr166
Branch: MAIN
Changes since 1.314: +1 -1 lines
File MIME type: text/xml
never run javadoc on files in jdk/** tree

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

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