ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/build.xml
Revision: 1.319
Committed: Wed Aug 12 18:01:46 2020 UTC (3 years, 8 months ago) by jsr166
Content type: text/xml
Branch: MAIN
Changes since 1.318: +1 -0 lines
Log Message:
Xep:UnnecessaryParentheses:OFF

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="-Xdoclint:all,-missing"/>
431 <arg value="--patch-module=java.base=${src.dir}"/>
432 <arg value="--frames" if:set="use-frames"/>
433 <arg value="--override-methods=summary"/>
434 <arg value="-tag"/> <arg value="${javadoc.jls.option}"/>
435 <arg value="-tag"/> <arg value="implSpec:a:Implementation Requirements:"/>
436 <arg value="-tag"/> <arg value="implNote:a:Implementation Note:"/>
437 <arg value="-tag"/> <arg value="apiNote:a:API Note:"/>
438 <!-- tags added in jdk9: currently unused -->
439 <!-- <arg value="-tag"/> <arg value="revised:X"/> -->
440 <!-- <arg value="-tag"/> <arg value="spec:X"/> -->
441 </javadoc>
442 </target>
443
444
445 <target name="dist"
446 depends="dist-clean, dist-jar, dist-docs"
447 description="Puts all distributable products in single hierarchy"/>
448
449
450 <target name="clean"
451 description="Removes all build products">
452 <delete dir="${build.dir}"/>
453 </target>
454
455
456 <target name="dist-clean"
457 description="Removes all build and distribution products">
458 <delete dir="${build.dir}"/>
459 <delete dir="${dist.dir}"/>
460 </target>
461
462
463 <target name="dist-jar"
464 depends="clean, jar">
465 <copy file="${product.jar}" todir="${dist.dir}"/>
466 </target>
467
468 <target name="dist-docs"
469 depends="clean, docs">
470 <mirror-dir src="${docs.dir}" dst="${dist.docs.dir}"/>
471 </target>
472
473 <target name="tck"
474 depends="jar"
475 description="Runs tck tests for src/main directly">
476
477 <run-tck-tests
478 target="${java.runtime.target}"
479 workdir="${build.dir}"
480 classes="${product.jar}">
481 <javac-elements>
482 <compilerarg value="-Werror"/>
483 </javac-elements>
484 </run-tck-tests>
485 </target>
486
487 <target name="tck-parallelism-1"
488 description="Runs tck with common pool parallelism 1">
489 <antcall target="tck">
490 <param name="java.util.concurrent.ForkJoinPool.common.parallelism" value="1"/>
491 </antcall>
492 </target>
493
494 <target name="tck-parallelism-0"
495 description="Runs tck with common pool parallelism 0">
496 <antcall target="tck">
497 <param name="java.util.concurrent.ForkJoinPool.common.parallelism" value="0"/>
498 </antcall>
499 </target>
500
501 <target name="tck-security-manager"
502 description="Runs tck with a security manager">
503 <antcall target="tck">
504 <param name="jsr166.useSecurityManager" value="true"/>
505 </antcall>
506 </target>
507
508 <target name="jtreg"
509 depends="jar"
510 description="Runs jtreg tests for src/main using the jtreg ant task">
511 <run-jtreg-tests
512 target="${java.runtime.target}"
513 workdir="${build.dir}"
514 classes="${product.jar}"/>
515 </target>
516
517 <target name="test"
518 depends="tck, tck-parallelism-1, tck-parallelism-0, jtreg"
519 description="Runs tck and jtreg tests for src/main"/>
520
521 <target name="test-version-permutations"
522 depends="test11, test12, test13, test14, test15, test16,
523 test11-12, test11-13, test11-14, test11-15, test11-16,
524 clean, test, docs"
525 description="Runs tck and jtreg tests for various build-time and runtime java versions"/>
526
527 <target name="test11">
528 <antcall>
529 <param name="java.runtime.target" value="11"/>
530 <param name="build.main.javac" value="${javac11}"/>
531 <param name="build.main.javadoc" value="${javadoc12}"/>
532 <param name="build.main.javadoc.source" value="11"/>
533 <target name="clean"/>
534 <target name="test"/>
535 <target name="docs"/>
536 </antcall>
537 </target>
538
539 <target name="test12">
540 <antcall>
541 <param name="java.runtime.target" value="12"/>
542 <param name="build.main.javac" value="${javac12}"/>
543 <param name="build.main.javadoc" value="${javadoc12}"/>
544 <param name="build.main.javadoc.source" value="12"/>
545 <target name="clean"/>
546 <target name="test"/>
547 <target name="docs"/>
548 </antcall>
549 </target>
550
551 <target name="test13">
552 <antcall>
553 <param name="java.runtime.target" value="13"/>
554 <param name="build.main.javac" value="${javac13}"/>
555 <param name="build.main.javadoc" value="${javadoc13}"/>
556 <param name="build.main.javadoc.source" value="13"/>
557 <target name="clean"/>
558 <target name="test"/>
559 <target name="docs"/>
560 </antcall>
561 </target>
562
563 <target name="test14">
564 <antcall>
565 <param name="java.runtime.target" value="14"/>
566 <param name="build.main.javac" value="${javac14}"/>
567 <param name="build.main.javadoc" value="${javadoc14}"/>
568 <param name="build.main.javadoc.source" value="14"/>
569 <target name="clean"/>
570 <target name="test"/>
571 <target name="docs"/>
572 </antcall>
573 </target>
574
575 <target name="test15">
576 <antcall>
577 <param name="java.runtime.target" value="15"/>
578 <param name="build.main.javac" value="${javac15}"/>
579 <param name="build.main.javadoc" value="${javadoc15}"/>
580 <param name="build.main.javadoc.source" value="15"/>
581 <target name="clean"/>
582 <target name="test"/>
583 <target name="docs"/>
584 </antcall>
585 </target>
586
587 <target name="test16">
588 <antcall>
589 <param name="java.runtime.target" value="16"/>
590 <param name="build.main.javac" value="${javac16}"/>
591 <param name="build.main.javadoc" value="${javadoc16}"/>
592 <param name="build.main.javadoc.source" value="16"/>
593 <target name="clean"/>
594 <target name="test"/>
595 <target name="docs"/>
596 </antcall>
597 </target>
598
599 <target name="test11-12">
600 <antcall>
601 <param name="java.runtime.target" value="12"/>
602 <param name="build.main.javac" value="${javac11}"/>
603 <param name="build.main.javadoc" value="${javadoc12}"/>
604 <param name="build.main.javadoc.source" value="11"/>
605 <target name="clean"/>
606 <target name="test"/>
607 <target name="docs"/>
608 </antcall>
609 </target>
610
611 <target name="test11-13">
612 <antcall>
613 <param name="java.runtime.target" value="13"/>
614 <param name="build.main.javac" value="${javac11}"/>
615 <param name="build.main.javadoc" value="${javadoc13}"/>
616 <param name="build.main.javadoc.source" value="11"/>
617 <target name="clean"/>
618 <target name="test"/>
619 <target name="docs"/>
620 </antcall>
621 </target>
622
623 <target name="test11-14">
624 <antcall>
625 <param name="java.runtime.target" value="14"/>
626 <param name="build.main.javac" value="${javac11}"/>
627 <param name="build.main.javadoc" value="${javadoc14}"/>
628 <param name="build.main.javadoc.source" value="11"/>
629 <target name="clean"/>
630 <target name="test"/>
631 <target name="docs"/>
632 </antcall>
633 </target>
634
635 <target name="test11-15">
636 <antcall>
637 <param name="java.runtime.target" value="15"/>
638 <param name="build.main.javac" value="${javac11}"/>
639 <param name="build.main.javadoc" value="${javadoc15}"/>
640 <param name="build.main.javadoc.source" value="11"/>
641 <target name="clean"/>
642 <target name="test"/>
643 <target name="docs"/>
644 </antcall>
645 </target>
646
647 <target name="test11-16">
648 <antcall>
649 <param name="java.runtime.target" value="16"/>
650 <param name="build.main.javac" value="${javac11}"/>
651 <param name="build.main.javadoc" value="${javadoc16}"/>
652 <param name="build.main.javadoc.source" value="11"/>
653 <target name="clean"/>
654 <target name="test"/>
655 <target name="docs"/>
656 </antcall>
657 </target>
658
659 <target name="docs16">
660 <antcall>
661 <param name="java.runtime.target" value="16"/>
662 <param name="build.main.javac" value="${javac16}"/>
663 <param name="build.main.javadoc" value="${javadoc16}"/>
664 <param name="build.main.javadoc.source" value="16"/>
665 <target name="clean"/>
666 <target name="docs"/>
667 </antcall>
668 </target>
669
670
671 <target name="configure-compiler">
672 <fail message="ant version too old">
673 <condition> <not> <antversion atleast="1.9.1"/> </not> </condition>
674 </fail>
675
676 <property name="unchecked.option" value="-Xlint:unchecked"/>
677
678 <condition property="warnunchecked.arg" value="${unchecked.option}">
679 <istrue value="${build.warnunchecked}"/>
680 </condition>
681
682 <property name="warnunchecked.arg" value=""/>
683
684
685 <!-- Common options in javac invocations -->
686 <property name="build.args" value="${warnunchecked.arg}"/>
687
688 </target>
689
690
691 <target name="compile-test-loops" depends="jar"
692 description="Compiles all the perf tests in src/test/loops">
693
694 <mkdir dir="${build.dir}/test/loops"/>
695
696 <javac srcdir="${basedir}/src/test/loops"
697 destdir="${build.dir}/test/loops"
698 debug="${build.debug}"
699 debuglevel="${build.debuglevel}"
700 deprecation="${build.deprecation}"
701 includeAntRuntime="false"
702 includeJavaRuntime="false"
703 encoding="ASCII"
704 executable="${build.main.javac}"
705 fork="true">
706
707 <include name="*.java"/>
708 <compilerarg value="-XDignore.symbol.file=true"/>
709 <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial,-deprecation"/>
710 <compilerarg value="--patch-module=java.base=${src.dir}"/>
711 <compilerarg line="${build.args}"/>
712 </javac>
713 </target>
714
715
716 <!-- old branches no longer maintained. build support deleted -->
717 <!-- jsr166 4jdk8; (no longer maintained as of 2019-10) -->
718 <!-- jsr166 4jdk7 (no longer maintained) -->
719 <!-- jsr166x (no longer maintained) -->
720 <!-- jsr166y (no longer maintained) -->
721 <!-- extra166y (no longer maintained) -->
722 <!-- jsr166e (no longer maintained) -->
723
724 <!-- Find buglets that can be detected by static build tools -->
725
726 <!-- <target name="lint"> -->
727 <!-- <antcall target="dists"> -->
728 <!-- <param name="build.javadoc.access" value="protected"/> -->
729 <!-- </antcall> -->
730 <!-- </target> -->
731
732 <!-- Generates all doclint warnings, even for private methods (rarely useful) -->
733 <target name="doclint-private">
734 <antcall target="dist">
735 <param name="build.javadoc.access" value="private"/>
736 </antcall>
737 </target>
738
739
740 <!-- ==============================================================
741 Experimental errorprone support
742 https://errorprone.info
743 https://errorprone.info/docs/installation
744 https://github.com/google/error-prone/issues/1143
745 =================================================================== -->
746 <path id="errorprone.processorpath.path">
747 <pathelement location="${lib.dir}/error_prone_core-2.3.4-with-dependencies.jar"/>
748 <pathelement location="${lib.dir}/dataflow-2.5.7.jar"/>
749 <pathelement location="${lib.dir}/javacutil-2.5.7.jar"/>
750 <pathelement location="${lib.dir}/jFormatString-3.0.0.jar"/>
751 <pathelement location="${lib.dir}/caffeine-2.8.0.jar"/>
752 </path>
753 <property name="errorprone.processorpath" refid="errorprone.processorpath.path" />
754 <property name="errorprone.jsr166.user.flags" value=""/>
755 <property name="errorprone.jsr166.flags"
756 value="-Xep:HashtableContains:OFF
757 -Xep:PreferJavaTimeOverload:OFF
758 -Xep:JdkObsolete:OFF
759 -Xep:MissingOverride:OFF
760 -Xep:MissingFail:OFF
761 -Xep:ThreadPriorityCheck:OFF
762 -Xep:MixedArrayDimensions:ERROR
763 -Xep:RemoveUnusedImports:ERROR
764 -Xep:EmptyIf:ERROR
765 -Xep:MultipleTopLevelClasses:ERROR
766 -Xep:ClassName:ERROR
767 -Xep:LongLiteralLowerCaseSuffix:ERROR
768 -Xep:RedundantThrows:ERROR
769 -Xep:IdentityBinaryExpression:WARN
770 -Xep:ConstructorInvokesOverridable:WARN
771 -Xep:MethodCanBeStatic:WARN
772 ${errorprone.jsr166.user.flags}"/>
773 <!-- -Xep:WildcardImport:ERROR -->
774 <property name="errorprone.jsr166.test.flags"
775 value="-Xep:StringSplitter:OFF
776 -Xep:BoxedPrimitiveConstructor:OFF
777 -Xep:UnnecessaryParentheses:OFF
778 -Xep:ModifyingCollectionWithItself:OFF"/>
779 <!-- ant -emacs errorprone |& grep -EA1 '(warning|error):|warnings' -->
780 <target name="errorprone"
781 depends="clean, configure-compiler"
782 description="Run errorprone over jsr166 source code (experimental)">
783
784 <local name="destdir"/>
785 <property name="destdir" value="${build.classes.dir}/java.base"/>
786 <mkdir dir="${destdir}"/>
787
788 <javac srcdir="${src.dir}"
789 destdir="${destdir}"
790 debug="${build.debug}"
791 debuglevel="${build.debuglevel}"
792 deprecation="${build.deprecation}"
793 classpath=""
794 includeAntRuntime="false"
795 includeJavaRuntime="false"
796 encoding="ASCII"
797 executable="${build.main.javac}"
798 fork="true">
799
800 <include name="**/*.java"/>
801 <!-- Needed to silence -Xep:FutureReturnValueIgnored -->
802 <compilerarg value="-J--illegal-access=permit"/>
803 <compilerarg value="-XDcompilePolicy=simple"/>
804 <compilerarg value="-processorpath"/>
805 <compilerarg pathref="errorprone.processorpath.path"/>
806 <compilerarg value="-Xplugin:ErrorProne
807 ${errorprone.jsr166.flags}"/>
808 <compilerarg value="--patch-module=java.base=${src.dir}"/>
809 <compilerarg value="-Xprefer:source"/>
810 <compilerarg value="-XDignore.symbol.file=true"/>
811 <compilerarg value="-Xlint:all"/>
812 <compilerarg value="-Xdoclint:all/protected,reference/private"/>
813 <compilerarg line="-Xmaxerrs 3000 -Xmaxwarns 3000"/>
814 <compilerarg line="${build.args}"/>
815 </javac>
816
817 <jar destfile="${product.jar}">
818 <fileset dir="${destdir}"/>
819 </jar>
820
821 <run-tck-tests
822 target="${java.runtime.target}"
823 workdir="${build.dir}"
824 classes="${product.jar}">
825 <javac-elements>
826 <!-- Needed to silence -Xep:FutureReturnValueIgnored -->
827 <compilerarg value="-J--illegal-access=permit"/>
828 <compilerarg value="-XDcompilePolicy=simple"/>
829 <compilerarg line="-processorpath ${errorprone.processorpath}"/>
830 <compilerarg value="-Xplugin:ErrorProne
831 ${errorprone.jsr166.flags}
832 ${errorprone.jsr166.test.flags}"/>
833 <compilerarg line="-Xmaxerrs 3000 -Xmaxwarns 3000"/>
834 </javac-elements>
835 </run-tck-tests>
836 </target>
837
838 <!-- ant -emacs errorprone-jtreg |& grep -EA1 '(warning|error):' -->
839 <!-- -XDcompilePolicy=simple or byfile avoids confusing UnusedImports -->
840 <target name="errorprone-jtreg"
841 depends="jar"
842 description="Run errorprone over jtreg tests (experimental)">
843
844 <run-jtreg-tests
845 target="${java.runtime.target}"
846 workdir="${build.dir}"
847 classes="${product.jar}"
848 verbose="all">
849 <jtreg-elements>
850 <arg value="-javacoption:-XDcompilePolicy=simple"/>
851 <arg value="-javacoption:-processorpath"/>
852 <arg value="-javacoption:${errorprone.processorpath}"/>
853 <arg value="-javacoption:-Xplugin:ErrorProne
854 ${errorprone.jsr166.flags}
855 ${errorprone.jsr166.test.flags}
856 -Xep:MultipleTopLevelClasses:WARN
857 -Xep:NonAtomicVolatileUpdate:OFF"/>
858 </jtreg-elements>
859 </run-jtreg-tests>
860 </target>
861
862
863 <!-- ==============================================================
864 Running guava tests against jsr166 code
865 =================================================================== -->
866
867 <!-- <ivy:cachepath pathid="lib.path.id" inline="true" conf="*" -->
868 <!-- organisation="com.google.guava" module="guava-testlib" revision="21.0"/> -->
869 <!-- <property name="guava.version" value="21.0"/> -->
870
871 <!-- HOWTO debug print a path id -->
872 <!-- <pathconvert property="guava.testlib.classpath" refid="guava.testlib.classpath" /> -->
873 <!-- <echo message="guava.testlib.classpath=${guava.testlib.classpath}"/> -->
874
875 <!-- <ivy:retrieve pathid="guava.tests.classpath" type="jar" inline="true" conf="*" pattern="${lib.dir}/[type]/[artifact].[ext]" -->
876 <!-- organisation="com.google.guava" module="guava-tests"/> -->
877 <!-- <get src="http://repo2.maven.org/maven2/com/google/guava/guava-tests/${guava.version}/guava-tests-${guava.version}-tests.jar" -->
878 <!-- dest="${lib.dir}/jar/guava-tests-tests.jar" usetimestamp="true"/> -->
879 <!-- <ivy:cachepath pathid="lib.path.id" inline="true" conf="*" type="*" -->
880 <!-- organisation="com.google.guava" module="guava-testlib" revision="${guava.version}"/> -->
881
882 <!-- <test name="com.google.common.collect.testing.TestsForQueuesInJavaUtil"/> -->
883 <!-- <test name="com.google.common.collect.testing.TestsForListsInJavaUtil"/> -->
884 <!-- <test name="com.google.common.collect.testing.TestsForSetsInJavaUtil"/> -->
885 <!-- <test name="com.google.common.collect.testing.TestsForMapsInJavaUtil"/> -->
886
887 <!-- <ivy:retrieve pathid="guava.testlib.classpath" -->
888 <!-- type="*" inline="true" conf="*(private),*(public)" -->
889 <!-- pattern="${guava.dir}/[artifact].[ext]" -->
890 <!-- organisation="com.google.guava" module="guava-testlib"/> -->
891
892 <!-- Work around bug below by downloading guava-testlib-tests.jar "by hand": -->
893 <!-- https://issues.apache.org/jira/browse/IVY-1444 -->
894 <!-- maven tests artifacts cannot be downloaded because they are mapped to private configurations -->
895
896 <target name="init-ivy">
897 <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/2.4.0/ivy-2.4.0.jar"
898 dest="${build.dir}/ivy.jar" usetimestamp="true" skipexisting="true"/>
899 <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant"
900 classpath="${build.dir}/ivy.jar"/>
901 </target>
902
903 <target name="guava-tests" depends="jar, init-ivy"
904 description="Guava tests run against jsr166 collections">
905 <property name="guava.dir" value="${build.dir}/guava-testlib"/>
906 <mkdir dir="${guava.dir}"/>
907 <ivy:retrieve pathid="guava.testlib.classpath"
908 type="jar,bundle" inline="true" conf="default,master"
909 pattern="${guava.dir}/[artifact].[ext]"
910 organisation="com.google.guava" module="guava-testlib"/>
911 <property name="guava.version" value="21.0"/>
912 <get src="http://repo2.maven.org/maven2/com/google/guava/guava-testlib/${guava.version}/guava-testlib-${guava.version}-tests.jar"
913 dest="${guava.dir}/guava-testlib-tests.jar" usetimestamp="true"/>
914 <junit printsummary="true" showoutput="true" haltonfailure="true"
915 jvm="${build.main.java}" fork="true">
916 <jvmarg line="-ea -esa --patch-module=java.base=${product.jar}"/>
917 <formatter type="brief"/>
918 <classpath>
919 <pathelement location="${guava.dir}/guava-testlib-tests.jar"/>
920 <path refid="guava.testlib.classpath"/>
921 </classpath>
922
923 <!-- "6" in "OpenJdk6Tests" misleadingly means "6+" -->
924 <test name="com.google.common.collect.testing.OpenJdk6Tests"/>
925 </junit>
926 </target>
927
928 </project>