I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
build.xml 104 KiB
Newer Older
jrandom's avatar
jrandom committed
<?xml version="1.0" encoding="ISO-8859-1"?>
<project basedir="." default="all" name="i2p">
kytv's avatar
kytv committed

    <!-- Include property files so that values can be easily overridden.
         Users should create an override.properties file to make changes.
     -->
    <property file="override.properties"/>
    <property file="build.properties"/>
    <!-- You probably don't want to change anything from here down -->
zzz's avatar
zzz committed
    <target name="help" depends="all" />
    <target name="all" >
        <echo message="Useful targets: " />
        <echo message="  pkg:       distclean then package everything up (updater, installer)" />
zzz's avatar
zzz committed
        <echo message="  dist:      pkg and javadoc" />
        <echo message="  dist200:   pkg, updater200, and javadoc" />
jrandom's avatar
jrandom committed
        <echo message="  installer: build the GUI installer" />
        <echo message="  installer-freebsd: build the GUI installer (FreeBSD only)" />
        <echo message="  installer-linux: build the GUI installer (Linux only)" />
        <echo message="  installer-osx: build the GUI installer (OSX only)" />
        <echo message="  installer-windows: build the GUI installer (Windows only)" />
        <echo message="  installer-nowindows: build the GUI installer (all but Windows)" />
jrandom's avatar
jrandom committed
        <echo message="  tarball:   tar the full install into i2p.tar.bz2 (extracts to build a new clean install)" />
        <echo message="  updater:   Package the built files in i2pupdate.zip (extracts safely over existing installs)" />
        <echo message="  updater200: Updater compressed with pack200 (creates i2pupdate200.zip, 60% smaller)" />
kytv's avatar
kytv committed
        <echo message="  signed-updater200: Signed updater compressed with pack200 (creates i2pupdate.su3, 60% smaller)" />
zzz's avatar
zzz committed
        <echo message="  updaterWithJavadoc: updater including the javadocs, for display in the console" />
        <echo message="  updater200WithJavadoc: updater including the javadocs, for display in the console (creates i2pupdate200.zip)" />
kytv's avatar
kytv committed
        <echo message="  signed-updater200WithJavadoc: Signed updater including the javadocs, for display in the console (creates i2pupdate.su3)" />
        <echo message="  updaterWithJavadocAndJetty: updater including the javadocs, for display in the console, and Jetty " />
        <echo message="  updater200WithJavadocAndJetty: updater including the javadocs, for display in the console, and Jetty (creates i2pupdate200.zip)" />
kytv's avatar
kytv committed
        <echo message="  signed-updater200WithJavadocAndJetty: Signed updater including the javadocs, for display in the console, and Jetty (creates i2pupdate.su3)" />
        <echo message="  updaterWithJetty: Updater including Jetty" />
zzz's avatar
zzz committed
        <echo message="  updater200withJetty: Updater including Jetty" />
kytv's avatar
kytv committed
        <echo message="  updater200withJetty: Updater including Jetty" />
        <echo message="  signed-updater200withJetty: Signed updater including Jetty" />
        <echo message="  updaterWithJettyFixes: updater including local jetty patches" />
zzz's avatar
zzz committed
        <echo message="  updaterWithGeoIP: updater including GeoIP Files" />
        <echo message="  updaterWithJettyFixesAndGeoIP" />
zzz's avatar
zzz committed
        <echo message="  updaterWithJettyFixesAndJbigi" />
        <echo message="  updaterSmall:   updater with the essentials only - no SAM, i2psnark, SusiMail, SusiDNS, or history.txt" />
        <echo message="  updaterRouter:  updater with the i2p.jar and router.jar only" />
        <echo message="  distclean: clean up all derived files" />
        <!-- <echo message="  syndie:    generate a standalone syndie install" /> -->
        <echo message="  desktopgui: generate a standalone desktopgui install" />
jrandom's avatar
jrandom committed
        <echo message="  i2psnark:  generate a standalone i2psnark install" />
        <echo message="  justBOB:  generate a standalone BOB-one.jar" />
        <echo message="  javadoc:   generate javadoc for the entire project into ./build/javadoc and ./javadoc.zip" />
zzz's avatar
zzz committed
        <echo message="  javadoc-test: Javadocs for unit test classes (build/javadoc-test)" />
        <echo message="  slackpkg:  generate Slackware package in ./Slackware/i2p" />
dream's avatar
dream committed
        <echo message="  debianhowto: instructions on building Debian packages" />
        <echo message="  debian: generate Debian packages in ../" />
        <echo message="          run &quot;ant debianhowto&quot; for instructions" />
        <echo message="  debian-clean: rollback debian specific patches and run the &quot;distclean&quot; target (done automatically at the end of the &quot;debian&quot; target)" />
        <!-- <echo message="  debianrepo: build a Debian repository (reprepro required)" /> -->
        <echo message="  poupdate: update the .po files for translators" />
        <echo message="  pkg-portable-win32:  build a minimum portable version for win32" />
   </target>
dream's avatar
dream committed
    <target name="debianhowto">
            <echo message="To build debian packages, you must make sure that you have" />
            <echo message="the necessary build-dependencies installed." />
            <echo message="The packages required to build can be found in the file "/>
            <echo message="&quot;debian/control&quot; in the &quot;Build-Depends&quot; field."/>
            <echo message="In addition to those packages, be sure to install &quot;fakeroot&quot;,"/>
            <echo message="&quot;quilt&quot; and &quot;build-essential&quot;!" />
            <echo message="" />
            <echo message="The following command will install all of the dependencies for you:" />
            <echo message=" " />
            <echo message="apt-get install debhelper ant debconf default-jdk gettext libgmp3-dev po-debconf fakeroot build-essential \" />
            <echo message="                   quilt libcommons-logging-java dh-apparmor" />
            <echo message=" " />
            <echo message="Once the dependencies are installed, run &quot;ant debian&quot;"/>
            <echo message="to patch the source and build the packages." />
    </target>

    <macrodef name="gpgsign">
        <attribute name="file" />
        <sequential>
            <delete file="@{file}.sig" quiet="true" />
            <exec executable="gpg" failonerror="true">
                <arg value="--default-key" />
                <arg value="${release.gpg.keyid}" />
                <arg value="-b" />
                <arg value="@{file}" />
            </exec>
            <chmod type="file" perm="444">
                <fileset dir="${basedir}">
                    <include name="@{file} @{file}.sig" />
                </fileset>
            </chmod>
        </sequential>
    </macrodef>

    <macrodef name="mktorrent">
        <attribute name="file" />
        <sequential>
            <delete file="@{file}.torrent" quiet="true"/>
            <java classname="org.klomp.snark.Storage" fork="true" failonerror="true">
                <classpath>
                    <pathelement location="build/i2p.jar" />
                    <pathelement location="build/i2psnark.jar" />
                </classpath>
                <arg value="@{file}" />
                <arg value="http://tracker2.postman.i2p/announce.php" />
            </java>
        </sequential>
    </macrodef>

    <macrodef name="sha256sum">
        <attribute name="file" />
        <sequential>
            <!--
                 Note: "local" only works with ant 1.8+. This limitation shouldn't be
                 a big deal since this macro is only called by the release
                 target.
             -->
            <local name="file-sum"/>
            <checksum format="MD5SUM" file="@{file}" property="file-sum" algorithm="sha-256"/>
            <echo message="${file-sum}  @{file}" />
        </sequential>
    </macrodef>

