ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/build.xml
Revision: 1.310
Committed: Tue Dec 17 02:09:40 2019 UTC (4 years, 4 months ago) by jsr166
Content type: text/xml
Branch: MAIN
Changes since 1.309: +33 -2 lines
Log Message:
add jdk15 support

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