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

Contents of /jsr166/build.xml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.189 - (show annotations)
Thu Nov 5 15:02:34 2015 UTC (3 years, 10 months ago) by jsr166
Branch: MAIN
Changes since 1.188: +1 -0 lines
File MIME type: text/xml
build class file version 50 for jsr166y

1 <project name="jsr166" default="usage"
2 xmlns:if="ant:if" xmlns:unless="ant:unless">
3
4 <description>
5 ------------------------------------------------------------------------------
6 Build file for JSR-166
7
8 Usage: ant [target]
9
10 User-specific settings are read from user.properties.
11 See user.properties.sample for an explanation of some useful settings.
12
13 The repository contains all dependencies except for ant and the JDK
14 itself. Because the JDK version matters and because different
15 targets require different JDKs, we assume that users have created a
16 hierarchy containing:
17 $HOME/jdk/jdk6
18 $HOME/jdk/jdk7
19 $HOME/jdk/jdk8
20 $HOME/jdk/jdk9
21 where each of the above is a JDK or a symlink to same, and
22 $HOME/jdk/src/jdk6
23 $HOME/jdk/src/jdk7
24 $HOME/jdk/src/jdk8
25 $HOME/jdk/src/jdk9
26 where each of the above is a complete JDK source tree
27 (e.g. mercurial forest) or a symlink to same.
28
29 Alternatively, define ant variables thus:
30 ant -Djdk$N.home=...
31 for $N in 6 7 8 9 ...
32
33 As of 2015-09, there is incomplete hacky support for jigsaw
34 Build for jigsaw using something like:
35 ant -Djdk9.home="$HOME/jdk/jigsaw" -Djdk9.src.dir="$HOME/jdk/src/jigsaw" clean test dist
36 "docs" target is still broken.
37 ------------------------------------------------------------------------------
38 </description>
39
40 <!-- Display main targets by running 'ant -projecthelp' -->
41 <target name="usage">
42 <java classname="org.apache.tools.ant.Main">
43 <arg value="-projecthelp" />
44 </java>
45 </target>
46
47 <!-- HOWTO printf debug: <echo message="prop=${prop}"/> -->
48
49 <!-- User-specific settings -->
50 <property file="user.properties"/>
51
52
53 <!-- Compilation options -->
54 <property name="build.sourcelevel" value="6"/>
55 <property name="build.debug" value="true"/>
56 <property name="build.debuglevel" value="source,lines,vars"/>
57 <property name="build.deprecation" value="false"/>
58 <property name="build.javadoc.access" value="protected"/>
59
60 <!-- Build locations -->
61 <property name="build.dir" location="build"/>
62 <property name="build.classes.dir" location="${build.dir}/classes"/>
63 <property name="build.testcases.dir" location="${build.dir}/testcases"/>
64 <property name="build.loops.dir" location="${build.dir}/loops"/>
65 <property name="build.reports.dir" location="${build.dir}/reports"/>
66
67 <property name="build.4jdk7.dir" location="${build.dir}/jsr166-4jdk7"/>
68 <property name="build.4jdk7.classes.dir" location="${build.4jdk7.dir}/classes"/>
69 <property name="build.4jdk7.tck.classes.dir" location="${build.4jdk7.dir}/tck-classes"/>
70 <property name="build.4jdk7.docs.dir" location="${build.4jdk7.dir}/docs"/>
71
72 <property name="build.jsr166x.dir" location="${build.dir}/jsr166x"/>
73 <property name="build.jsr166y.dir" location="${build.dir}/jsr166y"/>
74 <property name="build.jsr166e.dir" location="${build.dir}/jsr166e"/>
75 <property name="build.extra166y.dir" location="${build.dir}/extra166y"/>
76
77 <property name="build.jsr166x.classes.dir" location="${build.jsr166x.dir}/classes"/>
78 <property name="build.jsr166y.classes.dir" location="${build.jsr166y.dir}/classes"/>
79 <property name="build.jsr166e.classes.dir" location="${build.jsr166e.dir}/classes"/>
80 <property name="build.extra166y.classes.dir" location="${build.extra166y.dir}/classes"/>
81
82 <!-- JDK locations -->
83 <property name="jdks.home" location="${user.home}/jdk"/>
84
85 <macrodef name="defjdklocations">
86 <attribute name="v"/>
87 <sequential>
88 <property name="jdk@{v}.home" location="${jdks.home}/jdk@{v}"/>
89 <property name="java@{v}" location="${jdk@{v}.home}/bin/java"/>
90 <property name="javac@{v}" location="${jdk@{v}.home}/bin/javac"/>
91 <property name="javadoc@{v}" location="${jdk@{v}.home}/bin/javadoc"/>
92 <local name="have.java.base"/>
93 <available property="have.java.base"
94 file="${jdks.home}/src/jdk@{v}/jdk/src/java.base/share/classes" type="dir"/>
95 <property name="jdk@{v}src.dir" location="${jdks.home}/src/jdk@{v}/jdk/src/java.base/share/classes"
96 if:set="have.java.base"/>
97 <property name="jdk@{v}src.dir" location="${jdks.home}/src/jdk@{v}/jdk/src/share/classes"
98 unless:set="have.java.base"/>
99 <local name="modules"/>
100 <available property="modules" file="${jdk@{v}.home}/jmods" type="dir"/>
101 <local name="boot.jar.dir"/>
102 <property name="boot.jar.dir" location="${jdk@{v}.home}/jre/lib" unless:set="modules"/>
103 <path id="bootclasspath@{v}" unless:set="modules">
104 <pathelement path="${boot.jar.dir}/resources.jar"/>
105 <pathelement path="${boot.jar.dir}/rt.jar"/>
106 <pathelement path="${boot.jar.dir}/jsse.jar"/>
107 <pathelement path="${boot.jar.dir}/jce.jar"/>
108 <pathelement path="${boot.jar.dir}/charsets.jar"/>
109 </path>
110 <property name="bootclasspath@{v}" value="${toString:bootclasspath@{v}}" unless:set="modules"/>
111 </sequential>
112 </macrodef>
113
114 <macrodef name="mirror-dir">
115 <attribute name="src"/>
116 <attribute name="dst"/>
117 <sequential>
118 <delete dir="@{dst}"/>
119 <mkdir dir="@{dst}"/>
120 <copy todir="@{dst}" preservelastmodified="true">
121 <fileset dir="@{src}"/>
122 </copy>
123 </sequential>
124 </macrodef>
125
126 <defjdklocations v="6"/>
127 <defjdklocations v="7"/>
128 <defjdklocations v="8"/>
129 <defjdklocations v="9"/>
130
131 <!-- Source locations -->
132 <property name="src.dir" location="${basedir}/src/main"/>
133 <property name="test.src.dir" location="${basedir}/src/test"/>
134 <property name="loops.src.dir" location="${basedir}/src/loops"/>
135 <property name="tck.src.dir" location="${test.src.dir}/tck"/>
136 <property name="jtreg7.src.dir" location="${test.src.dir}/jtreg-jdk7"/>
137 <property name="jtreg8.src.dir" location="${test.src.dir}/jtreg"/>
138 <property name="jtreg9.src.dir" location="${test.src.dir}/jtreg"/>
139 <property name="jtreg.src.dir" location="${jtreg9.src.dir}"/>
140 <property name="lib.dir" location="${basedir}/lib"/>
141 <property name="dist.dir" location="${basedir}/dist"/>
142 <property name="topsrc.dir" location="${basedir}/src"/>
143 <property name="4jdk7src.dir" location="${topsrc.dir}/jdk7"/>
144 <property name="jsr166xsrc.dir" location="${topsrc.dir}/jsr166x"/>
145 <property name="jsr166ysrc.dir" location="${topsrc.dir}/jsr166y"/>
146 <property name="jsr166esrc.dir" location="${topsrc.dir}/jsr166e"/>
147 <property name="extra166ysrc.dir" location="${topsrc.dir}/extra166y"/>
148
149 <!-- Javadoc locations -->
150 <property name="docs.dir" location="${build.dir}/docs"/>
151 <property name="4jdk7docs.dir" location="${build.4jdk7.dir}/docs"/>
152 <property name="jsr166xdocs.dir" location="${build.jsr166x.dir}/docs"/>
153 <property name="jsr166ydocs.dir" location="${build.jsr166y.dir}/docs"/>
154 <property name="jsr166edocs.dir" location="${build.jsr166e.dir}/docs"/>
155 <property name="extra166ydocs.dir" location="${build.extra166y.dir}/docs"/>
156
157 <property name="dist.docs.dir" location="${dist.dir}/docs"/>
158 <property name="dist.4jdk7docs.dir" location="${dist.dir}/jsr166-4jdk7docs"/>
159 <property name="dist.jsr166xdocs.dir" location="${dist.dir}/jsr166xdocs"/>
160 <property name="dist.jsr166ydocs.dir" location="${dist.dir}/jsr166ydocs"/>
161 <property name="dist.jsr166edocs.dir" location="${dist.dir}/jsr166edocs"/>
162 <property name="dist.extra166ydocs.dir" location="${dist.dir}/extra166ydocs"/>
163
164 <!-- Jar locations -->
165 <property name="product.jar" location="${build.dir}/jsr166.jar"/>
166 <property name="4jdk7product.jar" location="${build.4jdk7.dir}/jsr166-4jdk7.jar"/>
167 <property name="jsr166x.jar" location="${build.jsr166x.dir}/jsr166x.jar"/>
168 <property name="jsr166y.jar" location="${build.jsr166y.dir}/jsr166y.jar"/>
169 <property name="jsr166e.jar" location="${build.jsr166e.dir}/jsr166e.jar"/>
170 <property name="extra166y.jar" location="${build.extra166y.dir}/extra166y.jar"/>
171 <property name="junit.jar" location="${lib.dir}/junit.jar"/>
172
173 <!-- Canonical location of jdk docs root, to use with javadoc -Xdocrootparent flag -->
174 <property name="java5.docroot.url" value="http://docs.oracle.com/javase/1.5.0/docs"/>
175 <property name="java6.docroot.url" value="http://docs.oracle.com/javase/6/docs"/>
176 <property name="java7.docroot.url" value="http://docs.oracle.com/javase/7/docs"/>
177 <property name="java8.docroot.url" value="http://docs.oracle.com/javase/8/docs"/>
178 <!-- The expected canonical location does not yet exist as of 2014-07 -->
179 <!-- <property name="java9.docroot.url" value="http://docs.oracle.com/javase/9/docs"/> -->
180 <property name="java9.docroot.url" value="http://download.java.net/jdk9/docs"/>
181 <!-- Default jdk doc location (latest stable release seems best) -->
182 <property name="java.docroot.url" value="${java8.docroot.url}"/>
183
184 <!-- Canonical location of jdk API docs, to use with javadoc link attribute -->
185 <property name="java5.api.url" value="${java5.docroot.url}/api/"/>
186 <property name="java6.api.url" value="${java6.docroot.url}/api/"/>
187 <property name="java7.api.url" value="${java7.docroot.url}/api/"/>
188 <property name="java8.api.url" value="${java8.docroot.url}/api/"/>
189 <property name="java9.api.url" value="${java9.docroot.url}/api/"/>
190 <property name="java.api.url" value="${java.docroot.url}/api/"/>
191
192 <!-- Define the "jtreg" task -->
193 <!-- See the docs in "jtreg -onlineHelp" -->
194 <taskdef name="jtreg" classname="com.sun.javatest.regtest.Main$$Ant"
195 classpath="${lib.dir}/jtreg.jar" />
196
197 <!-- Tck options; see JSR166TestCase.java
198 To profile a single tck test class:
199 ant -Djsr166.profileTests=true -Djsr166.profileThreshold=10 -Djsr166.tckTestClass=CompletableFutureTest tck
200 To stress test a single tck test class:
201 ant -Djsr166.tckTestClass=CountedCompleterTest -Djsr166.runsPerTest=100 tck
202 To stress test a single tck test method:
203 ant -Djsr166.tckTestClass=RecursiveTaskTest -Djsr166.runsPerTest=1000 -Djsr166.methodFilter=testAbnormalInvokeAll3 tck
204 -->
205 <property name="jsr166.tckTestClass" value="JSR166TestCase"/>
206 <macrodef name="run-tck-tests">
207 <attribute name="tck.src.dir" default="${tck.src.dir}"/>
208 <attribute name="target"/>
209 <attribute name="compile-target" default="@{target}"/>
210 <attribute name="workdir"/>
211 <attribute name="classes"/>
212 <attribute name="jvmflags" default="-ea -esa -Djsr166.testImplementationDetails=true"/>
213 <element name="javac-elements" optional="true"/>
214
215 <sequential>
216
217 <local name="modules"/>
218 <condition property="modules">
219 <available file="${jdk@{compile-target}.home}/jmods" type="dir"/>
220 </condition>
221
222 <mkdir dir="@{workdir}/tck-classes"/>
223
224 <javac srcdir="@{tck.src.dir}"
225 destdir="@{workdir}/tck-classes"
226 debug="${build.debug}"
227 debuglevel="${build.debuglevel}"
228 deprecation="${build.deprecation}"
229 source="@{compile-target}"
230 target="@{compile-target}"
231 classpath="${junit.jar}"
232 includeAntRuntime="false"
233 includeJavaRuntime="false"
234 executable="${javac@{compile-target}}"
235 fork="true">
236
237 <include name="*.java"/>
238 <compilerarg value="-XDignore.symbol.file=true"/>
239 <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial,-deprecation,-try"/>
240 <compilerarg value="-Xbootclasspath/p:@{classes}" unless:set="modules"/>
241 <compilerarg value="-Xoverride:${build.classes.dir}" if:set="modules"/>
242 <compilerarg line="${build.args}"/>
243 <javac-elements/>
244
245 </javac>
246
247 <java classname="${jsr166.tckTestClass}"
248 failonerror="true"
249 jvm="${java@{target}}"
250 fork="true">
251 <jvmarg value="-Xbootclasspath/p:@{classes}" unless:set="modules"/>
252 <jvmarg value="-Xoverride:${build.classes.dir}" if:set="modules"/>
253 <jvmarg line="@{jvmflags}"/>
254
255 <!-- ant -Djava.util.concurrent.ForkJoinPool.common.parallelism=1 tck -->
256 <syspropertyset id="system-properties-used-by-tck">
257 <propertyref prefix="java.util.concurrent.ForkJoinPool"/>
258 <propertyref prefix="jsr166."/>
259 </syspropertyset>
260
261 <classpath>
262 <pathelement location="${junit.jar}"/>
263 <pathelement location="@{workdir}/tck-classes"/>
264 </classpath>
265 </java>
266
267 </sequential>
268 </macrodef>
269
270 <!-- Define jtreg test sets for different jdk versions -->
271 <fileset dir="${jtreg9.src.dir}">
272 <patternset id="jdk9.jtreg.tests">
273 <include name="**/*.java"/>
274 </patternset>
275 </fileset>
276
277 <fileset dir="${jtreg8.src.dir}">
278 <patternset id="jdk8.jtreg.tests">
279 <include name="**/*.java"/>
280 <exclude name="**/SpliteratorCharacteristics.java"/>
281 <!-- https://bugs.openjdk.java.net/browse/JDK-6842353 -->
282 <exclude name="**/GCDuringIteration.java"/>
283 </patternset>
284 </fileset>
285
286 <fileset dir="${jtreg7.src.dir}">
287 <patternset id="jdk7.jtreg.tests">
288 <include name="**/*.java"/>
289 </patternset>
290 </fileset>
291
292 <macrodef name="run-jtreg-tests">
293 <!-- ant -Djtreg9.src.dir=src/test/jtreg/util/concurrent/CompletableFuture jtreg -->
294 <attribute name="source" default="7"/>
295 <attribute name="target"/>
296 <attribute name="workdir"/>
297 <attribute name="classes"/>
298 <attribute name="jtregflags" default=""/>
299
300 <sequential>
301
302 <!-- ant -Djtreg.verbose=time,fail,error jtreg -->
303 <property name="jtreg.verbose" value="nopass,fail,error"/>
304
305 <local name="modules"/>
306 <condition property="modules">
307 <available file="${jdk@{target}.home}/jmods" type="dir"/>
308 </condition>
309
310 <delete dir="@{workdir}/JTwork" quiet="true"/>
311 <delete dir="@{workdir}/JTreport" quiet="true"/>
312 <mkdir dir="@{workdir}/JTwork/scratch"/>
313 <mkdir dir="@{workdir}/JTreport"/>
314 <jtreg dir="${jtreg@{target}.src.dir}"
315 jdk="${jdk@{target}.home}"
316 workDir="@{workdir}/JTwork"
317 reportDir="@{workdir}/JTreport">
318 <patternset refid="jdk@{target}.jtreg.tests"/>
319 <arg value="-Xbootclasspath/p:@{classes}" unless:set="modules"/>
320 <arg value="-Xoverride:${build.classes.dir}" if:set="modules"/>
321 <arg value="-agentvm"/>
322 <arg value="-verbose:${jtreg.verbose}"/>
323 <arg value="-vmoptions:-esa -ea"/>
324 <arg value="-automatic"/>
325 <arg value="-k:!ignore"/>
326 <arg line="@{jtregflags}"/>
327 </jtreg>
328 </sequential>
329 </macrodef>
330
331 <!-- ALoops classpath -->
332 <path id="loops.classpath">
333 <pathelement location="${build.loops.dir}"/>
334 </path>
335
336 <!-- Support @jls tag, used in jdk8+ javadoc -->
337 <property name="javadoc.jls.cite" value="The Java&amp;trade; Language Specification"/>
338 <property name="javadoc.jls.option" value="jls:a:See &lt;cite&gt;${javadoc.jls.cite}&lt;/cite&gt;:"/>
339
340 <!-- Main targets -->
341
342 <property name="build.main.java.version" value="9"/>
343 <property name="build.main.javac" value="${javac9}"/>
344
345 <target name="dists"
346 depends="dist, 4jdk7dist, jsr166edist, jsr166ydist, extra166ydist, jsr166xdist"
347 description="Builds all public jars and docs"/>
348
349 <target name="compile"
350 depends="configure-compiler"
351 description="Compiles src/main sources to build dir">
352
353 <local name="modules"/>
354 <condition property="modules">
355 <and>
356 <available file="${jdk9.home}/jmods" type="dir"/>
357 <equals arg1="9" arg2="${build.main.java.version}"/>
358 </and>
359 </condition>
360
361 <local name="destdir"/>
362 <property name="destdir" value="${build.classes.dir}/java.base" if:set="modules"/>
363 <property name="destdir" value="${build.classes.dir}" unless:set="modules"/>
364
365 <mkdir dir="${destdir}"/>
366
367 <javac srcdir="${src.dir}"
368 destdir="${destdir}"
369 debug="${build.debug}"
370 debuglevel="${build.debuglevel}"
371 deprecation="${build.deprecation}"
372 classpath=""
373 includeAntRuntime="false"
374 includeJavaRuntime="false"
375 executable="${build.main.javac}"
376 fork="true">
377
378 <include name="**/*.java"/>
379 <compilerarg value="-Xmodule:java.base" if:set="modules"/>
380 <compilerarg value="-Xprefer:source"/>
381 <compilerarg value="-XDignore.symbol.file=true"/>
382 <compilerarg value="-Xlint:all"/>
383 <compilerarg value="-Werror"/>
384 <compilerarg value="-Xdoclint:all/protected"/>
385 <compilerarg line="-Xmaxerrs 1000 -Xmaxwarns 1000"/>
386 <compilerarg line="${build.args}"/>
387
388 </javac>
389 </target>
390
391
392 <target name="jar"
393 depends="compile"
394 description="Builds library jar from compiled sources">
395
396 <jar destfile="${product.jar}">
397 <fileset dir="${build.classes.dir}"/>
398 <manifest>
399 <attribute name="Built-By" value="${user.name}"/>
400 <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
401 </manifest>
402 </jar>
403 </target>
404
405
406 <target name="docs"
407 description="Builds javadocs for src/main to dist dir">
408
409 <delete dir="${docs.dir}"/>
410 <mkdir dir="${docs.dir}"/>
411
412 <!-- the packagenames="none" hack below prevents scanning the -->
413 <!-- sourcepath for packages -->
414
415 <javadoc destdir="${docs.dir}"
416 packagenames="none"
417 link="${java9.api.url}"
418 overview="${src.dir}/intro.html"
419 access="${build.javadoc.access}"
420 sourcepath="${src.dir}:${jdk9src.dir}"
421 classpath=""
422 executable="${javadoc9}">
423 <fileset dir="${src.dir}" defaultexcludes="yes">
424 <include name="**/*.java"/>
425 </fileset>
426 <arg line="-Xdocrootparent ${java9.docroot.url}"/>
427 <arg line="-Xmaxerrs 1000 -Xmaxwarns 1000"/>
428 <arg value="-XDignore.symbol.file=true"/>
429 <!-- TODO <arg value="-Xmodule:java.base"/> -->
430 <arg value="-tag"/>
431 <arg value="${javadoc.jls.option}"/>
432 <arg value="-tag"/>
433 <arg value="apiNote:a:&lt;em&gt;API Note:&lt;/em&gt;"/>
434 <arg value="-tag"/>
435 <arg value="implSpec:a:&lt;em&gt;Implementation Requirements:&lt;/em&gt;"/>
436 <arg value="-tag"/>
437 <arg value="implNote:a:&lt;em&gt;Implementation Note:&lt;/em&gt;"/>
438 </javadoc>
439 </target>
440
441
442 <target name="dist"
443 depends="dist-clean, dist-jar, dist-docs"
444 description="Puts all distributable products in single hierarchy"/>
445
446
447 <target name="release"
448 depends="dist"
449 description="Puts entire CVS tree, plus distribution productions, in a jar">
450
451 <property name="release.jar" value="dist/jsr166-${version}-dist.jar"/>
452
453 <jar basedir="${basedir}" destfile="${release.jar}">
454 <!-- <exclude name="build/**"/> -->
455 <exclude name="${release.jar}"/>
456 <exclude name="user.properties"/>
457 <exclude name="etc/notes/**"/>
458 <exclude name="src/emulation/**"/>
459 <exclude name="**/SyntaxTest.java"/>
460 <exclude name="**/SuperfluousAbstract.java"/>
461 <manifest>
462 <attribute name="Built-By" value="${user.name}"/>
463 <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
464 </manifest>
465 </jar>
466 </target>
467
468
469 <target name="clean"
470 description="Removes all build products">
471
472 <delete dir="${build.dir}"/>
473
474 </target>
475
476
477 <target name="dist-clean"
478 description="Removes all build and distribution products">
479
480 <delete dir="${build.dir}"/>
481 <delete dir="${dist.dir}"/>
482
483 </target>
484
485
486 <target name="dist-jar"
487 depends="clean, jar">
488 <copy file="${product.jar}" todir="${dist.dir}"/>
489 </target>
490
491 <target name="dist-docs"
492 depends="clean, docs">
493 <mirror-dir src="${docs.dir}" dst="${dist.docs.dir}"/>
494 </target>
495
496 <target name="tck"
497 depends="jar"
498 description="Runs tck tests for main directly">
499
500 <run-tck-tests
501 target="${build.main.java.version}"
502 workdir="${build.dir}"
503 classes="${product.jar}"/>
504 </target>
505
506 <target name="tck-parallelism-1"
507 description="Runs tck with given common pool parallelism">
508 <antcall target="tck">
509 <param name="java.util.concurrent.ForkJoinPool.common.parallelism" value="1"/>
510 </antcall>
511 </target>
512
513 <target name="tck-parallelism-0"
514 description="Runs tck with given common pool parallelism">
515 <antcall target="tck">
516 <param name="java.util.concurrent.ForkJoinPool.common.parallelism" value="0"/>
517 </antcall>
518 </target>
519
520 <target name="jtreg"
521 depends="jar"
522 description="Runs jtreg tests for main using the jtreg ant task">
523 <run-jtreg-tests
524 target="${build.main.java.version}"
525 workdir="${build.dir}"
526 classes="${product.jar}"/>
527 </target>
528
529 <target name="test"
530 depends="tck, tck-parallelism-1, jtreg"
531 description="Runs tck and jtreg tests for main">
532 </target>
533
534 <target name="jtreg8" description="Runs jtreg tests with jdk8">
535
536 <antcall target="jtreg">
537 <param name="build.main.java.version" value="8"/>
538 <param name="build.main.javac" value="${javac8}"/>
539 </antcall>
540
541 </target>
542
543 <target name="test89"
544 description="Runs tck and jtreg tests for main for multiple java versions">
545
546 <antcall target="clean"/>
547 <antcall target="test">
548 <param name="build.main.java.version" value="8"/>
549 <param name="build.main.javac" value="${javac8}"/>
550 </antcall>
551
552 <antcall target="clean"/>
553 <antcall target="test">
554 <param name="build.main.java.version" value="9"/>
555 <param name="build.main.javac" value="${javac9}"/>
556 </antcall>
557
558 </target>
559
560
561
562 <target name="configure-compiler">
563 <fail message="ant version too old">
564 <condition>
565 <not> <antversion atleast="1.9.1"/> </not>
566 </condition>
567 </fail>
568
569 <property name="unchecked.option" value="-Xlint:unchecked"/>
570
571 <condition property="warnunchecked.arg" value="${unchecked.option}">
572 <istrue value="${build.warnunchecked}"/>
573 </condition>
574
575 <property name="warnunchecked.arg" value=""/>
576
577
578 <!-- Common options in javac invocations -->
579 <property name="build.args" value="${warnunchecked.arg}"/>
580
581 </target>
582
583
584
585 <!-- Various demos and test programs -->
586
587
588 <target name="loops" depends="configure-compiler"
589 description="Benchmark from Doug Lea's AQS paper">
590
591 <mkdir dir="${build.loops.dir}"/>
592
593 <javac srcdir="${loops.src.dir}"
594 destdir="${build.loops.dir}"
595 debug="${build.debug}"
596 debuglevel="${build.debuglevel}"
597 deprecation="${build.deprecation}"
598 source="${build.sourcelevel}"
599 fork="true">
600
601 <compilerarg line="${build.args}"/>
602 <classpath refid="loops.classpath"/>
603 <compilerarg value="-XDignore.symbol.file=true"/>
604
605 </javac>
606
607 <java classname="ALoops" fork="true">
608 <classpath refid="loops.classpath"/>
609 </java>
610
611 </target>
612
613
614 <target name="compile-test-loops" depends="jar"
615 description="compile all the perf tests in src/test/loops">
616
617 <mkdir dir="${build.dir}/test/loops"/>
618
619 <javac srcdir="${basedir}/src/test/loops"
620 destdir="${build.dir}/test/loops"
621 debug="${build.debug}"
622 debuglevel="${build.debuglevel}"
623 deprecation="${build.deprecation}"
624 includeAntRuntime="false"
625 includeJavaRuntime="false"
626 executable="${javac9}"
627 fork="true">
628
629 <include name="*.java"/>
630 <compilerarg value="-XDignore.symbol.file=true"/>
631 <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial"/>
632 <compilerarg value="-Xbootclasspath/p:${product.jar}"/>
633 <compilerarg line="${build.args}"/>
634
635 </javac>
636
637 </target>
638
639
640 <!-- jsr166 4jdk7 -->
641
642 <target name="4jdk7compile"
643 depends="configure-compiler"
644 description="Compiles src/jdk7 sources, targeting jdk7">
645
646 <mkdir dir="${build.4jdk7.classes.dir}"/>
647
648 <javac srcdir="${4jdk7src.dir}"
649 destdir="${build.4jdk7.classes.dir}"
650 debug="${build.debug}"
651 debuglevel="${build.debuglevel}"
652 deprecation="${build.deprecation}"
653 source="6"
654 classpath=""
655 bootclasspath="${bootclasspath6}"
656 includeAntRuntime="false"
657 includeJavaRuntime="false"
658 executable="${javac7}"
659 fork="true">
660
661 <include name="**/*.java"/>
662 <compilerarg value="-Xprefer:source"/>
663 <compilerarg value="-XDignore.symbol.file=true"/>
664 <compilerarg value="-Xlint:all"/>
665 <compilerarg value="-Werror"/>
666 <compilerarg line="${build.args}"/>
667
668 </javac>
669 </target>
670
671 <target name="4jdk7doclint"
672 depends="configure-compiler"
673 description="Finds doclint warnings">
674
675 <mkdir dir="${build.4jdk7.classes.dir}"/>
676
677 <javac srcdir="${4jdk7src.dir}"
678 destdir="${build.4jdk7.classes.dir}"
679 debug="${build.debug}"
680 debuglevel="${build.debuglevel}"
681 deprecation="${build.deprecation}"
682 source="6"
683 classpath=""
684 bootclasspath="${bootclasspath7}"
685 includeAntRuntime="false"
686 includeJavaRuntime="false"
687 executable="${javac8}"
688 fork="true">
689
690 <include name="**/*.java"/>
691 <compilerarg value="-Xprefer:source"/>
692 <compilerarg value="-XDignore.symbol.file=true"/>
693 <compilerarg value="-Xlint:all"/>
694 <compilerarg value="-Xdoclint:all/protected"/>
695 <compilerarg line="${build.args}"/>
696
697 </javac>
698 </target>
699
700
701 <target name="4jdk7jar"
702 depends="4jdk7compile"
703 description="Builds library jar from compiled sources">
704
705 <jar destfile="${4jdk7product.jar}">
706 <fileset dir="${build.4jdk7.classes.dir}"/>
707 <manifest>
708 <attribute name="Built-By" value="${user.name}"/>
709 <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
710 </manifest>
711 </jar>
712
713 </target>
714
715
716 <target name="4jdk7-tck"
717 depends="4jdk7jar"
718 description="Runs tck tests for jsr166-4jdk7 directly">
719
720 <run-tck-tests
721 target="7"
722 workdir="${build.4jdk7.dir}"
723 classes="${4jdk7product.jar}">
724 <javac-elements>
725 <!-- JDK8+ test classes -->
726 <exclude name="*8Test.java"/>
727 <exclude name="*9Test.java"/>
728 <exclude name="*10Test.java"/>
729 <exclude name="DoubleAccumulatorTest.java"/>
730 <exclude name="DoubleAdderTest.java"/>
731 <exclude name="LongAccumulatorTest.java"/>
732 <exclude name="LongAdderTest.java"/>
733 <exclude name="CompletableFutureTest.java"/>
734 <exclude name="SplittableRandomTest.java"/>
735 <exclude name="StampedLockTest.java"/>
736 <exclude name="SubmissionPublisherTest.java"/>
737 </javac-elements>
738 </run-tck-tests>
739 </target>
740
741
742 <target name="4jdk7-tck-junit"
743 depends="4jdk7compile"
744 description="Runs tck tests for jsr166-4jdk7 via junit task (experimental)">
745
746 <junit printsummary="true"
747 showoutput="true"
748 errorProperty="junit.failed"
749 failureProperty="junit.failed"
750 includeantruntime="true"
751 jvm="${java7}"
752 fork="true">
753
754 <jvmarg value="-Xbootclasspath/p:${4jdk7product.jar}"/>
755 <jvmarg value="-server"/>
756
757 <classpath>
758 <pathelement location="${junit.jar}"/>
759 <pathelement location="${build.4jdk7.tck.classes.dir}"/>
760 </classpath>
761
762 <formatter type="brief"/>
763
764 <test name="${jsr166.tckTestClass}" haltonfailure="no">
765 </test>
766
767 </junit>
768 </target>
769
770 <target name="4jdk7-jtreg"
771 depends="4jdk7jar"
772 description="Runs jtreg tests for jsr166-4jdk7 using the jtreg ant task">
773 <run-jtreg-tests
774 target="7"
775 workdir="${build.4jdk7.dir}"
776 classes="${4jdk7product.jar}"/>
777 </target>
778
779
780 <target name="4jdk7-test"
781 depends="4jdk7-tck, 4jdk7-jtreg"
782 description="Runs tck and jtreg tests for jsr166-4jdk7">
783 </target>
784
785
786 <target name="4jdk7docs"
787 description="Builds javadocs for src/jdk7 to dist dir">
788
789 <delete dir="${4jdk7docs.dir}"/>
790 <mkdir dir="${4jdk7docs.dir}"/>
791
792 <javadoc destdir="${4jdk7docs.dir}"
793 packagenames="none"
794 link="${java7.api.url}"
795 overview="${4jdk7src.dir}/intro.html"
796 access="${build.javadoc.access}"
797 sourcepath="${4jdk7src.dir}:${jdk7src.dir}"
798 classpath=""
799 executable="${javadoc7}">
800 <fileset dir="${4jdk7src.dir}" defaultexcludes="yes">
801 <include name="**/*.java"/>
802 </fileset>
803 <arg line="-Xdocrootparent ${java7.docroot.url}"/>
804 <arg value="-XDignore.symbol.file=true"/>
805 </javadoc>
806 </target>
807
808
809 <target name="4jdk7dist"
810 depends="4jdk7dist-jar, 4jdk7dist-docs"
811 description="Puts all distributable products in single hierarchy"/>
812
813
814 <target name="4jdk7clean"
815 description="Removes all 4jdk7 build products">
816
817 <delete dir="${build.4jdk7.dir}"/>
818
819 </target>
820
821
822 <target name="4jdk7dist-jar"
823 depends="4jdk7clean, 4jdk7jar">
824 <copy file="${4jdk7product.jar}" todir="${dist.dir}"/>
825 </target>
826
827
828 <target name="4jdk7dist-docs"
829 depends="4jdk7clean, 4jdk7docs">
830 <mirror-dir src="${4jdk7docs.dir}" dst="${dist.4jdk7docs.dir}"/>
831 </target>
832
833
834 <!-- jsr166x -->
835
836 <target name="jsr166xcompile"
837 depends="configure-compiler"
838 description="Compiles jsr166x sources to build dir">
839
840 <mkdir dir="${build.jsr166x.classes.dir}"/>
841
842 <javac srcdir="${topsrc.dir}"
843 destdir="${build.jsr166x.classes.dir}"
844 debug="${build.debug}"
845 debuglevel="${build.debuglevel}"
846 deprecation="${build.deprecation}"
847 classpath=""
848 bootclasspath="${bootclasspath6}"
849 source="5"
850 includeAntRuntime="false"
851 includeJavaRuntime="false"
852 executable="${javac7}"
853 fork="true">
854
855 <include name="jsr166x/**/*.java"/>
856 <compilerarg value="-XDignore.symbol.file=true"/>
857 <compilerarg value="-Xlint:all,-unchecked,-rawtypes"/>
858 <compilerarg value="-Werror"/>
859 <compilerarg line="${build.args}"/>
860
861 </javac>
862 </target>
863
864
865 <target name="jsr166xjar"
866 depends="jsr166xcompile"
867 description="Builds library jar from compiled sources">
868
869 <jar destfile="${jsr166x.jar}">
870 <fileset dir="${build.jsr166x.classes.dir}"/>
871 <manifest>
872 <attribute name="Built-By" value="${user.name}"/>
873 <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
874 </manifest>
875 </jar>
876
877 </target>
878
879
880 <target name="jsr166xdocs"
881 description="Builds javadocs to dist dir">
882
883 <delete dir="${jsr166xdocs.dir}"/>
884 <mkdir dir="${jsr166xdocs.dir}"/>
885
886 <javadoc destdir="${jsr166xdocs.dir}"
887 packagenames="jsr166x.*"
888 link="${java.api.url}"
889 access="${build.javadoc.access}"
890 sourcepath="${topsrc.dir}:${jdk6src.dir}"
891 bootclasspath="${bootclasspath6}"
892 source="5"
893 executable="${javadoc7}">
894 <arg line="-Xdocrootparent ${java.docroot.url}"/>
895 <arg value="-XDignore.symbol.file=true"/>
896
897 </javadoc>
898 </target>
899
900
901 <target name="jsr166xdist"
902 depends="jsr166xdist-jar, jsr166xdist-docs"
903 description="Puts all distributable products in single hierarchy"/>
904
905
906 <target name="jsr166xclean"
907 description="Removes all jsr166x build products">
908
909 <delete dir="${build.jsr166x.dir}"/>
910
911 </target>
912
913
914 <target name="jsr166xdist-jar"
915 depends="jsr166xclean, jsr166xjar">
916 <copy file="${jsr166x.jar}" todir="${dist.dir}"/>
917 </target>
918
919 <target name="jsr166xdist-docs"
920 depends="jsr166xclean, jsr166xdocs">
921 <mirror-dir src="${jsr166xdocs.dir}" dst="${dist.jsr166xdocs.dir}"/>
922 </target>
923
924 <!-- jsr166y -->
925
926
927 <target name="jsr166ycompile"
928 depends="configure-compiler"
929 description="Compiles jsr166y sources">
930
931 <mkdir dir="${build.jsr166y.classes.dir}"/>
932
933 <javac srcdir="${topsrc.dir}"
934 destdir="${build.jsr166y.classes.dir}"
935 debug="${build.debug}"
936 debuglevel="${build.debuglevel}"
937 deprecation="${build.deprecation}"
938 source="6"
939 target="6"
940 classpath=""
941 bootclasspath="${bootclasspath6}"
942 includeAntRuntime="false"
943 includeJavaRuntime="false"
944 executable="${javac7}"
945 fork="true">
946
947 <include name="jsr166y/**/*.java"/>
948 <compilerarg value="-XDignore.symbol.file=true"/>
949 <compilerarg value="-Xlint:all"/>
950 <compilerarg value="-Werror"/>
951 <compilerarg line="${build.args}"/>
952
953 </javac>
954 </target>
955
956
957 <target name="jsr166yjar"
958 depends="jsr166ycompile"
959 description="Builds library jar from compiled sources">
960
961 <jar destfile="${jsr166y.jar}" index="true">
962 <fileset dir="${build.jsr166y.classes.dir}"/>
963 <manifest>
964 <attribute name="Built-By" value="${user.name}"/>
965 <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
966 </manifest>
967 </jar>
968
969 </target>
970
971
972 <target name="jsr166ydocs"
973 description="Builds javadocs to dist dir">
974
975 <delete dir="${jsr166ydocs.dir}"/>
976 <mkdir dir="${jsr166ydocs.dir}"/>
977
978 <javadoc destdir="${jsr166ydocs.dir}"
979 packagenames="jsr166y.*"
980 link="${java.api.url}"
981 access="${build.javadoc.access}"
982 sourcepath="${topsrc.dir}:${jdk6src.dir}"
983 bootclasspath="${bootclasspath6}"
984 source="6"
985 executable="${javadoc7}">
986 <arg line="-Xdocrootparent ${java.docroot.url}"/>
987 <arg value="-XDignore.symbol.file=true"/>
988
989 </javadoc>
990 </target>
991
992
993 <target name="jsr166ydist"
994 depends="jsr166ydist-jar, jsr166ydist-docs"
995 description="Puts all distributable products in single hierarchy"/>
996
997
998 <target name="jsr166yclean"
999 description="Removes all jsr166y build products">
1000
1001 <delete dir="${build.jsr166y.dir}"/>
1002
1003 </target>
1004
1005
1006 <target name="jsr166ydist-jar"
1007 depends="jsr166yclean, jsr166yjar">
1008 <copy file="${jsr166y.jar}" todir="${dist.dir}"/>
1009 </target>
1010
1011 <target name="jsr166ydist-docs"
1012 depends="jsr166yclean, jsr166ydocs">
1013 <mirror-dir src="${jsr166ydocs.dir}" dst="${dist.jsr166ydocs.dir}"/>
1014 </target>
1015
1016
1017 <!-- extra166y -->
1018
1019
1020 <target name="extra166ycompile"
1021 depends="configure-compiler, jsr166yjar"
1022 description="Compiles extra166y sources">
1023
1024 <mkdir dir="${build.extra166y.classes.dir}"/>
1025
1026 <javac srcdir="${topsrc.dir}"
1027 destdir="${build.extra166y.classes.dir}"
1028 debug="${build.debug}"
1029 debuglevel="${build.debuglevel}"
1030 deprecation="${build.deprecation}"
1031 bootclasspath="@{jsr166y.jar}:${bootclasspath6}"
1032 classpath=""
1033 source="6"
1034 includeAntRuntime="false"
1035 includeJavaRuntime="false"
1036 executable="${javac7}"
1037 fork="true">
1038
1039 <include name="extra166y/**/*.java"/>
1040 <compilerarg value="-XDignore.symbol.file=true"/>
1041 <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial"/>
1042 <compilerarg value="-Werror"/>
1043 <compilerarg line="${build.args}"/>
1044
1045 </javac>
1046 </target>
1047
1048
1049 <target name="extra166yjar"
1050 depends="extra166ycompile"
1051 description="Builds library jar from compiled sources">
1052
1053 <jar destfile="${extra166y.jar}" index="true">
1054 <fileset dir="${build.extra166y.classes.dir}"/>
1055 <manifest>
1056 <attribute name="Built-By" value="${user.name}"/>
1057 <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
1058 </manifest>
1059 </jar>
1060
1061 </target>
1062
1063
1064 <target name="extra166ydocs"
1065 description="Builds javadocs to build dir">
1066
1067 <delete dir="${extra166ydocs.dir}"/>
1068 <mkdir dir="${extra166ydocs.dir}"/>
1069
1070 <javadoc destdir="${extra166ydocs.dir}"
1071 packagenames="extra166y.*"
1072 link="${java.api.url}"
1073 access="${build.javadoc.access}"
1074 sourcepath="${topsrc.dir}:${jdk6src.dir}"
1075 bootclasspath="${bootclasspath6}"
1076 source="6"
1077 executable="${javadoc7}">
1078 <arg line="-Xdocrootparent ${java.docroot.url}"/>
1079 <arg value="-XDignore.symbol.file=true"/>
1080
1081 </javadoc>
1082 </target>
1083
1084
1085 <target name="extra166ydist"
1086 depends="extra166ydist-jar, extra166ydist-docs"
1087 description="Puts all distributable products in single hierarchy"/>
1088
1089
1090 <target name="extra166yclean"
1091 description="Removes all extra166y build products">
1092
1093 <delete dir="${build.extra166y.dir}"/>
1094
1095 </target>
1096
1097
1098 <target name="extra166ydist-jar"
1099 depends="extra166yclean, extra166yjar">
1100 <copy file="${extra166y.jar}" todir="${dist.dir}"/>
1101 </target>
1102
1103 <target name="extra166ydist-docs"
1104 depends="extra166yclean, extra166ydocs">
1105 <mirror-dir src="${extra166ydocs.dir}" dst="${dist.extra166ydocs.dir}"/>
1106 </target>
1107
1108 <!-- jsr166e -->
1109
1110 <property name="build.jsr166e.java.version" value="6"/>
1111 <property name="build.jsr166e.javac" value="${javac6}"/>
1112
1113 <target name="jsr166ecompile"
1114 depends="configure-compiler"
1115 description="Compiles jsr166e sources">
1116
1117 <mkdir dir="${build.jsr166e.classes.dir}"/>
1118
1119 <javac srcdir="${topsrc.dir}"
1120 destdir="${build.jsr166e.classes.dir}"
1121 debug="${build.debug}"
1122 debuglevel="${build.debuglevel}"
1123 deprecation="${build.deprecation}"
1124 source="${build.jsr166e.java.version}"
1125 classpath=""
1126 includeAntRuntime="false"
1127 includeJavaRuntime="false"
1128 executable="${build.jsr166e.javac}"
1129 fork="true">
1130
1131 <include name="jsr166e/**/*.java"/>
1132 <compilerarg value="-XDignore.symbol.file=true"/>
1133 <compilerarg value="-Xlint:all"/>
1134 <compilerarg value="-Werror"/>
1135 <compilerarg line="${build.args}"/>
1136
1137 </javac>
1138 </target>
1139
1140 <!-- jsr166e: find doclint errors -->
1141 <target name="jsr166edoclint">
1142
1143 <mkdir dir="${build.jsr166e.classes.dir}"/>
1144
1145 <javac srcdir="${topsrc.dir}"
1146 destdir="${build.jsr166e.classes.dir}"
1147 debug="${build.debug}"
1148 debuglevel="${build.debuglevel}"
1149 deprecation="${build.deprecation}"
1150 source="${build.jsr166e.java.version}"
1151 classpath=""
1152 bootclasspath="${bootclasspath7}"
1153 includeAntRuntime="false"
1154 includeJavaRuntime="false"
1155 executable="${javac8}"
1156 fork="true">
1157
1158 <include name="jsr166e/**/*.java"/>
1159 <compilerarg value="-XDignore.symbol.file=true"/>
1160 <compilerarg value="-Xlint:all"/>
1161 <compilerarg value="-Werror"/>
1162 <compilerarg value="-Xdoclint:all/protected"/>
1163
1164 </javac>
1165 </target>
1166
1167
1168 <target name="jsr166ejar"
1169 depends="jsr166ecompile"
1170 description="Builds library jar from compiled sources">
1171
1172 <jar destfile="${jsr166e.jar}" index="true">
1173 <fileset dir="${build.jsr166e.classes.dir}"/>
1174 <manifest>
1175 <attribute name="Built-By" value="${user.name}"/>
1176 <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
1177 </manifest>
1178 </jar>
1179
1180 </target>
1181
1182
1183 <target name="jsr166edocs"
1184 description="Builds javadocs to build dir">
1185
1186 <delete dir="${jsr166edocs.dir}"/>
1187 <mkdir dir="${jsr166edocs.dir}"/>
1188
1189 <javadoc destdir="${jsr166edocs.dir}"
1190 packagenames="jsr166e.*"
1191 link="${java.api.url}"
1192 access="${build.javadoc.access}"
1193 sourcepath="${topsrc.dir}:${jdk6src.dir}"
1194 source="${build.jsr166e.java.version}"
1195 executable="${javadoc7}">
1196 <arg line="-Xdocrootparent ${java.docroot.url}"/>
1197 <arg value="-XDignore.symbol.file=true"/>
1198
1199 </javadoc>
1200 </target>
1201
1202
1203 <target name="jsr166e-tck-one-java-version"
1204 depends="jsr166ejar">
1205
1206 <echo message="Testing with jdk${build.jsr166e.java.version} ..."/>
1207
1208 <run-tck-tests
1209 tck.src.dir="${test.src.dir}/tck-jsr166e"
1210 target="${build.jsr166e.java.version}"
1211 workdir="${build.jsr166e.dir}"
1212 classes="${jsr166e.jar}"/>
1213 </target>
1214
1215 <target name="jsr166e-tck"
1216 description="Runs tck tests for jsr166e for multiple java versions">
1217
1218 <!-- <antcall target="clean"/> -->
1219 <!-- <antcall target="jsr166e-tck-one-java-version"> -->
1220 <!-- <param name="build.jsr166e.java.version" value="8"/> -->
1221 <!-- <param name="build.jsr166e.javac" value="${javac8}"/> -->
1222 <!-- </antcall> -->
1223
1224 <antcall target="clean"/>
1225 <antcall target="jsr166e-tck-one-java-version">
1226 <param name="build.jsr166e.java.version" value="7"/>
1227 <param name="build.jsr166e.javac" value="${javac7}"/>
1228 </antcall>
1229
1230 <antcall target="clean"/>
1231 <antcall target="jsr166e-tck-one-java-version">
1232 <param name="build.jsr166e.java.version" value="6"/>
1233 <param name="build.jsr166e.javac" value="${javac6}"/>
1234 </antcall>
1235 </target>
1236
1237
1238 <target name="jsr166e-test"
1239 depends="jsr166e-tck"
1240 description="Runs all tests for jsr166e">
1241 </target>
1242
1243 <target name="jsr166edist"
1244 depends="jsr166edist-jar, jsr166edist-docs"
1245 description="Puts all distributable products in single hierarchy"/>
1246
1247
1248 <target name="jsr166eclean"
1249 description="Removes all jsr166e build products">
1250 <delete dir="${build.jsr166e.dir}"/>
1251 </target>
1252
1253
1254 <target name="jsr166edist-jar"
1255 depends="jsr166eclean, jsr166ejar">
1256 <copy file="${jsr166e.jar}" todir="${dist.dir}"/>
1257 </target>
1258
1259 <target name="jsr166edist-docs"
1260 depends="jsr166eclean, jsr166edocs">
1261 <mirror-dir src="${jsr166edocs.dir}" dst="${dist.jsr166edocs.dir}"/>
1262 </target>
1263
1264
1265 <!-- Find buglets that can be detected by static build tools -->
1266
1267 <target name="lint">
1268 <antcall target="dists">
1269 <param name="build.javadoc.access" value="public"/>
1270 </antcall>
1271 </target>
1272
1273 <!-- Generates all doclint warnings, even for private methods (rarely useful) -->
1274 <target name="lint-private">
1275 <antcall target="dist">
1276 <param name="build.javadoc.access" value="private"/>
1277 </antcall>
1278 </target>
1279
1280
1281 </project>

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