ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/build.xml
Revision: 1.305
Committed: Sun Oct 6 17:51:03 2019 UTC (4 years, 6 months ago) by jsr166
Content type: text/xml
Branch: MAIN
Changes since 1.304: +8 -3 lines
Log Message:
only use --frames with javadoc12

File Contents

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