source: core/java/build.xml @ f1df496

Last change on this file since f1df496 was 2800791, checked in by zzz <zzz@…>, 2 years ago

Test: Backport EdDSA junit changes from github; fixes NPE in 2 tests

  • Property mode set to 100644
File size: 22.0 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<project basedir="." default="all" name="i2p_sdk">
3    <target name="all" depends="clean, build" />
4    <target name="build" depends="builddep, jar" />
5    <target name="builddep">
6        <!-- noop, since the core doesnt depend on anything -->
7    </target>
8    <condition property="depend.available">
9        <typefound name="depend" />
10    </condition>
11    <target name="depend" if="depend.available">
12        <depend
13            cache="../../build"
14            srcdir="./src" 
15            destdir="./build/obj" >
16        </depend>
17    </target>
18
19    <!-- only used if not set by a higher build.xml -->
20    <property name="javac.compilerargs" value="" />
21    <property name="javac.classpath" value="" />
22    <property name="javac.version" value="1.7" />
23
24    <!-- fixups if we're using libintl.jar for GettextResource.java -->
25    <condition property="source.exclude1" value="gnu/gettext/GettextResource.java" else="NOTHING" >
26        <istrue value="${with-gettext-base}" />
27    </condition>
28    <condition property="javac.classpath.mod1" value="build/libintl.jar:" else="" >
29        <istrue value="${with-gettext-base}" />
30    </condition>
31    <!-- fixups if we're using gnu-getopt.jar for gnu/getopt/* -->
32    <condition property="source.exclude2" value="gnu/getopt/**" else="NOTHING" >
33        <istrue value="${with-libgetopt-java}" />
34    </condition>
35    <condition property="javac.classpath.mod2" value="build/gnu-getopt.jar:" else="" >
36        <istrue value="${with-libgetopt-java}" />
37    </condition>
38    <condition property="translation.includes" value="NOTHING" else="gnu/getopt/*.properties" >
39        <istrue value="${with-libgetopt-java}" />
40    </condition>
41    <!-- fixups if we're using httpclient.jar and httpcore.jar for org.apache.http classes -->
42    <condition property="source.exclude3" value="org/apache/http/**" else="NOTHING" >
43        <istrue value="${with-libhttpclient-java}" />
44    </condition>
45    <condition property="javac.classpath.mod3" value="build/httpclient.jar:build/httpcore.jar:" else="" >
46        <istrue value="${with-libhttpclient-java}" />
47    </condition>
48    <property name="javac.classpath.mod" value="${javac.classpath.mod1}${javac.classpath.mod2}${javac.classpath.mod3}${javac.classpath}" />
49
50    <!-- jar classpath fixups -->
51    <condition property="gettext.jar" value="/usr/share/java/libintl.jar" else="" >
52        <istrue value="${with-gettext-base}" />
53    </condition>
54    <condition property="getopt.jar" value="/usr/share/java/gnu-getopt.jar" else="" >
55        <istrue value="${with-libgetopt-java}" />
56    </condition>
57    <condition property="httpclient.jar" value="/usr/share/java/httpclient.jar /usr/share/java/httpcore.jar" else="" >
58        <istrue value="${with-libhttpclient-java}" />
59    </condition>
60
61    <target name="compile" depends="depend">
62        <mkdir dir="./build" />
63        <mkdir dir="./build/obj" />
64        <!-- sourcepath="" necessary for excludes to work, see ant manual for javac -->
65        <javac sourcepath="" srcdir="./src" debug="true" source="${javac.version}" target="${javac.version}" deprecation="on"
66               debuglevel="lines,vars,source"
67               includeAntRuntime="false"
68               destdir="./build/obj" classpath="${javac.classpath.mod}" >
69            <compilerarg line="${javac.compilerargs}" />
70            <include name="**/*.java" />
71            <exclude name="${source.exclude1}" />
72            <exclude name="${source.exclude2}" />
73            <exclude name="${source.exclude3}" />
74        </javac>
75    </target>
76
77    <target name="listChangedFiles" if="mtn.available" >
78        <exec executable="mtn" outputproperty="workspace.changes" errorproperty="mtn.error2" failifexecutionfails="false" >
79            <arg value="list" />
80            <arg value="changed" />
81            <arg value="." />
82        </exec>
83        <!-- \n in an attribute value generates an invalid manifest -->
84        <exec executable="tr" inputstring="${workspace.changes}" outputproperty="workspace.changes.tr" errorproperty="mtn.error2" failifexecutionfails="false" >
85            <arg value="-s" />
86            <arg value="[:space:]" />
87            <arg value="," />
88        </exec>
89    </target>
90
91    <target name="jar" depends="compile, jarUpToDate, listChangedFiles" unless="jar.uptodate" >
92        <!-- set if unset -->
93        <property name="workspace.changes.tr" value="" />
94        <jar destfile="./build/i2p.jar" >
95            <fileset dir="./build/obj" includes="**/*.class" />
96            <!-- the getopt translation files -->
97            <fileset dir="src" includes="${translation.includes}" />
98            <manifest>
99                <attribute name="Class-Path" value="${gettext.jar} ${getopt.jar} ${httpclient.jar}" />
100                <attribute name="Specification-Title" value="I2P Core API" />
101                <attribute name="Specification-Version" value="${release.number}" />
102                <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" />
103                <attribute name="Implementation-Title" value="I2P Java Core API" />
104                <attribute name="Implementation-Version" value="${full.version}" />
105                <attribute name="Implementation-Vendor" value="The I2P Project https://geti2p.net/" />
106                <attribute name="Built-By" value="${build.built-by}" />
107                <attribute name="Build-Date" value="${build.timestamp}" />
108                <attribute name="Base-Revision" value="${workspace.version}" />
109                <attribute name="Main-Class" value="net.i2p.util.CommandLine" />
110                <attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
111                <attribute name="X-Compile-Source-JDK" value="${javac.version}" />
112                <attribute name="X-Compile-Target-JDK" value="${javac.version}" />
113            </manifest>
114        </jar>
115    </target>
116
117    <target name="jarUpToDate" >
118        <uptodate property="jar.uptodate" targetfile="build/i2p.jar" >
119            <srcfiles dir= "build/obj" includes="**/*.class" />
120        </uptodate>
121    </target>
122
123    <target name="javadoc">
124        <mkdir dir="./build" />
125        <mkdir dir="./build/javadoc" />
126        <javadoc sourcepath="./src:./test/junit" destdir="./build/javadoc" packagenames="*" use="true" splitindex="true" windowtitle="I2P SDK" />
127    </target>
128
129    <!-- for Maven Central -->
130    <target name="javadocJar" depends="javadoc">
131        <jar jarfile="./build/i2p-${release.number}-javadoc.jar">
132            <fileset dir="./build/javadoc" />
133        </jar>
134    </target>
135    <target name="sourcesJar">
136        <jar jarfile="./build/i2p-${release.number}-sources.jar">
137            <fileset dir="./src" />
138        </jar>
139    </target>
140
141    <!-- scala paths -->
142    <target name="scala.init">
143        <property name="scala-library.jar" value="${scalatest.libs}/scala-library.jar" />
144        <property name="scala-xml.jar" value="${scalatest.libs}/scala-xml.jar" />
145        <property name="scalactic.jar" value="${scalatest.libs}/scalactic.jar" />
146        <property name="scalatest.jar" value="${scalatest.libs}/scalatest.jar" />
147        <taskdef resource="scala/tools/ant/antlib.xml">
148            <classpath>
149                <pathelement location="${scalatest.libs}/scala-compiler.jar" />
150                <pathelement location="${scalatest.libs}/scala-reflect.jar" />
151                <pathelement location="${scala-library.jar}" />
152            </classpath>
153        </taskdef>
154    </target>
155
156    <!-- unit tests -->
157    <target name="scalatest.compileTest" depends="compile, scala.init">
158        <mkdir dir="./build" />
159        <mkdir dir="./build/obj_scala" />
160        <scalac srcdir="./test/scalatest" destdir="./build/obj_scala" deprecation="on" >
161            <classpath>
162                <pathelement location="${javac.classpath.mod}" />
163                <pathelement location="${scala-library.jar}" />
164                <pathelement location="${scalactic.jar}" />
165                <pathelement location="${scalatest.jar}" />
166                <pathelement location="./build/obj" />
167            </classpath>
168        </scalac>
169    </target>
170    <target name="junit.compileTest" depends="compile">
171        <mkdir dir="./build" />
172        <mkdir dir="./build/obj" />
173        <!-- set hamcrest and junit homes to the old default unless overridden elsewhere -->
174        <echo message="[DEBUG] ant home is ${ant.home}" />
175        <echo message="[DEBUG] junit home before override is ${junit.home}" />
176        <echo message="[DEBUG] hamcrest home before override is ${hamcrest.home}" />
177        <property name="hamcrest.home" value="${ant.home}/lib/" />
178        <property name="junit.home" value="${ant.home}/lib/" />
179        <echo message="[DEBUG] junit home after override is ${junit.home}" />
180        <echo message="[DEBUG] hamcrest home after override is ${hamcrest.home}" />
181        <javac srcdir="./test/junit" debug="true" source="${javac.version}" target="${javac.version}" deprecation="on"
182               debuglevel="lines,vars,source"
183               includeAntRuntime="true"
184               excludes="${source.exclude}"
185               destdir="./build/obj" >
186            <classpath>
187                <pathelement path="${javac.classpath.mod}" />
188                <pathelement location="${hamcrest.home}/hamcrest-core.jar" />
189                <pathelement location="${hamcrest.home}/hamcrest-library.jar" />
190                <pathelement location="${hamcrest.home}/hamcrest-integration.jar" />
191                <pathelement location="${hamcrest.home}/hamcrest-all.jar" />
192                <pathelement location="${junit.home}/junit4.jar" />
193            </classpath>
194            <compilerarg line="${javac.compilerargs}" />
195        </javac>
196        <!-- EdDSA test vectors -->
197        <copy todir="./build/obj">
198            <fileset dir="./test/junit/">
199                <include name="net/i2p/crypto/eddsa/test.data"/>
200                <include name="net/i2p/crypto/eddsa/math/baseDblPrecmp"/>
201                <include name="net/i2p/crypto/eddsa/math/basePrecmp"/>
202            </fileset>
203        </copy>
204    </target>
205    <!-- jars with tests -->
206    <target name="jarScalaTest" depends="scalatest.compileTest">
207        <mkdir dir="./build/obj_scala_jar" />
208        <copy todir="./build/obj_scala_jar">
209            <fileset dir="./build/">
210                <include name="obj/**/*.class"/>
211            </fileset>
212            <mapper type="glob" from="obj/*" to="*" />
213        </copy>
214        <copy todir="./build/obj_scala_jar">
215            <fileset dir="./build/">
216                <include name="obj_scala/**/*.class"/>
217            </fileset>
218            <mapper type="glob" from="obj_scala/*" to="*" />
219        </copy>
220        <jar destfile="./build/i2pscalatest.jar" basedir="./build/obj_scala_jar" includes="**/*.class" />
221    </target>
222    <target name="jarTest" depends="junit.compileTest">
223        <!-- warning - The junit.test target below doesn't actually include i2ptest.jar in the classpath,
224             only the build/obj directory.
225          -->
226        <jar destfile="./build/i2ptest.jar" basedir="./build/obj" >
227            <fileset dir="./build/obj" includes="**/*.class **/test.data **/baseDblPrecmp **/basePrecmp" />
228            <!-- the getopt translation files -->
229            <fileset dir="src" includes="${translation.includes}" />
230        </jar>
231    </target>
232    <!-- preparation of code coverage tool of choice -->
233    <target name="prepareClover" depends="compile" if="with.clover">
234        <taskdef resource="clovertasks"/>
235        <mkdir dir="../../reports/core/clover" />
236        <clover-setup initString="../../reports/core/clover/coverage.db"/>
237    </target>
238    <target name="prepareCobertura" depends="compile" if="with.cobertura">
239        <taskdef classpath="${with.cobertura}" resource="tasks.properties" onerror="report" />
240        <mkdir dir="./build/obj_cobertura" />
241        <delete file="./cobertura.ser" />
242        <cobertura-instrument todir="./build/obj_cobertura">
243            <fileset dir="./build/obj">
244                <include name="**/*.class"/>
245                <!-- exclude Test classes -->
246                <exclude name="**/*Test.class" />
247                <exclude name="**/*TestSuite.class" />
248                <!-- specific excludes -->
249                <exclude name="**/AllCoreTests.class" />
250                <exclude name="**/stat/SimpleStatDumper.class" />
251                <exclude name="**/stat/SizeMeasure.class" />
252                <exclude name="**/stat/StatLogSplitter.class" />
253                <!-- exclude anything not in net.i2p.* -->
254                <exclude name="com/nettgryppa/**/*.class" />
255                <exclude name="freenet/**/*.class" />
256                <exclude name="gnu/**/*.class" />
257                <exclude name="net/metanotion/**/*.class" />
258                <exclude name="org/bouncycastle/**/*.class" />
259                <exclude name="org/xlattice/**/*.class" />
260            </fileset>
261        </cobertura-instrument>
262    </target>
263    <target name="prepareTest" depends="prepareClover, prepareCobertura" />
264    <!-- end preparation of code coverage tool -->
265    <target name="scalatest.test" depends="clean, scalatest.compileTest, prepareTest">
266        <mkdir dir="../../reports/core/scalatest/" />
267        <delete>
268            <fileset dir="../../reports/core/scalatest">
269                <include name="TEST-*.xml"/>
270            </fileset>
271        </delete>
272        <taskdef name="scalatest" classname="org.scalatest.tools.ScalaTestAntTask">
273            <classpath>
274                <pathelement location="${scala-library.jar}" />
275                <pathelement location="${scala-xml.jar}" />
276                <pathelement location="${scalactic.jar}" />
277                <pathelement location="${scalatest.jar}" />
278                <pathelement location="./build/obj_cobertura" />
279                <pathelement location="./build/obj" />
280                <pathelement location="../../build/jbigi.jar" />
281                <pathelement location="${with.clover}" />
282                <pathelement location="${with.cobertura}" />
283            </classpath>
284        </taskdef>
285        <scalatest runpath="./build/obj_scala" fork="yes" maxmemory="384M">
286            <tagsToExclude>
287                SlowTests
288            </tagsToExclude>
289            <reporter type="stdout" />
290            <reporter type="junitxml" directory="../../reports/core/scalatest/" />
291        </scalatest>
292        <!-- set if unset -->
293        <property name="host.fakename" value="i2ptester" />
294        <!-- replace hostname that junit inserts into reports with fake one -->
295        <replaceregexp byline="true"
296            match="(hostname=)&quot;[^&quot;]+&quot;"
297            replace="\1&quot;${host.fakename}&quot;">
298            <fileset dir="../../reports/core/scalatest/" />
299        </replaceregexp>
300    </target>
301    <target name="junit.test" depends="clean, junit.compileTest, prepareTest">
302        <property name="hamcrest.home" value="${ant.home}/lib/" />
303        <property name="junit.home" value="${ant.home}/lib/" />
304        <mkdir dir="../../reports/core/junit/" />
305        <delete>
306            <fileset dir="../../reports/core/junit">
307                <include name="TEST-*.xml"/>
308            </fileset>
309        </delete>
310        <junit printsummary="withOutAndErr" fork="yes" maxmemory="384m" showoutput="yes" >
311            <sysproperty key="net.sourceforge.cobertura.datafile" file="./cobertura.ser" />
312            <classpath>
313                <pathelement location="../../installer/resources/" />
314                <pathelement path="${javac.classpath.mod}" />
315                <pathelement location="${hamcrest.home}/hamcrest-core.jar" />
316                <pathelement location="${hamcrest.home}/hamcrest-library.jar" />
317                <pathelement location="${hamcrest.home}/hamcrest-integration.jar" />
318                <pathelement location="${hamcrest.home}/hamcrest-all.jar" />
319                <pathelement location="${junit.home}/junit4.jar" />
320                <pathelement location="./build/obj_cobertura" />
321                <pathelement location="./build/obj" />
322                <pathelement location="../../build/jbigi.jar" />
323                <pathelement location="${with.clover}" />
324                <pathelement location="${with.cobertura}" />
325            </classpath>
326            <batchtest todir="../../reports/core/junit/">
327                <fileset dir="./test/junit/">
328                    <include name="**/*Test.java" />
329                    <include name="**/*IT.java" if="runIntegrationTests" />
330                    <exclude name="**/ElGamalAESEngineTest.java" />
331                    <exclude name="**/StructureTest.java" />
332                    <exclude name="**/AbstractFieldElementTest.java" />
333                    <!-- DataHelperTest is *very* slow with cobertura -->
334                    <!--
335                    <exclude name="**/DataHelperTest.java" />
336                    -->
337                </fileset>
338            </batchtest>
339            <formatter type="xml"/>
340        </junit>
341        <!-- set if unset -->
342        <property name="host.fakename" value="i2ptester" />
343        <!-- replace hostname that junit inserts into reports with fake one -->
344        <replaceregexp byline="true"
345            match="(hostname=)&quot;[^&quot;]+&quot;"
346            replace="\1&quot;${host.fakename}&quot;">
347            <fileset dir="../../reports/core/junit/" />
348        </replaceregexp>
349    </target>
350    <target name="test" depends="junit.test, scalatest.test"/>
351    <!-- test reports -->
352    <target name="scalatest.report">
353        <junitreport todir="../../reports/core/scalatest">
354            <fileset dir="../../reports/core/scalatest">
355                <include name="TEST-*.xml"/>
356            </fileset>
357            <report format="frames" todir="../../reports/core/html/scalatest"/>
358        </junitreport>
359    </target>
360    <target name="junit.report">
361        <junitreport todir="../../reports/core/junit">
362            <fileset dir="../../reports/core/junit">
363                <include name="TEST-*.xml"/>
364            </fileset>
365            <report format="frames" todir="../../reports/core/html/junit"/>
366        </junitreport>
367    </target>
368    <target name="clover.report" depends="test" if="with.clover">
369        <clover-report>
370            <current outfile="../../reports/core/html/clover">
371                <format type="html"/>
372            </current>
373        </clover-report>
374    </target>
375    <target name="cobertura.report" depends="test" if="with.cobertura">
376        <mkdir dir="../../reports/core/cobertura" />
377        <cobertura-report format="xml" srcdir="./src" destdir="../../reports/core/cobertura" />
378        <mkdir dir="../../reports/core/html/cobertura" />
379        <cobertura-report format="html" srcdir="./src" destdir="../../reports/core/html/cobertura" />
380        <delete file="./cobertura.ser" />
381    </target>
382    <target name="test.report" depends="junit.report, scalatest.report, clover.report, cobertura.report"/>
383    <!-- end test reports -->
384    <target name="fulltest" depends="test, test.report" />
385    <!-- end unit tests -->
386
387    <!-- benchmarks -->
388    <target name="jmhLibCheck">
389        <!-- override to Ant home if not set -->
390        <property name="jmh.home" value="${ant.home}/lib" />
391        <fail message="Please set jmh.home to a directory containing the necessary JMH libraries. See build.properties for details.">
392            <condition>
393                <not>
394                    <and>
395                        <available file="${jmh.home}/jmh-core.jar" />
396                        <available file="${jmh.home}/jmh-generator-annprocess.jar" />
397                        <available file="${jmh.home}/jopt-simple.jar" />
398                        <available file="${jmh.home}/commons-math3.jar" />
399                    </and>
400                </not>
401            </condition>
402        </fail>
403    </target>
404
405    <target name="bench.compile" depends="compile, jmhLibCheck">
406        <mkdir dir="./build" />
407        <mkdir dir="./build/obj_bench" />
408        <javac srcdir="./bench" debug="true" source="${javac.version}" target="${javac.version}" deprecation="on"
409               debuglevel="lines,vars,source"
410               includeAntRuntime="false"
411               destdir="./build/obj_bench" >
412            <classpath>
413                <pathelement location="${jmh.home}/jmh-core.jar" />
414                <pathelement location="${jmh.home}/jmh-generator-annprocess.jar" />
415                <pathelement location="./build/obj" />
416            </classpath>
417            <compilerarg line="${javac.compilerargs}" />
418        </javac>
419    </target>
420
421    <target name="bench.jar" depends="bench.compile, bench.jarUpToDate, listChangedFiles" unless="bench.jar.uptodate" >
422        <!-- set if unset -->
423        <property name="workspace.changes.tr" value="" />
424        <jar destfile="./build/i2p-benchmarks.jar" basedir="./build/obj_bench" >
425            <manifest>
426                <attribute name="Built-By" value="${build.built-by}" />
427                <attribute name="Build-Date" value="${build.timestamp}" />
428                <attribute name="Base-Revision" value="${workspace.version}" />
429                <attribute name="Main-Class" value="org.openjdk.jmh.Main" />
430                <attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
431                <attribute name="X-Compile-Source-JDK" value="${javac.version}" />
432                <attribute name="X-Compile-Target-JDK" value="${javac.version}" />
433            </manifest>
434            <zipfileset src="${jmh.home}/jmh-core.jar" excludes="**/META-INF/services/**" />
435            <zipfileset src="${jmh.home}/jopt-simple.jar" />
436            <zipfileset src="${jmh.home}/commons-math3.jar" />
437            <fileset dir="./build/obj" includes="**/*.class" />
438        </jar>
439    </target>
440
441    <target name="bench.jarUpToDate">
442        <uptodate property="bench.jar.uptodate" targetfile="build/i2p-benchmarks.jar" >
443            <srcfiles dir= "build/obj" includes="**/*.class" />
444            <srcfiles dir= "build/obj_bench" includes="**/*.class" />
445        </uptodate>
446    </target>
447
448    <target name="clean">
449        <delete dir="./build" />
450    </target>
451    <target name="cleandep" depends="clean">
452        <!-- noop, since the core doesn't depend on anything -->
453    </target>
454    <target name="distclean" depends="clean">
455        <!-- noop, since the core doesn't depend on anything -->
456    </target>
457</project>
Note: See TracBrowser for help on using the repository browser.