kytv's avatar
kytv committed
    <macrodef name="sudsign">
        <attribute name="infile" />
        <attribute name="outfile" />
        <sequential>
            <input message="Enter private signing key file:" addproperty="release.privkey" />
            <fail message="You must enter an existing file path." >
                <condition>
                    <or>
                        <equals arg1="${release.privkey}" arg2=""/>
                        <not>
                            <length file="${release.privkey}" when="greater" length="0" />
                        </not>
                    </or>
                </condition>
            </fail>
            <echo message="Key file is ${release.privkey}" />
            <java classname="net.i2p.crypto.TrustedUpdate" fork="true" failonerror="true">
                <classpath>
                    <pathelement location="build/i2p.jar" />
                </classpath>
                <arg value="sign" />
                <arg value="@{infile}" />
                <arg value="@{outfile}" />
                <arg value="${release.privkey}" />
                <arg value="${release.number}" />
            </java>
            <echo message="Verify version and VALID signature:" />
            <java classname="net.i2p.crypto.TrustedUpdate" fork="true" failonerror="true">
                <classpath>
                    <pathelement location="build/i2p.jar" />
                </classpath>
                <arg value="verifysig" />
                <arg value="@{outfile}" />
            </java>
            <java classname="net.i2p.crypto.TrustedUpdate" fork="true" failonerror="true">
                <classpath>
                    <pathelement location="build/i2p.jar" />
                </classpath>
                <arg value="verifyversion" />
                <arg value="@{outfile}" />
            </java>
            <java classname="net.i2p.crypto.TrustedUpdate" fork="true" failonerror="true">
                <classpath>
                    <pathelement location="build/i2p.jar" />
                </classpath>
                <arg value="showversion" />
                <arg value="@{outfile}" />
            </java>
        </sequential>
    </macrodef>

    <macrodef name="su3sign">
        <attribute name="infile" />
        <attribute name="outfile" />
        <attribute name="sigtype" />
        <sequential>
        <input message="Enter su3 private signing key store:" addproperty="release.privkey.su3" />
        <fail message="You must enter an existing file path." >
            <condition>
                <or>
                    <equals arg1="${release.privkey.su3}" arg2=""/>
                    <not>
                        <length file="${release.privkey.su3}" when="greater" length="0" />
                    </not>
                </or>
            </condition>
        </fail>
        <input message="Enter key name (you@mail.i2p):" addproperty="release.signer.su3" />
        <fail message="You must enter a name." >
            <condition>
                <equals arg1="${release.signer.su3}" arg2=""/>
            </condition>
        </fail>
        <input message="Enter key password for ${release.signer.su3}:" addproperty="release.password.su3" />
        <fail message="You must enter a password." >
            <condition>
                <equals arg1="${release.password.su3}" arg2=""/>
            </condition>
        </fail>
            <java classname="net.i2p.crypto.SU3File" inputstring="${release.password.su3}" fork="true" failonerror="true">
                <classpath>
                    <pathelement location="build/i2p.jar" />
                </classpath>
                <arg value="sign" />
                <arg value="-c" />
                <arg value="@{sigtype}" />
                <arg value="-t" />
                <arg value="RSA_SHA512_4096" />
                <arg value="@{infile}" />
                <arg value="@{outfile}" />
                <arg value="${release.privkey.su3}" />
                <arg value="${release.number}" />
                <arg value="${release.signer.su3}" />
            </java>
            <echo message="Verify version and VALID signature:" />
            <java classname="net.i2p.crypto.SU3File" fork="true" failonerror="true">
                <classpath>
                    <pathelement location="build/i2p.jar" />
                </classpath>
                <!-- set base dir so it can find the pubkey cert -->
                <jvmarg value="-Di2p.dir.base=installer/resources" />
                <arg value="verifysig" />
                <arg value="@{outfile}" />
            </java>
            <java classname="net.i2p.crypto.SU3File" fork="true" failonerror="true">
                <classpath>
                    <pathelement location="build/i2p.jar" />
                </classpath>
                <!-- set base dir so it can find the pubkey cert -->
                <jvmarg value="-Di2p.dir.base=installer/resources" />
                <arg value="showversion" />
                <arg value="@{outfile}" />
            </java>
        </sequential>
    </macrodef>
    <target name="dist" depends="pkg, javadoc" />
    <target name="dist200" depends="pkg200, javadoc" />
zzz's avatar
zzz committed
    <target name="build" depends="build2">
        <!-- so we don't build standalone for the updater -->
zzz's avatar
zzz committed
        <!-- This builds apps/i2psnark/java/i2psnark-standalone.zip,
          -   which we don't distribute anywhere...
zzz's avatar
zzz committed
        <ant dir="apps/i2psnark/java/" target="standalone" />
zzz's avatar
zzz committed
        -->
zzz's avatar
zzz committed
    </target>
    <target name="build2" depends="builddep, jar, buildWEB" />
    <target name="buildSmall" depends="builddepSmall, jarSmall, buildWEB" />
    <target name="buildclean" depends="distclean, build" />

    <target name="builddep" depends="builddepSmall, buildBOB, buildSAM, buildSusiMail, buildSusiDNS, buildI2PSnark" />

    <target name="builddepSmall" depends="buildrouter, buildSystray, buildDesktopGui, buildRouterConsole, buildStreaming, buildI2PTunnel, buildAddressbook" />

    <!-- start of buildX, one for each sub-build.xml.
         Do not put ant tasks in the sub-build.xmls anymore,
         so the build will go faster.
      -->

