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

Contents of /jsr166/build.xml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.188 - (show annotations)
Mon Oct 12 01:53:54 2015 UTC (3 years, 11 months ago) by jsr166
Branch: MAIN
Changes since 1.187: +4 -1 lines
File MIME type: text/xml
add jtreg profiling support

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 classpath=""
940 bootclasspath="${bootclasspath6}"
941 includeAntRuntime="false"
942 includeJavaRuntime="false"
943 executable="${javac7}"
944 fork="true">
945
946 <include name="jsr166y/**/*.java"/>
947 <compilerarg value="-XDignore.symbol.file=true"/>
948 <compilerarg value="-Xlint:all"/>
949 <compilerarg value="-Werror"/>
950 <compilerarg line="${build.args}"/>
951
952 </javac>
953 </target>
954
955
956 <target name="jsr166yjar"
957 depends="jsr166ycompile"
958 description="Builds library jar from compiled sources">
959
960 <jar destfile="${jsr166y.jar}" index="true">
961 <fileset dir="${build.jsr166y.classes.dir}"/>
962 <manifest>
963 <attribute name="Built-By" value="${user.name}"/>
964 <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
965 </manifest>
966 </jar>
967
968 </target>
969
970
971 <target name="jsr166ydocs"
972 description="Builds javadocs to dist dir">
973
974 <delete dir="${jsr166ydocs.dir}"/>
975 <mkdir dir="${jsr166ydocs.dir}"/>
976
977 <javadoc destdir="${jsr166ydocs.dir}"
978 packagenames="jsr166y.*"
979 link="${java.api.url}"
980 access="${build.javadoc.access}"
981 sourcepath="${topsrc.dir}:${jdk6src.dir}"
982 bootclasspath="${bootclasspath6}"
983 source="6"
984 executable="${javadoc7}">
985 <arg line="-Xdocrootparent ${java.docroot.url}"/>
986 <arg value="-XDignore.symbol.file=true"/>
987
988 </javadoc>
989 </target>
990
991
992 <target name="jsr166ydist"
993 depends="jsr166ydist-jar, jsr166ydist-docs"
994 description="Puts all distributable products in single hierarchy"/>
995
996
997 <target name="jsr166yclean"
998 description="Removes all jsr166y build products">
999
1000 <delete dir="${build.jsr166y.dir}"/>
1001
1002 </target>
1003
1004
1005 <target name="jsr166ydist-jar"
1006 depends="jsr166yclean, jsr166yjar">
1007 <copy file="${jsr166y.jar}" todir="${dist.dir}"/>
1008 </target>
1009
1010 <target name="jsr166ydist-docs"
1011 depends="jsr166yclean, jsr166ydocs">
1012 <mirror-dir src="${jsr166ydocs.dir}" dst="${dist.jsr166ydocs.dir}"/>
1013 </target>
1014
1015
1016 <!-- extra166y -->
1017
1018
1019 <target name="extra166ycompile"
1020 depends="configure-compiler, jsr166yjar"
1021 description="Compiles extra166y sources">
1022
1023 <mkdir dir="${build.extra166y.classes.dir}"/>
1024
1025 <javac srcdir="${topsrc.dir}"
1026 destdir="${build.extra166y.classes.dir}"
1027 debug="${build.debug}"
1028 debuglevel="${build.debuglevel}"
1029 deprecation="${build.deprecation}"
1030 bootclasspath="@{jsr166y.jar}:${bootclasspath6}"
1031 classpath=""
1032 source="6"
1033 includeAntRuntime="false"
1034 includeJavaRuntime="false"
1035 executable="${javac7}"
1036 fork="true">
1037
1038 <include name="extra166y/**/*.java"/>
1039 <compilerarg value="-XDignore.symbol.file=true"/>
1040 <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial"/>
1041 <compilerarg value="-Werror"/>
1042 <compilerarg line="${build.args}"/>
1043
1044 </javac>
1045 </target>
1046
1047
1048 <target name="extra166yjar"
1049 depends="extra166ycompile"
1050 description="Builds library jar from compiled sources">
1051
1052 <jar destfile="${extra166y.jar}" index="true">
1053 <fileset dir="${build.extra166y.classes.dir}"/>
1054 <manifest>
1055 <attribute name="Built-By" value="${user.name}"/>
1056 <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
1057 </manifest>
1058 </jar>
1059
1060 </target>
1061
1062
1063 <target name="extra166ydocs"
1064 description="Builds javadocs to build dir">
1065
1066 <delete dir="${extra166ydocs.dir}"/>
1067 <mkdir dir="${extra166ydocs.dir}"/>
1068
1069 <javadoc destdir="${extra166ydocs.dir}"
1070 packagenames="extra166y.*"
1071 link="${java.api.url}"
1072 access="${build.javadoc.access}"
1073 sourcepath="${topsrc.dir}:${jdk6src.dir}"
1074 bootclasspath="${bootclasspath6}"
1075 source="6"
1076 executable="${javadoc7}">
1077 <arg line="-Xdocrootparent ${java.docroot.url}"/>
1078 <arg value="-XDignore.symbol.file=true"/>
1079
1080 </javadoc>
1081 </target>
1082
1083
1084 <target name="extra166ydist"
1085 depends="extra166ydist-jar, extra166ydist-docs"
1086 description="Puts all distributable products in single hierarchy"/>
1087
1088
1089 <target name="extra166yclean"
1090 description="Removes all extra166y build products">
1091
1092 <delete dir="${build.extra166y.dir}"/>
1093
1094 </target>
1095
1096
1097 <target name="extra166ydist-jar"
1098 depends="extra166yclean, extra166yjar">
1099 <copy file="${extra166y.jar}" todir="${dist.dir}"/>
1100 </target>
1101
1102 <target name="extra166ydist-docs"
1103 depends="extra166yclean, extra166ydocs">
1104 <mirror-dir src="${extra166ydocs.dir}" dst="${dist.extra166ydocs.dir}"/>
1105 </target>
1106
1107 <!-- jsr166e -->
1108
1109 <property name="build.jsr166e.java.version" value="6"/>
1110 <property name="build.jsr166e.javac" value="${javac6}"/>
1111
1112 <target name="jsr166ecompile"
1113 depends="configure-compiler"
1114 description="Compiles jsr166e sources">
1115
1116 <mkdir dir="${build.jsr166e.classes.dir}"/>
1117
1118 <javac srcdir="${topsrc.dir}"
1119 destdir="${build.jsr166e.classes.dir}"
1120 debug="${build.debug}"
1121 debuglevel="${build.debuglevel}"
1122 deprecation="${build.deprecation}"
1123 source="${build.jsr166e.java.version}"
1124 classpath=""
1125 includeAntRuntime="false"
1126 includeJavaRuntime="false"
1127 executable="${build.jsr166e.javac}"
1128 fork="true">
1129
1130 <include name="jsr166e/**/*.java"/>
1131 <compilerarg value="-XDignore.symbol.file=true"/>
1132 <compilerarg value="-Xlint:all"/>
1133 <compilerarg value="-Werror"/>
1134 <compilerarg line="${build.args}"/>
1135
1136 </javac>
1137 </target>
1138
1139 <!-- jsr166e: find doclint errors -->
1140 <target name="jsr166edoclint">
1141
1142 <mkdir dir="${build.jsr166e.classes.dir}"/>
1143
1144 <javac srcdir="${topsrc.dir}"
1145 destdir="${build.jsr166e.classes.dir}"
1146 debug="${build.debug}"
1147 debuglevel="${build.debuglevel}"
1148 deprecation="${build.deprecation}"
1149 source="${build.jsr166e.java.version}"
1150 classpath=""
1151 bootclasspath="${bootclasspath7}"
1152 includeAntRuntime="false"
1153 includeJavaRuntime="false"
1154 executable="${javac8}"
1155 fork="true">
1156
1157 <include name="jsr166e/**/*.java"/>
1158 <compilerarg value="-XDignore.symbol.file=true"/>
1159 <compilerarg value="-Xlint:all"/>
1160 <compilerarg value="-Werror"/>
1161 <compilerarg value="-Xdoclint:all/protected"/>
1162
1163 </javac>
1164 </target>
1165
1166
1167 <target name="jsr166ejar"
1168 depends="jsr166ecompile"
1169 description="Builds library jar from compiled sources">
1170
1171 <jar destfile="${jsr166e.jar}" index="true">
1172 <fileset dir="${build.jsr166e.classes.dir}"/>
1173 <manifest>
1174 <attribute name="Built-By" value="${user.name}"/>
1175 <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
1176 </manifest>
1177 </jar>
1178
1179 </target>
1180
1181
1182 <target name="jsr166edocs"
1183 description="Builds javadocs to build dir">
1184
1185 <delete dir="${jsr166edocs.dir}"/>
1186 <mkdir dir="${jsr166edocs.dir}"/>
1187
1188 <javadoc destdir="${jsr166edocs.dir}"
1189 packagenames="jsr166e.*"
1190 link="${java.api.url}"
1191 access="${build.javadoc.access}"
1192 sourcepath="${topsrc.dir}:${jdk6src.dir}"
1193 source="${build.jsr166e.java.version}"
1194 executable="${javadoc7}">
1195 <arg line="-Xdocrootparent ${java.docroot.url}"/>
1196 <arg value="-XDignore.symbol.file=true"/>
1197
1198 </javadoc>
1199 </target>
1200
1201
1202 <target name="jsr166e-tck-one-java-version"
1203 depends="jsr166ejar">
1204
1205 <echo message="Testing with jdk${build.jsr166e.java.version} ..."/>
1206
1207 <run-tck-tests
1208 tck.src.dir="${test.src.dir}/tck-jsr166e"
1209 target="${build.jsr166e.java.version}"
1210 workdir="${build.jsr166e.dir}"
1211 classes="${jsr166e.jar}"/>
1212 </target>
1213
1214 <target name="jsr166e-tck"
1215 description="Runs tck tests for jsr166e for multiple java versions">
1216
1217 <!-- <antcall target="clean"/> -->
1218 <!-- <antcall target="jsr166e-tck-one-java-version"> -->
1219 <!-- <param name="build.jsr166e.java.version" value="8"/> -->
1220 <!-- <param name="build.jsr166e.javac" value="${javac8}"/> -->
1221 <!-- </antcall> -->
1222
1223 <antcall target="clean"/>
1224 <antcall target="jsr166e-tck-one-java-version">
1225 <param name="build.jsr166e.java.version" value="7"/>
1226 <param name="build.jsr166e.javac" value="${javac7}"/>
1227 </antcall>
1228
1229 <antcall target="clean"/>
1230 <antcall target="jsr166e-tck-one-java-version">
1231 <param name="build.jsr166e.java.version" value="6"/>
1232 <param name="build.jsr166e.javac" value="${javac6}"/>
1233 </antcall>
1234 </target>
1235
1236
1237 <target name="jsr166e-test"
1238 depends="jsr166e-tck"
1239 description="Runs all tests for jsr166e">
1240 </target>
1241
1242 <target name="jsr166edist"
1243 depends="jsr166edist-jar, jsr166edist-docs"
1244 description="Puts all distributable products in single hierarchy"/>
1245
1246
1247 <target name="jsr166eclean"
1248 description="Removes all jsr166e build products">
1249 <delete dir="${build.jsr166e.dir}"/>
1250 </target>
1251
1252
1253 <target name="jsr166edist-jar"
1254 depends="jsr166eclean, jsr166ejar">
1255 <copy file="${jsr166e.jar}" todir="${dist.dir}"/>
1256 </target>
1257
1258 <target name="jsr166edist-docs"
1259 depends="jsr166eclean, jsr166edocs">
1260 <mirror-dir src="${jsr166edocs.dir}" dst="${dist.jsr166edocs.dir}"/>
1261 </target>
1262
1263
1264 <!-- Find buglets that can be detected by static build tools -->
1265
1266 <target name="lint">
1267 <antcall target="dists">
1268 <param name="build.javadoc.access" value="public"/>
1269 </antcall>
1270 </target>
1271
1272 <!-- Generates all doclint warnings, even for private methods (rarely useful) -->
1273 <target name="lint-private">
1274 <antcall target="dist">
1275 <param name="build.javadoc.access" value="private"/>
1276 </antcall>
1277 </target>
1278
1279
1280 </project>

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