ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/build.xml
Revision: 1.304
Committed: Sun Oct 6 17:34:58 2019 UTC (4 years, 6 months ago) by jsr166
Content type: text/xml
Branch: MAIN
Changes since 1.303: +46 -813 lines
Log Message:
delete pre-jdk11 compatibility support; no longer maintained

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="-agentvm"/>
275 <arg value="-noreport"/>
276 <arg value="-verbose:@{verbose}"/>
277 <arg value="-vmoptions:-esa -ea"/>
278 <arg value="-automatic"/>
279 <arg value="-k:!ignore"/>
280 <arg line="@{jtregflags}"/>
281 <arg line="${jtreg.flags}"/>
282 <jtreg-elements/>
283 </jtreg>
284 </sequential>
285 </macrodef>
286
287 <!-- ALoops classpath -->
288 <path id="loops.classpath">
289 <pathelement location="${build.loops.dir}"/>
290 </path>
291
292 <!-- Support @jls tag, used in jdk8+ javadoc -->
293 <!-- TODO: switch to @jls taglet, as supported by jdk14+ javadoc -->
294 <property name="javadoc.jls.cite" value="The Java&amp;trade; Language Specification"/>
295 <property name="javadoc.jls.option" value="jls:a:See &lt;cite&gt;${javadoc.jls.cite}&lt;/cite&gt;:"/>
296
297 <!-- Main targets -->
298
299 <!-- Default values: may seem strange ... -->
300 <!-- At runtime, target latest LTS, i.e. jdk11 -->
301 <!-- But at build time, target jdk9, for maximal binary portability -->
302 <!-- ButButBut as of 2019-08, target jdk11 at build time -->
303 <!-- Use javadoc12 (but -link to jdk11 api docs!), to get:
304 o override-methods=summary
305 o {@systemProperty ...}
306 o 8211194: issues linking to external documentation (was: missing package-list for JDK10 / JDK11 documentation)
307 o 8202628: javadoc generates bad links in TestModules.java
308 -->
309 <property name="java.runtime.target" value="11"/>
310 <property name="build.main.java" value="${java11}"/>
311 <property name="build.main.javac" value="${javac11}"/>
312 <property name="build.main.javadoc" value="${javadoc12}"/>
313 <property name="build.main.javadoc.source" value="${java.runtime.target}"/>
314
315 <target name="dists"
316 depends="dist"
317 description="Builds all public jars and docs"/>
318
319 <target name="compile"
320 depends="configure-compiler"
321 description="Compiles src/main sources to build dir">
322
323 <local name="destdir"/>
324 <property name="destdir" value="${build.classes.dir}/java.base"/>
325
326 <mkdir dir="${destdir}"/>
327
328 <javac srcdir="${src.dir}"
329 destdir="${destdir}"
330 debug="${build.debug}"
331 debuglevel="${build.debuglevel}"
332 deprecation="${build.deprecation}"
333 classpath=""
334 includeAntRuntime="false"
335 includeJavaRuntime="false"
336 encoding="ASCII"
337 executable="${build.main.javac}"
338 fork="true">
339
340 <include name="**/*.java"/>
341 <compilerarg value="--patch-module=java.base=${src.dir}"/>
342 <compilerarg value="-Xprefer:source"/>
343 <compilerarg value="-XDignore.symbol.file=true"/>
344 <!-- Xlint:-removal for jdk12 Unsafe Object -> Reference renaming -->
345 <compilerarg value="-Xlint:all,-removal"/>
346 <compilerarg line="--doclint-format html5"/>
347 <compilerarg value="-Xdoclint:all/protected,reference/private"/>
348 <compilerarg value="-Xdoclint/package:java.util.*"/>
349 <compilerarg value="-Werror"/>
350 <compilerarg line="-Xmaxerrs 1000 -Xmaxwarns 1000"/>
351 <compilerarg line="${build.args}"/>
352
353 </javac>
354 </target>
355
356
357 <target name="jar"
358 depends="compile"
359 description="Builds library jar for src/main from compiled sources">
360 <local name="subdir"/>
361 <available property="subdir" file="${build.classes.dir}/java.base" type="dir" value="/java.base"/>
362 <jar destfile="${product.jar}">
363 <fileset dir="${build.classes.dir}${subdir}"/>
364 <manifest>
365 <attribute name="Built-By" value="${user.name}"/>
366 <attribute name="Implementation-Vendor" value="JCP JSR-166 Expert Group."/>
367 </manifest>
368 </jar>
369 </target>
370
371
372 <target name="docs"
373 description="Builds javadocs for src/main to dist dir">
374
375 <delete dir="${docs.dir}"/>
376 <mkdir dir="${docs.dir}"/>
377
378 <!-- the packagenames="none" hack below prevents scanning the -->
379 <!-- sourcepath for packages -->
380
381 <!-- TODO: sourcepath="${src.dir}:${jdk9.src.dir}" -->
382 <!-- TODO: sourcepath="${src.dir}:${jdk9.src.dir}:${jdk9.src.home}/jdk/src/java.logging/share/classes" -->
383 <!-- TODO: sourcepath="${src.dir}:${jdk9.home}/src.zip" -->
384 <!-- TODO: <arg line="-sourcepath ${src.dir}:${jdk9.home}/src.zip"/> -->
385 <!-- TODO: <arg line="- -module-source-path ${jdk9.home}/src.zip"/> -->
386 <javadoc destdir="${docs.dir}"
387 packagenames="none"
388 link="${java.api.url}"
389 overview="${src.dir}/intro.html"
390 access="${build.javadoc.access}"
391 sourcepath="${src.dir}"
392 classpath=""
393 source="${build.main.javadoc.source}"
394 executable="${build.main.javadoc}">
395 <!-- TODO: JDK-8214571 failonerror = "true" -->
396 <fileset dir="${src.dir}" defaultexcludes="yes">
397 <include name="**/*.java"/>
398 </fileset>
399 <arg line="-Xdocrootparent ${java.docroot.url}"/>
400 <arg line="-Xmaxerrs 1000 -Xmaxwarns 1000"/>
401 <arg value="-XDignore.symbol.file=true"/>
402 <arg value="-html5"/>
403 <arg value="--patch-module=java.base=${src.dir}"/>
404 <!-- old school frames via docs/index.html?overview-summary.html -->
405 <!-- TODO: - -frames no longer a supported option in jdk13+ -->
406 <arg value="--frames"/>
407 <arg value="--override-methods=summary"/>
408 <arg value="-tag"/> <arg value="${javadoc.jls.option}"/>
409 <arg value="-tag"/> <arg value="implSpec:a:Implementation Requirements:"/>
410 <arg value="-tag"/> <arg value="implNote:a:Implementation Note:"/>
411 <arg value="-tag"/> <arg value="apiNote:a:API Note:"/>
412 <!-- tags added in jdk9: currently unused -->
413 <!-- <arg value="-tag"/> <arg value="revised:X"/> -->
414 <!-- <arg value="-tag"/> <arg value="spec:X"/> -->
415 </javadoc>
416 </target>
417
418
419 <target name="dist"
420 depends="dist-clean, dist-jar, dist-docs"
421 description="Puts all distributable products in single hierarchy"/>
422
423
424 <target name="clean"
425 description="Removes all build products">
426 <delete dir="${build.dir}"/>
427 </target>
428
429
430 <target name="dist-clean"
431 description="Removes all build and distribution products">
432 <delete dir="${build.dir}"/>
433 <delete dir="${dist.dir}"/>
434 </target>
435
436
437 <target name="dist-jar"
438 depends="clean, jar">
439 <copy file="${product.jar}" todir="${dist.dir}"/>
440 </target>
441
442 <target name="dist-docs"
443 depends="clean, docs">
444 <mirror-dir src="${docs.dir}" dst="${dist.docs.dir}"/>
445 </target>
446
447 <target name="tck"
448 depends="jar"
449 description="Runs tck tests for src/main directly">
450
451 <run-tck-tests
452 target="${java.runtime.target}"
453 workdir="${build.dir}"
454 classes="${product.jar}">
455 <javac-elements>
456 <compilerarg value="-Werror"/>
457 </javac-elements>
458 </run-tck-tests>
459 </target>
460
461 <target name="tck-parallelism-1"
462 description="Runs tck with common pool parallelism 1">
463 <antcall target="tck">
464 <param name="java.util.concurrent.ForkJoinPool.common.parallelism" value="1"/>
465 </antcall>
466 </target>
467
468 <target name="tck-parallelism-0"
469 description="Runs tck with common pool parallelism 0">
470 <antcall target="tck">
471 <param name="java.util.concurrent.ForkJoinPool.common.parallelism" value="0"/>
472 </antcall>
473 </target>
474
475 <target name="tck-security-manager"
476 description="Runs tck with a security manager">
477 <antcall target="tck">
478 <param name="jsr166.useSecurityManager" value="true"/>
479 </antcall>
480 </target>
481
482 <target name="jtreg"
483 depends="jar"
484 description="Runs jtreg tests for src/main using the jtreg ant task">
485 <run-jtreg-tests
486 target="${java.runtime.target}"
487 workdir="${build.dir}"
488 classes="${product.jar}"/>
489 </target>
490
491 <target name="test"
492 depends="tck, tck-parallelism-1, tck-parallelism-0, jtreg"
493 description="Runs tck and jtreg tests for src/main"/>
494
495 <target name="test-version-permutations"
496 depends="test11, test12, test13, test14, test11-12, test11-13, test11-14, clean, test, docs">
497 </target>
498
499 <target name="test11">
500 <antcall target="clean"/>
501 <antcall>
502 <param name="java.runtime.target" value="11"/>
503 <param name="build.main.javac" value="${javac11}"/>
504 <param name="build.main.javadoc" value="${javadoc12}"/>
505 <param name="build.main.javadoc.source" value="11"/>
506 <target name="test"/>
507 <target name="docs"/>
508 </antcall>
509 </target>
510
511 <target name="test12">
512 <antcall target="clean"/>
513 <antcall>
514 <param name="java.runtime.target" value="12"/>
515 <param name="build.main.javac" value="${javac12}"/>
516 <param name="build.main.javadoc" value="${javadoc12}"/>
517 <param name="build.main.javadoc.source" value="12"/>
518 <target name="test"/>
519 <target name="docs"/>
520 </antcall>
521 </target>
522
523 <target name="test13">
524 <antcall target="clean"/>
525 <antcall>
526 <param name="java.runtime.target" value="13"/>
527 <param name="build.main.javac" value="${javac13}"/>
528 <param name="build.main.javadoc" value="${javadoc13}"/>
529 <param name="build.main.javadoc.source" value="13"/>
530 <target name="test"/>
531 <target name="docs"/>
532 </antcall>
533 </target>
534
535 <target name="test14">
536 <antcall target="clean"/>
537 <antcall>
538 <param name="java.runtime.target" value="14"/>
539 <param name="build.main.javac" value="${javac14}"/>
540 <param name="build.main.javadoc" value="${javadoc14}"/>
541 <param name="build.main.javadoc.source" value="14"/>
542 <target name="test"/>
543 <target name="docs"/>
544 </antcall>
545 </target>
546
547 <target name="test11-12">
548 <antcall target="clean"/>
549 <antcall>
550 <param name="java.runtime.target" value="12"/>
551 <param name="build.main.javac" value="${javac11}"/>
552 <param name="build.main.javadoc" value="${javadoc12}"/>
553 <param name="build.main.javadoc.source" value="11"/>
554 <target name="test"/>
555 <target name="docs"/>
556 </antcall>
557 </target>
558
559 <target name="test11-13">
560 <antcall target="clean"/>
561 <antcall>
562 <param name="java.runtime.target" value="13"/>
563 <param name="build.main.javac" value="${javac11}"/>
564 <param name="build.main.javadoc" value="${javadoc13}"/>
565 <param name="build.main.javadoc.source" value="11"/>
566 <target name="test"/>
567 <target name="docs"/>
568 </antcall>
569 </target>
570
571 <target name="test11-14">
572 <antcall target="clean"/>
573 <antcall>
574 <param name="java.runtime.target" value="14"/>
575 <param name="build.main.javac" value="${javac11}"/>
576 <param name="build.main.javadoc" value="${javadoc14}"/>
577 <param name="build.main.javadoc.source" value="11"/>
578 <target name="test"/>
579 <target name="docs"/>
580 </antcall>
581 </target>
582
583
584 <target name="configure-compiler">
585 <fail message="ant version too old">
586 <condition> <not> <antversion atleast="1.9.1"/> </not> </condition>
587 </fail>
588
589 <property name="unchecked.option" value="-Xlint:unchecked"/>
590
591 <condition property="warnunchecked.arg" value="${unchecked.option}">
592 <istrue value="${build.warnunchecked}"/>
593 </condition>
594
595 <property name="warnunchecked.arg" value=""/>
596
597
598 <!-- Common options in javac invocations -->
599 <property name="build.args" value="${warnunchecked.arg}"/>
600
601 </target>
602
603
604 <target name="compile-test-loops" depends="jar"
605 description="Compiles all the perf tests in src/test/loops">
606
607 <mkdir dir="${build.dir}/test/loops"/>
608
609 <javac srcdir="${basedir}/src/test/loops"
610 destdir="${build.dir}/test/loops"
611 debug="${build.debug}"
612 debuglevel="${build.debuglevel}"
613 deprecation="${build.deprecation}"
614 includeAntRuntime="false"
615 includeJavaRuntime="false"
616 encoding="ASCII"
617 executable="${build.main.javac}"
618 fork="true">
619
620 <include name="*.java"/>
621 <compilerarg value="-XDignore.symbol.file=true"/>
622 <compilerarg value="-Xlint:all,-unchecked,-rawtypes,-serial,-deprecation"/>
623 <compilerarg value="--patch-module=java.base=${src.dir}"/>
624 <compilerarg line="${build.args}"/>
625 </javac>
626 </target>
627
628
629 <!-- old branches no longer maintained. build support deleted -->
630 <!-- jsr166 4jdk8; (no longer maintained as of 2019-10) -->
631 <!-- jsr166 4jdk7 (no longer maintained) -->
632 <!-- jsr166x (no longer maintained) -->
633 <!-- jsr166y (no longer maintained) -->
634 <!-- extra166y (no longer maintained) -->
635 <!-- jsr166e (no longer maintained) -->
636
637 <!-- Find buglets that can be detected by static build tools -->
638
639 <!-- <target name="lint"> -->
640 <!-- <antcall target="dists"> -->
641 <!-- <param name="build.javadoc.access" value="protected"/> -->
642 <!-- </antcall> -->
643 <!-- </target> -->
644
645 <!-- Generates all doclint warnings, even for private methods (rarely useful) -->
646 <target name="doclint-private">
647 <antcall target="dist">
648 <param name="build.javadoc.access" value="private"/>
649 </antcall>
650 </target>
651
652
653 <!-- ==============================================================
654 Experimental errorprone support
655 https://errorprone.info
656 https://errorprone.info/docs/installation
657 https://github.com/google/error-prone/issues/1143
658 =================================================================== -->
659 <path id="errorprone.processorpath.path">
660 <pathelement location="${lib.dir}/error_prone_core-2.3.2-with-dependencies.jar"/>
661 <pathelement location="${lib.dir}/dataflow-2.5.7.jar"/>
662 <pathelement location="${lib.dir}/javacutil-2.5.7.jar"/>
663 <pathelement location="${lib.dir}/jFormatString-3.0.0.jar"/>
664 </path>
665 <property name="errorprone.processorpath" refid="errorprone.processorpath.path" />
666 <property name="errorprone.jsr166.user.flags" value=""/>
667 <property name="errorprone.jsr166.flags"
668 value="-Xep:HashtableContains:OFF
669 -Xep:JdkObsolete:OFF
670 -Xep:MissingOverride:OFF
671 -Xep:MissingFail:OFF
672 -Xep:ThreadPriorityCheck:OFF
673 -Xep:MixedArrayDimensions:ERROR
674 -Xep:RemoveUnusedImports:ERROR
675 -Xep:EmptyIf:ERROR
676 -Xep:MultipleTopLevelClasses:ERROR
677 -Xep:ClassName:ERROR
678 -Xep:LongLiteralLowerCaseSuffix:ERROR
679 -Xep:RedundantThrows:ERROR
680 -Xep:IdentityBinaryExpression:WARN
681 -Xep:ConstructorInvokesOverridable:WARN
682 -Xep:MethodCanBeStatic:WARN
683 ${errorprone.jsr166.user.flags}"/>
684 <!-- -Xep:WildcardImport:ERROR -->
685 <property name="errorprone.jsr166.test.flags"
686 value="-Xep:StringSplitter:OFF
687 -Xep:BoxedPrimitiveConstructor:OFF
688 -Xep:ModifyingCollectionWithItself:OFF"/>
689 <!-- ant -emacs errorprone |& grep -EA1 '(warning|error):|warnings' -->
690 <target name="errorprone"
691 depends="clean, configure-compiler"
692 description="Run errorprone over jsr166 source code (experimental)">
693
694 <local name="destdir"/>
695 <property name="destdir" value="${build.classes.dir}/java.base"/>
696 <mkdir dir="${destdir}"/>
697
698 <javac srcdir="${src.dir}"
699 destdir="${destdir}"
700 debug="${build.debug}"
701 debuglevel="${build.debuglevel}"
702 deprecation="${build.deprecation}"
703 classpath=""
704 includeAntRuntime="false"
705 includeJavaRuntime="false"
706 encoding="ASCII"
707 executable="${build.main.javac}"
708 fork="true">
709
710 <include name="**/*.java"/>
711 <!-- Needed to silence -Xep:FutureReturnValueIgnored -->
712 <compilerarg value="-J--illegal-access=permit"/>
713 <compilerarg value="-XDcompilePolicy=simple"/>
714 <compilerarg value="-processorpath"/>
715 <compilerarg pathref="errorprone.processorpath.path"/>
716 <compilerarg value="-Xplugin:ErrorProne
717 ${errorprone.jsr166.flags}"/>
718 <compilerarg value="--patch-module=java.base=${src.dir}"/>
719 <compilerarg value="-Xprefer:source"/>
720 <compilerarg value="-XDignore.symbol.file=true"/>
721 <compilerarg value="-Xlint:all"/>
722 <compilerarg value="-Xdoclint:all/protected,reference/private"/>
723 <compilerarg line="-Xmaxerrs 3000 -Xmaxwarns 3000"/>
724 <compilerarg line="${build.args}"/>
725 </javac>
726
727 <jar destfile="${product.jar}">
728 <fileset dir="${destdir}"/>
729 </jar>
730
731 <run-tck-tests
732 target="${java.runtime.target}"
733 workdir="${build.dir}"
734 classes="${product.jar}">
735 <javac-elements>
736 <!-- Needed to silence -Xep:FutureReturnValueIgnored -->
737 <compilerarg value="-J--illegal-access=permit"/>
738 <compilerarg value="-XDcompilePolicy=simple"/>
739 <compilerarg line="-processorpath ${errorprone.processorpath}"/>
740 <compilerarg value="-Xplugin:ErrorProne
741 ${errorprone.jsr166.flags}
742 ${errorprone.jsr166.test.flags}"/>
743 <compilerarg line="-Xmaxerrs 3000 -Xmaxwarns 3000"/>
744 </javac-elements>
745 </run-tck-tests>
746 </target>
747
748 <!-- ant -emacs errorprone-jtreg |& grep -EA1 '(warning|error):' -->
749 <!-- -XDcompilePolicy=simple or byfile avoids confusing UnusedImports -->
750 <target name="errorprone-jtreg"
751 depends="jar"
752 description="Run errorprone over jtreg tests (experimental)">
753
754 <run-jtreg-tests
755 target="${java.runtime.target}"
756 workdir="${build.dir}"
757 classes="${product.jar}"
758 verbose="all">
759 <jtreg-elements>
760 <arg value="-javacoption:-XDcompilePolicy=simple"/>
761 <arg value="-javacoption:-processorpath"/>
762 <arg value="-javacoption:${errorprone.processorpath}"/>
763 <arg value="-javacoption:-Xplugin:ErrorProne
764 ${errorprone.jsr166.flags}
765 ${errorprone.jsr166.test.flags}
766 -Xep:MultipleTopLevelClasses:WARN
767 -Xep:NonAtomicVolatileUpdate:OFF"/>
768 </jtreg-elements>
769 </run-jtreg-tests>
770 </target>
771
772
773 <!-- ==============================================================
774 Running guava tests against jsr166 code
775 =================================================================== -->
776
777 <!-- <ivy:cachepath pathid="lib.path.id" inline="true" conf="*" -->
778 <!-- organisation="com.google.guava" module="guava-testlib" revision="21.0"/> -->
779 <!-- <property name="guava.version" value="21.0"/> -->
780
781 <!-- HOWTO debug print a path id -->
782 <!-- <pathconvert property="guava.testlib.classpath" refid="guava.testlib.classpath" /> -->
783 <!-- <echo message="guava.testlib.classpath=${guava.testlib.classpath}"/> -->
784
785 <!-- <ivy:retrieve pathid="guava.tests.classpath" type="jar" inline="true" conf="*" pattern="${lib.dir}/[type]/[artifact].[ext]" -->
786 <!-- organisation="com.google.guava" module="guava-tests"/> -->
787 <!-- <get src="http://repo2.maven.org/maven2/com/google/guava/guava-tests/${guava.version}/guava-tests-${guava.version}-tests.jar" -->
788 <!-- dest="${lib.dir}/jar/guava-tests-tests.jar" usetimestamp="true"/> -->
789 <!-- <ivy:cachepath pathid="lib.path.id" inline="true" conf="*" type="*" -->
790 <!-- organisation="com.google.guava" module="guava-testlib" revision="${guava.version}"/> -->
791
792 <!-- <test name="com.google.common.collect.testing.TestsForQueuesInJavaUtil"/> -->
793 <!-- <test name="com.google.common.collect.testing.TestsForListsInJavaUtil"/> -->
794 <!-- <test name="com.google.common.collect.testing.TestsForSetsInJavaUtil"/> -->
795 <!-- <test name="com.google.common.collect.testing.TestsForMapsInJavaUtil"/> -->
796
797 <!-- <ivy:retrieve pathid="guava.testlib.classpath" -->
798 <!-- type="*" inline="true" conf="*(private),*(public)" -->
799 <!-- pattern="${guava.dir}/[artifact].[ext]" -->
800 <!-- organisation="com.google.guava" module="guava-testlib"/> -->
801
802 <!-- Work around bug below by downloading guava-testlib-tests.jar "by hand": -->
803 <!-- https://issues.apache.org/jira/browse/IVY-1444 -->
804 <!-- maven tests artifacts cannot be downloaded because they are mapped to private configurations -->
805
806 <target name="init-ivy">
807 <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/2.4.0/ivy-2.4.0.jar"
808 dest="${build.dir}/ivy.jar" usetimestamp="true" skipexisting="true"/>
809 <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant"
810 classpath="${build.dir}/ivy.jar"/>
811 </target>
812
813 <target name="guava-tests" depends="jar, init-ivy"
814 description="Guava tests run against jsr166 collections">
815 <property name="guava.dir" value="${build.dir}/guava-testlib"/>
816 <mkdir dir="${guava.dir}"/>
817 <ivy:retrieve pathid="guava.testlib.classpath"
818 type="jar,bundle" inline="true" conf="default,master"
819 pattern="${guava.dir}/[artifact].[ext]"
820 organisation="com.google.guava" module="guava-testlib"/>
821 <property name="guava.version" value="21.0"/>
822 <get src="http://repo2.maven.org/maven2/com/google/guava/guava-testlib/${guava.version}/guava-testlib-${guava.version}-tests.jar"
823 dest="${guava.dir}/guava-testlib-tests.jar" usetimestamp="true"/>
824 <junit printsummary="true" showoutput="true" haltonfailure="true"
825 jvm="${build.main.java}" fork="true">
826 <jvmarg line="-ea -esa --patch-module=java.base=${product.jar}"/>
827 <formatter type="brief"/>
828 <classpath>
829 <pathelement location="${guava.dir}/guava-testlib-tests.jar"/>
830 <path refid="guava.testlib.classpath"/>
831 </classpath>
832
833 <!-- "6" in "OpenJdk6Tests" misleadingly means "6+" -->
834 <test name="com.google.common.collect.testing.OpenJdk6Tests"/>
835 </junit>
836 </target>
837
838 </project>