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

Contents of /jsr166/build.xml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.183 - (show annotations)
Sat Sep 26 17:58:52 2015 UTC (3 years, 10 months ago) by jsr166
Branch: MAIN
Changes since 1.182: +11 -15 lines
File MIME type: text/xml
Automatically pass all ant jsr166.* system properties to tck tests

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

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