zzz's avatar
zzz committed
    <target name="buildBOB" depends="buildStreaming" >
        <copy file="apps/BOB/dist/BOB.jar" todir="build/" />
    </target>

    <target name="buildSAM" depends="buildStreaming" >
        <ant dir="apps/sam/java/" target="jar" />
        <copy file="apps/sam/java/build/sam.jar" todir="build/" />
    </target>

    <target name="buildSusiMail" depends="buildCore, buildJetty" >
        <ant dir="apps/susimail/" target="war" />
        <copy file="apps/susimail/susimail.war" todir="build/" />
    </target>

    <target name="buildSusiDNS" depends="buildCore, buildJetty" >
        <ant dir="apps/susidns/src" target="all" />
        <copy file="apps/susidns/src/susidns.war" todir="build/" />
    </target>

    <target name="buildI2PSnark" depends="buildStreaming, buildJetty" >
zzz's avatar
zzz committed
        <ant dir="apps/i2psnark/java/" target="war" />
        <copy file="apps/i2psnark/i2psnark.war" todir="build/" />
        <copy file="apps/i2psnark/java/build/i2psnark.jar" todir="build/" />
    <!-- jar (not war) for Android -->
    <target name="buildAddressbookJar" depends="buildCore" >
        <ant dir="apps/addressbook/" target="jar" />
        <copy file="apps/addressbook/dist/addressbook.jar" todir="build/" />
    <target name="buildAddressbook" depends="buildCore, buildJetty" >
        <ant dir="apps/addressbook/" target="war" />
        <copy file="apps/addressbook/dist/addressbook.war" todir="build/" />
    <!-- Both jars and no war, for Android -->
    <target name="buildI2PTunnelJars" depends="buildStreaming" >
        <ant dir="apps/i2ptunnel/java/" target="uiJar" />
        <copy file="apps/i2ptunnel/java/build/i2ptunnel.jar" todir="build/" />
        <copy file="apps/i2ptunnel/java/build/i2ptunnel-ui.jar" todir="build/" />
    <target name="buildI2PTunnel" depends="buildStreaming, buildJetty" >
        <ant dir="apps/i2ptunnel/java/" target="build" />
        <copy file="apps/i2ptunnel/java/build/i2ptunnel.jar" todir="build/" />
        <copy file="apps/i2ptunnel/java/build/i2ptunnel.war" todir="build/" />
    <target name="buildDesktopGui" depends="buildCore, buildrouter" >
zzz's avatar
zzz committed
<!--
        <ant dir="apps/desktopgui" target="clean" />
zzz's avatar
zzz committed
-->
        <ant dir="apps/desktopgui" target="jar" />
        <copy file="apps/desktopgui/dist/desktopgui.jar" todir="build/" />
    </target>

    <target name="buildRouterConsole" depends="buildrouter, buildSystray, buildDesktopGui, buildJetty" >
zzz's avatar
zzz committed
        <ant dir="apps/routerconsole/java/" target="jar" />
    <!-- newsxml.jar only (subset of routerconsole, no war) for Android -->
    <target name="buildNewsXMLJar" depends="buildRouter" >
        <ant dir="apps/routerconsole/java/" target="newsxmljar" />
    </target>

zzz's avatar
zzz committed
    <target name="buildJetty" depends="buildCore" >
        <ant dir="apps/jetty" target="build" />
        <copy todir="build/" >
            <fileset dir="apps/jetty/jettylib" excludes="ant.jar" />
        </copy>
    </target>

    <target name="buildSystray" depends="buildCore" >
        <ant dir="apps/systray/java/" target="jar" />
        <copy file="apps/systray/java/build/systray.jar" todir="build/" />
    </target>

    <target name="buildStreaming" depends="buildMinistreaming" >
jrandom's avatar
jrandom committed
        <ant dir="apps/streaming/java/" target="jar" />
        <copy file="apps/streaming/java/build/streaming.jar" todir="build/" />
    </target>

    <target name="buildMinistreaming" depends="buildCore" >
        <ant dir="apps/ministreaming/java/" target="jar" />
        <copy file="apps/ministreaming/java/build/mstreaming.jar" todir="build/" />
    </target>

    <target name="buildRouter" depends="buildrouter" />
    <target name="buildrouter" depends="buildCore" >
jrandom's avatar
jrandom committed
        <ant dir="router/java/" target="jar" />
        <copy file="router/java/build/router.jar" todir="build/" />
    </target>
zzz's avatar
zzz committed
    <target name="buildCore" depends="buildProperties" >
        <ant dir="core/java/" target="jar" />
        <copy file="core/java/build/i2p.jar" todir="build/" />
    </target>

zzz's avatar
zzz committed
    <target name="buildJrobin" depends="buildProperties" >
        <!-- take only what we need from the jrobin jar -->
        <jar destfile="build/jrobin.jar" >
            <zipfileset src="apps/jrobin/jrobin-1.5.9.1.jar"
                        excludes="org/jrobin/cmd/ org/jrobin/convertor/ org/jrobin/inspector/" />
            <manifest>
                <attribute name="Built-By" value="${build.built-by}" />
zzz's avatar
zzz committed
                <attribute name="Build-Date" value="${build.timestamp}" />
                <attribute name="Base-Revision" value="${workspace.version}" />
zzz's avatar
zzz committed
        </jar>
    </target>

    <target name="buildProperties" depends="getMtnRev, getReleaseNumber, getBuildNumber" >
        <!-- default if not set above -->
        <property name="workspace.version" value="unknown" />
        <tstamp>
            <format property="build.timestamp" pattern="yyyy-MM-dd HH:mm:ss z" timezone="UTC" locale="en" />
        </tstamp>
        <property name="full.version" value="${release.number}-${i2p.build.number}${build.extra}" />
        <echo message="Building version ${full.version} (mtn rev ${workspace.version})" />
    </target>

    <target name="buildWEB" depends="buildRouterConsole" >
        <copy file="apps/routerconsole/java/build/routerconsole.jar" todir="build/" />
        <copy file="apps/routerconsole/java/build/routerconsole.war" todir="build/" />
    </target>

    <target name="buildTools" depends="buildrouter" >
        <ant dir="installer/tools/java" target="jar" />
        <copy file="installer/tools/java/build/tools.jar" todir="build/" />
    </target>

    <!-- end of sub-build.xml targets -->

    <target name="checkForMtn" >
        <available property="mtn.available" file="_MTN" type="dir" />
    </target>

    <target name="getMtnRev" depends="checkForMtn" if="mtn.available" >
