source: core/java/build.xml @ e68182a

Last change on this file since e68182a was e68182a, checked in by zzz <zzz@…>, 3 years ago

Build: Provide option to prevent Class-Path in manifests (ticket #2317)

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