ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/build.xml
Revision: 1.309
Committed: Mon Dec 16 22:12:32 2019 UTC (4 years, 4 months ago) by jsr166
Content type: text/xml
Branch: MAIN
Changes since 1.308: +2 -1 lines
Log Message:
update to errorprone 2.3.4

File Contents

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