zzz's avatar
zzz committed
        <exec executable="mtn" outputproperty="workspace.version" errorproperty="mtn.error1" failifexecutionfails="false" >
            <arg value="automate" />
            <arg value="get_base_revision_id" />
        </exec>
kytv's avatar
kytv committed
    <target name="trimMtnRev" depends="getMtnRev">
        <script language="javascript">
            <![CDATA[
            var MtnRev = project.getProperty("workspace.version");
            if (MtnRev != 'unknown' && MtnRev != null) {
                echo = project.createTask("echo");
                var MtnShortHash = MtnRev.substring(0,8);
                project.setProperty("MtnShortHash", MtnShortHash);
                echo.setMessage("Trimmed hash: " + MtnShortHash);
                echo.perform();
            } else {
                project.setProperty("MtnShortHash", 'unknown');
            }
            ]]>
        </script>
    </target>

kytv's avatar
kytv committed
    <target name="checkIfBumped">
        <exec executable="mtn" outputproperty="bumped" errorproperty="mtn.error2" failifexecutionfails="false" >
            <arg value="ls" />
            <arg value="ch" />
            <arg value="router/java/src/net/i2p/router/RouterVersion.java" />
        </exec>
        <condition property="bumped.already">
            <not>
                <equals arg1="${bumped}" arg2=""/>
            </not>
        </condition>
    </target>

    <target name="bumpBuild" depends="checkIfBumped, getBuildNumber" unless="bumped.already">
        <script language="javascript">
            <![CDATA[
            var newBuildNumber = (Number(project.getProperty("i2p.build.number")) + 1);
            if (newBuildNumber != 'unknown' && newBuildNumber != null) {
                echo = project.createTask("echo");
                project.setProperty("new.i2p.build.number", newBuildNumber);
                echo.setMessage("Build number is now: " + newBuildNumber);
                echo.perform();
            }
            ]]>
        </script>
        <replaceregexp byline="true" file="router/java/src/net/i2p/router/RouterVersion.java"
            match='(^\s+public\s+final\s+static\s+long\s+BUILD\s+=\s+)[0-9]+;' replace='\1${new.i2p.build.number};'/>
    </target>

    <condition property="noExe">
        <not>
            <!-- We only have launch4j binaries for the following systems -->
            <and>
                <or>
                    <os arch="x86" />
                    <os arch="i386" />
                    <os arch="i586" />
                    <os arch="i686" />
                    <os arch="amd64" />
                    <os arch="x86_64" />
                </or>
                <or>
                    <os name="Linux" />
                    <os family="windows" />
                </or>
            </and>
        </not>
    </condition>
    <!-- this makes an empty build/launchi2p.jar and the build/i2p.exe for the no-wrapper windows startup, if possible -->
    <target name="buildexe" depends="buildProperties, launch4j" unless="noExe">
kytv's avatar
kytv committed
        <echo message="See the file &quot;build.properties&quot; if this step fails." />
jrandom's avatar
jrandom committed
        <jar destfile="./build/launchi2p.jar">
            <manifest>
                <attribute name="Main-Class" value="net.i2p.router.RouterLaunch" />
                <attribute name="Class-Path" value="lib/i2p.jar lib/router.jar lib/jbigi.jar lib/BOB.jar lib/sam.jar lib/mstreaming.jar lib/streaming.jar lib/routerconsole.jar lib/i2ptunnel.jar lib/org.mortbay.jetty.jar lib/javax.servlet.jar lib/jasper-runtime.jar lib/commons-logging.jar lib/commons-el.jar lib/wrapper.jar lib/systray.jar lib/systray4j.jar lib/desktopgui.jar lib/i2psnark.jar lib/jrobin.jar lib/jstl.jar lib/standard.jar lib/jetty-continuation.jar lib/jetty-deploy.jar lib/jetty-http.jar lib/jetty-i2p.jar lib/jetty-io.jar lib/jetty-rewrite-handler.jar lib/jetty-security.jar lib/jetty-servlet.jar lib/jetty-servlets.jar lib/jetty-start.jar lib/jetty-util.jar lib/jetty-webapp.jar lib/jetty-xml.jar" />
                <attribute name="Built-By" value="${build.built-by}" />
                <attribute name="Build-Date" value="${build.timestamp}" />
                <attribute name="Base-Revision" value="${workspace.version}" />
            </manifest>
jrandom's avatar
jrandom committed
        </jar>
        <!-- now the standalone launcher exe -->
jrandom's avatar
jrandom committed
        <launch4j configFile="./installer/i2pstandalone.xml" />
