ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/build.xml
Revision: 1.316
Committed: Fri Jun 19 17:40:45 2020 UTC (3 years, 10 months ago) by jsr166
Content type: text/xml
Branch: MAIN
Changes since 1.315: +35 -2 lines
Log Message:
add support for jdk16

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