ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/build.xml
Revision: 1.324
Committed: Wed Sep 29 01:13:44 2021 UTC (2 years, 6 months ago) by jsr166
Content type: text/xml
Branch: MAIN
Changes since 1.323: +10 -3 lines
Log Message:
updates for jdk 17 and jdk 18

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