jrandom's avatar
jrandom committed
    </target>
    <target name="launch4j">
        <taskdef name="launch4j"
                 classname="net.sf.launch4j.ant.Launch4jTask"
                 classpath="${basedir}/installer/lib/launch4j/launch4j.jar:${basedir}/installer/lib/launch4j/lib/xstream.jar" />
     </target>

     <!--
          the files are now copied to the build directory
          in the build* targets
      -->
     <target name="jar" depends="jarSmall" />
     <target name="jarSmall" depends="builddepSmall, buildJrobin" />
    <!-- Custom target to collect the jars that I2P-Bote needs to compile, so it can compile from source. -->
    <target name="jarBote" depends="buildRouter, buildStreaming, buildJetty" >
        <copy file="apps/susidns/src/WEB-INF/lib/jstl.jar" todir="build/" />
        <copy file="apps/susidns/src/WEB-INF/lib/standard.jar" todir="build/" />
    </target>

    <target name="jbigi-list-changes" depends="checkForMtn" if="mtn.available">
        <exec executable="mtn" outputproperty="workspace.changes.jbigi" errorproperty="mtn.error.jbigi" failifexecutionfails="false" >
            <arg value="list" />
            <arg value="changed" />
            <arg value="installer/lib/jbigi" />
        </exec>
        <!-- \n in an attribute value generates an invalid manifest -->
        <exec executable="tr" inputstring="${workspace.changes.jbigi}" outputproperty="workspace.changes.jbigi.tr" errorproperty="mtn.error2" failifexecutionfails="false" >
            <arg value="-s" />
            <arg value="&quot;[:space:]&quot;" />
            <arg value="," />
        </exec>
    </target>

    <target name="jbigi" depends="buildProperties, jbigi-list-changes">
        <!-- set if unset -->
        <property name="workspace.changes.jbigi.tr" value="" />
        <mkdir dir="./build" />
        <jar destfile="build/jbigi.jar" whenmanifestonly="fail" >
            <fileset dir="installer/lib/jbigi" includes="*.so *.dll *.jnilib" />
            <manifest>
                <attribute name="Built-By" value="${build.built-by}" />
                <attribute name="Build-Date" value="${build.timestamp}" />
                <attribute name="Base-Revision" value="${workspace.version}" />
                <attribute name="Workspace-Changes" value="${workspace.changes.jbigi.tr}" />
            </manifest>
        </jar>
    </target>
    <target name="jbigi-nowindows" depends="buildProperties, jbigi-list-changes">
        <!-- set if unset -->
        <property name="workspace.changes.jbigi.tr" value="" />
        <jar destfile="build/jbigi.jar" whenmanifestonly="fail" >
            <fileset dir="installer/lib/jbigi" includes="*.so *.jnilib" />
            <manifest>
                <attribute name="Built-By" value="${build.built-by}" />
                <attribute name="Build-Date" value="${build.timestamp}" />
                <attribute name="Base-Revision" value="${workspace.version}" />
                <attribute name="Workspace-Changes" value="${workspace.changes.jbigi.tr}" />
            </manifest>
        </jar>
    </target>

    <!-- Now system-specific jbigis in alphabetical order -->
    <target name="jbigi-freebsd-only"  depends="buildProperties, jbigi-list-changes">
        <!-- set if unset -->
        <property name="workspace.changes.jbigi.tr" value="" />
        <jar destfile="build/jbigi.jar"  whenmanifestonly="fail" >
            <fileset dir="installer/lib/jbigi" includes="*bsd*.so" />
            <manifest>
                <attribute name="Built-By" value="${build.built-by}" />
                <attribute name="Build-Date" value="${build.timestamp}" />
                <attribute name="Base-Revision" value="${workspace.version}" />
                <attribute name="Workspace-Changes" value="${workspace.changes.jbigi.tr}" />
            </manifest>
        </jar>
    </target>

    <target name="jbigi-linux-only"  depends="buildProperties, jbigi-list-changes">
        <!-- set if unset -->
        <property name="workspace.changes.jbigi.tr" value="" />
        <jar destfile="build/jbigi.jar"  whenmanifestonly="fail" >
            <fileset dir="installer/lib/jbigi" includes="*linux*.so" />
            <manifest>
                <attribute name="Built-By" value="${build.built-by}" />
                <attribute name="Build-Date" value="${build.timestamp}" />
                <attribute name="Base-Revision" value="${workspace.version}" />
                <attribute name="Workspace-Changes" value="${workspace.changes.jbigi.tr}" />
            </manifest>
        </jar>
    </target>

    <target name="jbigi-linux-x86-only"  depends="buildProperties, jbigi-list-changes">
        <!-- set if unset -->
        <property name="workspace.changes.jbigi.tr" value="" />
        <jar destfile="build/jbigi.jar"  whenmanifestonly="fail" >
            <fileset dir="installer/lib/jbigi" includes="*linux*.so" excludes="*linux-arm*.so,*linux-ppc*.so" />
            <manifest>
                <attribute name="Built-By" value="${build.built-by}" />
                <attribute name="Build-Date" value="${build.timestamp}" />
                <attribute name="Base-Revision" value="${workspace.version}" />
                <attribute name="Workspace-Changes" value="${workspace.changes.jbigi.tr}" />
            </manifest>
        </jar>
    </target>


    <target name="jbigi-linux-nonx86-only"  depends="buildProperties, jbigi-list-changes">
        <!-- set if unset -->
        <property name="workspace.changes.jbigi.tr" value="" />
        <jar destfile="build/jbigi.jar"  whenmanifestonly="fail" >
            <fileset dir="installer/lib/jbigi" includes="*linux-arm*.so,*linux-ppc*.so" />
            <manifest>
                <attribute name="Built-By" value="${build.built-by}" />
                <attribute name="Build-Date" value="${build.timestamp}" />
                <attribute name="Base-Revision" value="${workspace.version}" />
                <attribute name="Workspace-Changes" value="${workspace.changes.jbigi.tr}" />
            </manifest>
        </jar>
    </target>

    <target name="jbigi-osx-only"  depends="buildProperties, jbigi-list-changes" >
        <!-- set if unset -->
        <property name="workspace.changes.jbigi.tr" value="" />
        <jar destfile="build/jbigi.jar"  whenmanifestonly="fail" >
            <fileset dir="installer/lib/jbigi" includes="*.jnilib" />
            <manifest>
                <attribute name="Built-By" value="${build.built-by}" />
                <attribute name="Build-Date" value="${build.timestamp}" />
                <attribute name="Base-Revision" value="${workspace.version}" />
                <attribute name="Workspace-Changes" value="${workspace.changes.jbigi.tr}" />
            </manifest>
        </jar>
    </target>

    <target name="jbigi-windows-only" depends="buildProperties, jbigi-list-changes" >
        <!-- set if unset -->
        <property name="workspace.changes.jbigi.tr" value="" />
        <jar destfile="build/jbigi.jar" whenmanifestonly="fail" >
            <fileset dir="installer/lib/jbigi" includes="*windows*.dll" />
            <manifest>
                <attribute name="Built-By" value="${build.built-by}" />
                <attribute name="Build-Date" value="${build.timestamp}" />
                <attribute name="Base-Revision" value="${workspace.version}" />
                <attribute name="Workspace-Changes" value="${workspace.changes.jbigi.tr}" />
            </manifest>
        </jar>
    </target>
    <!-- the apps need to compile the jsps to poupdate -->
    <target name="poupdate" depends="buildRouter, buildStreaming, buildSystray, buildJetty, buildDesktopGui" >
walking's avatar
walking committed
        <echo message="Setting environment variable LG2 to a lang code (eg: de,zh,nl etc)" />
        <echo message=" will restrict language update to the language you specified, leaving other language untact." />
zzz's avatar
zzz committed
        <ant dir="apps/routerconsole/java/" >
            <target name="poupdate" />
            <target name="poupdate-news" />
            <target name="poupdate-countries" />
zzz's avatar
zzz committed
        </ant>
        <ant dir="apps/i2psnark/java/" target="poupdate" />
zzz's avatar
zzz committed
        <ant dir="apps/i2ptunnel/java/" >
            <target name="poupdate" />
            <target name="poupdate-proxy" />
        </ant>
