ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/build.xml
Revision: 1.313
Committed: Mon Apr 27 23:47:11 2020 UTC (4 years ago) by jsr166
Content type: text/xml
Branch: MAIN
Changes since 1.312: +2 -1 lines
Log Message:
Temporarily disable doclint, due to https://bugs.openjdk.java.net/browse/JDK-8214571

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