zzz's avatar
zzz committed
        <ant dir="apps/susidns/src/" target="poupdate" />
        <ant dir="apps/susimail/" target="poupdate" />
        <ant dir="apps/desktopgui" target="poupdate" />
        <ant dir="installer/resources/locale" target="poupdate" />
kytv's avatar
kytv committed
        <ant dir="apps/ministreaming/java" target="poupdate" />
    <condition property="no.bundle">
        <isfalse value="${require.gettext}" />
    </condition>

    <target name="prep-script-translation" unless="no.bundle" >
        <!-- script translation added in 0.8.13, enabled in 0.9.5. -->
        <ant dir="installer/resources/locale" target="bundle" />
        <copy todir="pkg-temp/locale/">
            <fileset dir="installer/resources/locale/mo/" />
        </copy>
zzz's avatar
zzz committed

    <target name="javadoc" depends="getReleaseNumber, getBuildNumber" >
zzz's avatar
zzz committed
        <ant dir="apps/jetty" target="ensureJettylib" />
        <mkdir dir="./build" />
        <mkdir dir="./build/javadoc" />
kytv's avatar
kytv committed
        <javadoc access="package"
            destdir="./build/javadoc"
            packagenames="*"
            use="true"
            splitindex="true"
            doctitle="I2P Javadocs for Release ${release.number} Build ${i2p.build.number}${build.extra}"
zzz's avatar
zzz committed
            windowtitle="I2P Anonymous Network - Java Documentation - Version ${release.number}">
            <group title="Core SDK (i2p.jar)" packages="net.i2p:net.i2p.*:net.i2p.client:net.i2p.client.*:net.i2p.internal:net.i2p.internal.*:freenet.support.CPUInformation:org.bouncycastle.oldcrypto:org.bouncycastle.oldcrypto.*:gnu.crypto.*:gnu.getopt:gnu.gettext:com.nettgryppa.security:net.metanotion:net.metanotion.*" />
            <group title="Streaming Library" packages="net.i2p.client.streaming:net.i2p.client.streaming.impl" />
            <group title="Router" packages="net.i2p.router:net.i2p.router.*:net.i2p.data.i2np:net.i2p.data.router:org.cybergarage.*:org.freenetproject:org.xlattice.crypto.filters" />
            <group title="Router Console" packages="net.i2p.router.web:net.i2p.router.update:net.i2p.router.news" />
            <!-- apps and bridges starting here, alphabetical please -->
            <group title="Addressbook Application" packages="net.i2p.addressbook" />
            <group title="BOB Bridge" packages="net.i2p.BOB" />
zzz's avatar
zzz committed
            <group title="BOB Demos" packages="net.i2p.BOB.Demos.echo.echoclient:net.i2p.BOB.Demos.echo.echoserver" />
zzz's avatar
zzz committed
            <group title="Desktopgui Application" packages="net.i2p.desktopgui:net.i2p.desktopgui.*" />
zzz's avatar
zzz committed
            <group title="I2PSnark Application" packages="org.klomp.snark:org.klomp.snark.*" />
            <group title="I2PTunnel Application" packages="net.i2p.i2ptunnel:net.i2p.i2ptunnel.*" />
            <group title="Installer Utilities" packages="net.i2p.installer" />
zzz's avatar
zzz committed
            <group title="Jetty Starter and Logging" packages="net.i2p.jetty:net.i2p.servlet:net.i2p.servlet.*" />
            <group title="SAM Bridge" packages="net.i2p.sam" />
zzz's avatar
zzz committed
            <group title="SAM Demos" packages="net.i2p.sam.client" />
            <group title="SusiDNS Application" packages="i2p.susi.dns" />
            <group title="SusiMail Application" packages="i2p.susi.webmail:i2p.susi.webmail.*:i2p.susi.debug:i2p.susi.util:org.mortbay.servlet:org.mortbay.util" />
            <group title="Systray Application" packages="net.i2p.apps.systray" />
jrandom's avatar
jrandom committed
            <sourcepath>
                <pathelement location="core/java/src" />
                <pathelement location="router/java/src" />
                <pathelement location="apps/ministreaming/java/src" />
jrandom's avatar
jrandom committed
                <pathelement location="apps/streaming/java/src" />
jrandom's avatar
jrandom committed
                <pathelement location="apps/i2ptunnel/java/src" />
                <pathelement location="apps/systray/java/src" />
                <pathelement location="apps/desktopgui/src" />
jrandom's avatar
jrandom committed
                <pathelement location="apps/routerconsole/java/src" />
                <pathelement location="apps/addressbook/java/src" />
                <pathelement location="apps/i2psnark/java/src" />
                <pathelement location="apps/sam/java/src" />
                <pathelement location="apps/BOB/src" />
zzz's avatar
zzz committed
                <pathelement location="apps/BOB/Demos/echo/echoclient/src" />
                <pathelement location="apps/BOB/Demos/echo/echoserver/src" />
                <pathelement location="apps/susidns/src/java/src" />
                <pathelement location="apps/susimail/src/src" />
                <pathelement location="apps/jetty/java/src" />
                <pathelement location="installer/java/src" />
jrandom's avatar
jrandom committed
            </sourcepath>
            <classpath>
                <pathelement location="apps/jetty/jettylib/org.mortbay.jetty.jar" />
sponge's avatar
sponge committed
                <pathelement location="apps/jetty/jettylib/javax.servlet.jar" />
zzz's avatar
zzz committed
                <pathelement location="apps/jetty/jettylib/jetty-http.jar" />
                <pathelement location="apps/jetty/jettylib/jetty-security.jar" />
                <pathelement location="apps/jetty/jettylib/jetty-servlet.jar" />
                <pathelement location="apps/jetty/jettylib/jetty-start.jar" />
                <pathelement location="apps/jetty/jettylib/jetty-util.jar" />
zzz's avatar
zzz committed
                <pathelement location="apps/jetty/jettylib/jetty-webapp.jar" />
                <pathelement location="apps/jetty/jettylib/jetty-xml.jar" />
jrandom's avatar
jrandom committed
                <pathelement location="apps/systray/java/lib/systray4j.jar" />
zzz's avatar
zzz committed
                <pathelement location="apps/jrobin/jrobin-1.5.9.1.jar" />
                <pathelement location="installer/lib/wrapper/all/wrapper.jar" />
jrandom's avatar
jrandom committed
            </classpath>
            <!-- These variables are stored in build.properties.
                  End-users can override by creating the file override.properties -->
            <link offline="true" href="${javasedocs.url}" packagelistLoc="installer/resources/package-lists/java/" />
            <link offline="true" href="${javaeedocs.url}" packagelistLoc="installer/resources/package-lists/javaee/" />
            <link offline="true" href="${jettydocs.url}" packagelistLoc="installer/resources/package-lists/jetty/" />
            <link offline="true" href="${jrobindocs.url}" packagelistLoc="installer/resources/package-lists/jrobin/" />
            <link offline="true" href="${wrapperdocs.url}" packagelistLoc="installer/resources/package-lists/wrapper/" />
jrandom's avatar
jrandom committed
        </javadoc>
        <echo message="Warning, javadoc embeds timestamps in the output, run with 'TZ=UTC ant javadoc' if you plan to distribute" />
    </target>
    <target name="javadoc-zip" depends="javadoc">
        <zip destfile="javadoc.zip" basedir="build" level="9" includes="javadoc\**" />
zzz's avatar
zzz committed
    </target>

    <target name="javadoc-test" depends="buildRouter, javadoc" >
        <mkdir dir="./build" />
        <mkdir dir="./build/javadoc-test" />
kytv's avatar
kytv committed

        <!-- set junit home to the old default unless overridden elsewhere -->
        <property name="junit.home" value="${ant.home}/lib/" />
zzz's avatar
zzz committed
        <javadoc access="package"
            destdir="./build/javadoc-test"
            packagenames="*"
            use="true"
            splitindex="true"
            doctitle="I2P Unit Test Javadocs for Release ${release.number} Build ${i2p.build.number}${build.extra}"
zzz's avatar
zzz committed
            windowtitle="I2P Anonymous Network - Java Documentation - Version ${release.number}">
            <group title="Core SDK" packages="net.i2p:net.i2p.*:net.i2p.client:net.i2p.client.*:net.i2p.internal:net.i2p.internal.*:freenet.support.CPUInformation:org.bouncycastle.oldcrypto:org.bouncycastle.oldcrypto.*:gnu.crypto.*:gnu.gettext:org:com.nettgryppa.security:net.metanotion:net.metanotion.*" />
            <group title="Router" packages="net.i2p.router:net.i2p.router.*:net.i2p.data.i2np:org.cybergarage.*:org.freenetproject:org.xlattice.crypto.filters" />
zzz's avatar
zzz committed
            <sourcepath>
                <pathelement location="core/java/test/junit" />
                <pathelement location="router/java/test/junit" />
kytv's avatar
kytv committed
                <pathelement location="core/java/test/scalatest" />
zzz's avatar
zzz committed
            </sourcepath>
            <classpath>
                <pathelement location="build/i2p.jar" />
                <pathelement location="build/router.jar" />
kytv's avatar
kytv committed
                <pathelement location="${junit.home}/junit4.jar" />
                <pathelement location="${hamcrest.home}/hamcrest-all.jar" />
zzz's avatar
zzz committed
            </classpath>
            <!--
                 These variables are stored in build.properties.
                 End-users can override by creating the file override.properties
            -->
zzz's avatar
zzz committed
            <link offline="true" href="${javasedocs.url}" packagelistLoc="installer/resources/package-lists/java/" />
            <link offline="true" href="${junitdocs.url}" packagelistLoc="installer/resources/package-lists/junit/" />
            <link offline="true" href="${i2pdocs.url}" packagelistLoc="build/javadoc/" />
        </javadoc>
        <echo message="Warning, javadoc embeds timestamps in the output, run with 'TZ=UTC ant javadoc' if you plan to distribute" />
    </target>
    <target name="getReleaseNumber">
        <loadfile srcfile="core/java/src/net/i2p/CoreVersion.java" property="release.number">
            <filterchain>
                <linecontains>
                    <contains value="public final static String VERSION"/>
                </linecontains>
                <tokenfilter>
kytv's avatar
kytv committed
                    <replaceregex pattern='.*"([^"]+)";' replace="\1" flags="gi" />
        <property name="release.number" value="unknown" />
zzz's avatar
zzz committed
        <echo message="Release number is ${release.number}" />
    </target>

    <target name="getBuildNumber">
        <loadfile srcfile="router/java/src/net/i2p/router/RouterVersion.java" property="i2p.build.number">
            <filterchain>
                <linecontains>
                    <contains value="public final static long BUILD" />
                </linecontains>
                <tokenfilter>
kytv's avatar
kytv committed
                    <replaceregex pattern=".*=\s+([0-9]+);" replace="\1" flags="gi" />
kytv's avatar
kytv committed
                <striplinebreaks/>
            </filterchain>
        </loadfile>
        <loadfile srcfile="router/java/src/net/i2p/router/RouterVersion.java" property="build.extra">
            <filterchain>
                <linecontains>
                    <contains value="public final static String EXTRA" />
                </linecontains>
                <tokenfilter>
kytv's avatar
kytv committed
                    <replaceregex pattern='.*"(.*)";' replace="\1" flags="gi" />
kytv's avatar
kytv committed
                <striplinebreaks/>
        <property name="i2p.build.number" value="??" />
        <property name="build.extra" value="" />
        <echo message="Build number is ${i2p.build.number}${build.extra}" />
zzz's avatar
zzz committed
    </target>

    <target name="verifyReleaseBuildNumbers" depends="getReleaseNumber, getBuildNumber" >
zzz's avatar
zzz committed
        <echo message="SDK: ${java.vendor} ${java.version} (${java.runtime.name} ${java.runtime.version})" />
        <fail message="Bad release number: ${release.number}" >
            <condition>
                <or>
                    <equals arg1="${release.number}" arg2="unknown"/>
                    <equals arg1="${release.number}" arg2=""/>
                </or>
            </condition>
        </fail>
        <fail message="Non-zero build number: ${i2p.build.number}" >
                    <equals arg1="${i2p.build.number}" arg2="0"/>
                </not>
            </condition>
        </fail>
        <fail message="Non-empty extra build: ${build.extra}" >
            <condition>
                <not>
                    <equals arg1="${build.extra}" arg2=""/>
                </not>
            </condition>
        </fail>
    </target>

    <target name="-pre-release">
            <echo message="================================================================" />
            <echo message="Did you update these files?" />
            <exec executable="ls" failonerror="true">
                    <arg value="-l" />
                    <arg value="history.txt" />
                    <arg value="installer/install.xml" />
                    <arg value="core/java/src/net/i2p/CoreVersion.java" />
                    <arg value="router/java/src/net/i2p/router/RouterVersion.java" />
            </exec>
            <echo message="Everything is checked in, right? Let's be sure:" />
            <exec executable="mtn" failonerror="true">
                    <arg value="st" />
            </exec>
            <echo message="If there are any modified files above, stop now!" />
            <echo message="================================================================" />
            <sleep seconds="3"/>
    </target>

        <delete dir="./build" />
        <delete dir="./reports" />
        <delete file="installer/lib/izpack/patches.jar" failonerror="false" quiet="true" />
jrandom's avatar
jrandom committed
        <delete file="syndie-standalone.zip" failonerror="false" quiet="true" />
jrandom's avatar
jrandom committed
        <delete file="i2psnark-standalone.zip" failonerror="false" quiet="true" />
        <delete file="BOB-one.jar" failonerror="false" quiet="true" />
        <delete file="core/java/cobertura.ser"/>
        <delete file="javadoc.zip" />
        <delete file="i2p.fba" />
        <delete file="${sloccount.report.file}" />
    <target name="distclean" depends="clean">
        <delete failonerror="false" quiet="true">
            <fileset dir="." includes="i2pinstall* *.deb i2p_*.bz2 i2pupdate* i2psource* *.sig *.torrent" />
HungryHobo's avatar
HungryHobo committed
        </delete>
        <ant dir="core/java/" target="distclean" />
        <ant dir="router/java/" target="distclean" />
        <ant dir="installer/java" target="distclean" />
        <ant dir="apps/ministreaming/java/" target="distclean" />
jrandom's avatar
jrandom committed
        <ant dir="apps/streaming/java/" target="distclean" />
        <ant dir="apps/i2ptunnel/java/" target="distclean" />
        <ant dir="apps/sam/java/" target="distclean" />
        <ant dir="apps/desktopgui" target="clean" />
        <ant dir="apps/routerconsole/java/" target="distclean" />
jrandom's avatar
jrandom committed
        <ant dir="apps/addressbook/" target="distclean" />
jrandom's avatar
jrandom committed
        <ant dir="apps/susimail/" target="distclean" />
jrandom's avatar
jrandom committed
        <ant dir="apps/susidns/src/" target="distclean" />
        <ant dir="apps/systray/java/" target="distclean" />
jrandom's avatar
jrandom committed
        <ant dir="apps/i2psnark/java/" target="distclean" />
        <ant dir="apps/jetty/" target="distclean" />
        <delete dir="core/c/jbigi/bin" />
        <delete dir="core/c/jbigi/lib" />
        <delete dir="core/c/jcpuid/lib" />
        <ant dir="installer/resources/locale" target="distclean" />
kytv's avatar
kytv committed
	<!--
		NOTE! We need to turn off the default excludes for these
kytv's avatar
kytv committed
		patterns to work.
		These are the defaultexcludes in Ant as seen on
		http://ant.apache.org/manual/CoreTasks/defaultexcludes.html
		     **/*~
                     **/#*#
                     **/.#*
                     **/%*%
                     **/._*
                     **/CVS
                     **/CVS/**
                     **/.cvsignore
                     **/SCCS
                     **/SCCS/**
                     **/vssver.scc
                     **/.svn
                     **/.svn/**
                     **/.DS_Store
		The only recourse is to remove the offending ones.
		We do this here, as we only need one change, and then put it
		back after we are done with it.
	-->
	<defaultexcludes remove="**/*~"/>

            <fileset dir="." includes="**/*.class **/*.java~ **/*.txt~ **/*.xml~ **/*.sh~ **/*.SlackBuild~" />
kytv's avatar
kytv committed
	    <!--
	    	Less common, but they pollute my workspace here, so we
            	might as well nuke these as well. Are there any others?
            	
            	!!??? Why don't we just nuke "**/*~" ???!!

            	++Sponge
            -->
        </delete>
	<!--
		Now we put the defaults back
	-->
	<defaultexcludes default="true"/>
    </target>
    <target name="webappDistclean">
        <ant dir="apps/i2ptunnel/java/" target="distclean" />
        <ant dir="apps/routerconsole/java/" target="distclean" />
        <ant dir="apps/addressbook/" target="distclean" />
        <ant dir="apps/susimail/" target="distclean" />
        <ant dir="apps/susidns/src/" target="distclean" />
        <ant dir="apps/i2psnark/java/" target="distclean" />
    </target>

    <target name="pkg" depends="distclean, updater, preppkg, installer" />
    <target name="pkg200" depends="distclean, updater200, preppkg, installer" />

    <target name="pkgclean" depends="deletepkg-temp">
            <fileset dir="." includes="i2p.tar.bz2 install.jar i2pupdate.zip i2pupdate200.zip" />
        </delete>
    </target>
    <target name="preppkg" depends="preppkg-linux, preppkg-freebsd, preppkg-osx, preppkg-windows, jbigi">
        <copy file="build/jbigi.jar" todir="pkg-temp/lib" />
zzz's avatar
zzz committed
        <copy todir="pkg-temp/lib/wrapper/solaris/">
            <fileset dir="installer/lib/wrapper/solaris/" excludes="*.txt" />
zzz's avatar
zzz committed
        </copy>
    </target>

    <target name="preppkg-nowindows" depends="preppkg-linux, preppkg-freebsd, preppkg-osx, jbigi-nowindows">
        <copy file="build/jbigi.jar" todir="pkg-temp/lib" />
        <copy todir="pkg-temp/lib/wrapper/solaris/">
            <fileset dir="installer/lib/wrapper/solaris/" excludes="*.txt" />
        <copy file="installer/lib/wrapper/all/wrapper.jar" todir="pkg-temp/lib" />
    <target name="preppkgRepack" depends="preppkg-linux, preppkg-freebsd, preppkg-osx, preppkg-windows, jbigi">
        <ant target="repack200" />
        <!-- no use doing repack200 on jbigi.jar -->
        <copy file="build/jbigi.jar" todir="pkg-temp/lib" />
        <copy todir="pkg-temp/lib/wrapper/solaris/">
            <fileset dir="installer/lib/wrapper/solaris/" excludes="*.txt" />
    <target name="preppkg-freebsd" depends="preppkg-unix">
        <copy todir="pkg-temp/lib/wrapper/freebsd/">
            <fileset dir="installer/lib/wrapper/freebsd/" excludes="*.txt" />