<?xml version="1.0"?>
<!--
$RCSfile: build.xml,v $
$Revision: 3880 $
$Date: 2006-05-11 03:39:25 -0300 (Thu, 11 May 2006) $
This software is published under the terms of the GNU Public License (GPL),
a copy of which is included in this distribution.
-->
<!--
Build Requirements:
* Ant 1.6 (including optional tasks)
* JDK 1.5
* jUnit in your Ant or Java classpath
-->
<project name="Connection Manager" default="all" basedir="..">
<description>
Connection Manager build script.
</description>
<!-- ======================================================================================= -->
<!-- GLOBAL TASKDEFs -->
<!-- ======================================================================================= -->
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="${basedir}/build/lib/ant-contrib.jar"/>
</classpath>
</taskdef>
<taskdef name="subdirinfo" classname="org.jivesoftware.ant.SubDirInfoTask">
<classpath>
<pathelement location="${basedir}/build/lib/ant-subdirtask.jar"/>
</classpath>
</taskdef>
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask">
<classpath>
<pathelement location="${basedir}/build/lib/xmltask.jar"/>
</classpath>
</taskdef>
<taskdef name="pack200" classname="com.sun.tools.apache.ant.pack200.Pack200Task">
<classpath>
<pathelement location="${basedir}/build/lib/pack200task.jar"/>
</classpath>
</taskdef>
<taskdef name="unpack200" classname="com.sun.tools.apache.ant.pack200.Unpack200Task">
<classpath>
<pathelement location="${basedir}/build/lib/pack200task.jar"/>
</classpath>
</taskdef>
<!--
<taskdef resource="clovertasks" />
-->
<!-- ======================================================================================= -->
<!-- GLOBAL PROPERTIES -->
<!-- ======================================================================================= -->
<property name="version.major" value="3"/>
<property name="version.minor" value="4"/>
<property name="version.revision" value="1"/>
<property name="version.extra" value=""/> <!-- For 'beta' or 'alpha' -->
<property name="dist.prefix" value="connection_manager"/>
<property file="${basedir}/build/build.properties"/>
<property name="src.dir" value="${basedir}/src"/>
<property name="src.java.dir" value="${src.dir}/java"/>
<property name="src.i18n.dir" value="${src.dir}/i18n"/>
<property name="src.test.dir" value="${src.dir}/test"/>
<property name="src.test.java.dir" value="${src.test.dir}/java"/>
<property name="docs.dir" value="${basedir}/documentation"/>
<property name="lib.build.dir" value="${basedir}/build/lib"/>
<property name="lib.build.installer.dir" value="${basedir}/build/installer"/>
<property name="lib.merge.dir" value="${lib.build.dir}/merge"/>
<property name="lib.dist.dir" value="${lib.build.dir}/dist"/>
<property name="i18n.basename" value="cmanager_i18n"/>
<property name="i18n.default.locale" value="en"/>
<property name="target.dir" value="${basedir}/target"/>
<property name="temp.build.dir" value="${basedir}/target/tempbuild"/>
<property name="target.i18n.dir" value="${temp.build.dir}/i18n"/>
<property name="compile.dir" value="${target.dir}/classes"/>
<property name="jar.name" value="cmanager.jar"/>
<property name="jar.starter.name" value="startup.jar"/>
<property name="jar.dest.dir" value="${target.dir}/lib"/>
<property name="javadoc.src.dir" value="${src.dir}/javadoc"/>
<property name="javadoc.dest.dir" value="${target.dir}/javadoc"/>
<property name="test.dest.dir" value="${target.dir}/test"/>
<property name="test.classes.dest.dir" value="${test.dest.dir}/classes"/>
<property name="test.results.dest.dir" value="${test.dest.dir}/results"/>
<property name="release.dest.dir" value="${target.dir}/release"/>
<property name="overwrite" value="false"/>
<property name="deploy.jar.dir" value="${jar.dest.dir}"/>
<property name="anttools.src.dir" value="${src.dir}/tools"/>
<property name="anttools.target.dir" value="${target.dir}/tools"/>
<property name="overwrite" value="true"/>
<property name="installer.install4j.home" value="c:\\Program Files\\install4j"/>
<property name="installer.src" value="${basedir}/build/installer"/>
<property name="installer.dest.dir" value="${release.dest.dir}/installers"/>
<property name="installer.install4j.srcfile" value="${installer.src}/cmanager.install4j"/>
<property name="installer.app_name" value="Connection Manager"/>
<property name="installer.app_short_name" value="connection_manager"/>
<property name="installer.product_name" value="connection_manager"/>
<property name="installer.application_id" value="6886-9911-0474-3571"/>
<property name="installer.unix_install_dir" value="connection_manager"/>
<property name="installer.windows_install_dir" value="Connection Manager"/>
<property name="installer.publisher" value="Jive Software"/>
<property name="installer.publisher_url" value="www.igniterealtime.org"/>
<property name="installer.file_prefix" value="${installer.app_short_name}"/>
<property name="installer.release_root_path" value="${release.dest.dir}"/>
<property name="license.file.path" value="${docs.dir}/dist"/>
<!-- For auto-running and debugging -->
<property name="debug" value="false" />
<!-- ======================================================================================= -->
<!-- PATHs / PATTERNSETs / FILTERSETs -->
<!-- ======================================================================================= -->
<path id="javadoc.dependencies">
<fileset dir="${lib.build.dir}" includes="*.jar" excludes="junit.jar"/>
<fileset dir="${lib.merge.dir}" includes="*.jar"/>
<fileset dir="${lib.dist.dir}" includes="servlet.jar, mail.jar, activation.jar, jdic.jar, bouncycastle.jar"/>
</path>
<path id="compile.dependencies">
<path refid="javadoc.dependencies"/>
</path>
<path id="test.dependencies">
<path refid="compile.dependencies"/>
<fileset dir="${jar.dest.dir}" includes="cmanager.jar"/>
<fileset dir="${lib.build.dir}" includes="junit.jar"/>
<!-- <fileset dir="${ant.home}/lib" includes="clover.jar" /> -->
</path>
<patternset id="compile.sources">
<include name="**/*.java"/>
</patternset>
<patternset id="test.sources">
<include name="**/*Test.java"/>
</patternset>
<!-- ======================================================================================= -->
<!-- TARGETs -->
<!-- ======================================================================================= -->
<!-- all =================================================================================== -->
<target name="all" depends="jar, javadoc" description="Calls jar and javadoc targets"/>
<!-- init ================================================================================== -->
<target name="init">
<!-- Check for min build requirements -->
<condition property="ant.not.ok" value="true">
<not>
<or>
<contains string="${ant.version}" substring="1.6"/>
<contains string="${ant.version}" substring="1.7"/>
</or>
</not>
</condition>
<condition property="java.not.ok" value="true">
<not>
<or>
<contains string="${ant.java.version}" substring="1.5"/>
<contains string="${ant.java.version}" substring="1.6"/>
</or>
</not>
</condition>
<fail if="ant.not.ok" message="Must use Ant 1.6.x or 1.7.x to build Connection Manager"/>
<fail if="java.not.ok" message="Must use JDK 1.5.x or higher to build Connection Manager"/>
<tstamp/>
<tstamp>
<format property="builddate" pattern="MM/dd/yyyy"/>
</tstamp>
<tstamp>
<format property="dailybuild.tstamp" pattern="yyyy-MM-dd" locale="en"/>
</tstamp>
<mkdir dir="${target.dir}"/>
<!-- Setup the full version property correctly -->
<if>
<equals arg1="${version.extra}" arg2=""/>
<then>
<property name="version" value="${version.major}.${version.minor}.${version.revision}"/>
<property name="version.filename" value="${version.major}_${version.minor}_${version.revision}"/>
</then>
<else>
<property name="version" value="${version.major}.${version.minor}.${version.revision}.${version.extra}"/>
<property name="version.filename" value="${version.major}_${version.minor}_${version.revision}_${version.extra}"/>
</else>
</if>
</target>
<!-- compile =============================================================================== -->
<target name="compile" depends="init" description="Compiles Connection Manager app code">
<mkdir dir="${compile.dir}"/>
<javac
destdir="${compile.dir}"
includeAntRuntime="no"
debug="on"
source="1.5"
target="1.5"
>
<src path="${src.java.dir}"/>
<patternset refid="compile.sources"/>
<classpath>
<path refid="compile.dependencies"/>
</classpath>
</javac>
</target>
<!-- i18n ================================================================================== -->
<!-- Note, this is a "private" target - no need to call it externally -->
<target name="-i18n">
<!-- Auto generates a default base i18n file -->
<mkdir dir="${target.i18n.dir}"/>
<copy file="${src.i18n.dir}/${i18n.basename}_${i18n.default.locale}.properties"
tofile="${target.i18n.dir}/${i18n.basename}.properties"/>
</target>
<!-- jar =================================================================================== -->
<target name="jar" depends="compile, -i18n" description="Produces Connection Managers jars and sets up dependencies">
<mkdir dir="${jar.dest.dir}"/>
<!-- Make main Connection Manager jar -->
<jar jarfile="${jar.dest.dir}/${jar.name}" index="true" duplicate="preserve">
<fileset dir="${compile.dir}" includes="**/*.class"
excludes="org/jivesoftware/multiplexer/starter/ServerStarter*.class,org/jivesoftware/multiplexer/launcher/*.class"/>
<fileset dir="${src.i18n.dir}" includes="*.properties"/>
<fileset dir="${target.i18n.dir}" includes="*.properties"/>
<fileset dir="${src.dir}" includes="database/*.sql"/>
<fileset dir="${src.dir}" includes="database/upgrade/**/*.sql"/>
<zipgroupfileset dir="${lib.merge.dir}" includes="*.jar"/>
<manifest>
<attribute name="Built-By" value="Jive Software (www.igniterealtime.org)"/>
</manifest>
</jar>
<!-- Make startup jar -->
<jar jarfile="${jar.dest.dir}/${jar.starter.name}">
<fileset dir="${compile.dir}">
<include name="org/jivesoftware/multiplexer/starter/ServerStarter*.class"/>
<include name="org/jivesoftware/multiplexer/launcher/*.class"/>
<include name="org/jivesoftware/multiplexer/starter/JiveClassLoader*.class"/>
</fileset>
<fileset dir="${lib.build.installer.dir}/images" includes="**/*.gif"/>
<fileset dir="${lib.build.installer.dir}/images" includes="**/*.png"/>
<manifest>
<attribute name="Main-Class" value="org.jivesoftware.multiplexer.starter.ServerStarter"/>
<attribute name="Built-By" value="Jive Software (www.igniterealtime.org)"/>
</manifest>
</jar>
<!-- Copy application dependent files -->
<copy todir="${jar.dest.dir}">
<fileset dir="${lib.dist.dir}" includes="*.*"/>
</copy>
<!-- Setup environment -->
<antcall target="-prepare"/>
</target>
<!-- run =================================================================================== -->
<target name="run" description="Starts Connection Manager inline to the build process.">
<echo>Ensure that you have run ant jar!</echo>
<condition property="run.debug" value="-Xdebug -Xint -server -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000">
<isset property="debug"/>
</condition>
<java jar="${target.dir}/lib/startup.jar" fork="true" dir="${target.dir}/bin">
<jvmarg line="${run.debug}"/>
</java>
</target>
<!-- deployjar ============================================================================= -->
<target name="deployjar" depends="jar" description="Pushes JARs to specified web location.">
<copy todir="${deploy.jar.dir}" overwrite="${overwrite}">
<fileset dir="${jar.dest.dir}" includes="*.jar"/>
</copy>
</target>
<!-- javadoc =============================================================================== -->
<target name="javadoc" depends="compile" description="Produces Connection Manager Javadocs">
<mkdir dir="${javadoc.dest.dir}"/>
<antcall target="-javadoc-impl"/>
</target>
<target name="-javadoc-impl" unless="no.javadoc">
<!-- Run javadoc over all source code -->
<javadoc
packagenames="org.jivesoftware.*, org.xmpp.*"
destdir="${javadoc.dest.dir}"
windowtitle="Connection Manager ${version} Javadoc"
overview="${src.java.dir}/overview.html"
failonerror="yes"
>
<sourcepath>
<path location="${src.java.dir}"/>
</sourcepath>
<doctitle><![CDATA[<font face="arial,helvetica,sans-serif">Connection Manager ${version} Javadoc</font>]]></doctitle>
<header><![CDATA[<b>Connection Manager ${version} Javadoc</b>]]></header>
<bottom><![CDATA[<i>Copyright © 2003-2006 Jive Software.</i>]]></bottom>
<classpath>
<path refid="javadoc.dependencies"/>
</classpath>
<link offline="true" href="http://java.sun.com/j2se/1.5.0/docs/api/" packagelistLoc="${javadoc.src.dir}/jdk15"/>
</javadoc>
</target>
<!--
<target name="with-clover">
<clover-setup initString="${target.dir}/test/cmanager-coverage.db" />
</target>
<target name="clover-html" depends="with-clover">
<mkdir dir="${test.results.dest.dir}/clover" />
<clover-report>
<current outfile="${test.results.dest.dir}/clover">
<format type="html"/>
</current>
</clover-report>
</target>
-->
<!-- test ================================================================================== -->
<target name="test" depends="jar" description="Compiles and runs test cases">
<!-- Compile all test code -->
<mkdir dir="${test.classes.dest.dir}"/>
<javac
destdir="${test.classes.dest.dir}"
includeAntRuntime="no"
debug="on"
source="1.5"
target="1.5"
>
<src path="${src.test.java.dir}"/>
<patternset refid="test.sources"/>
<classpath>
<path refid="test.dependencies"/>
<pathelement path="${compile.dir}"/>
</classpath>
</javac>
<!-- Run jUnit -->
<mkdir dir="${test.results.dest.dir}"/>
<junit printsummary="yes" haltonfailure="yes" fork="yes" dir="${test.dest.dir}">
<!-- We must add our own classes to the classpath for testing -->
<classpath>
<path refid="test.dependencies"/>
<pathelement path="${test.classes.dest.dir}"/>
</classpath>
<formatter type="plain"/>
<batchtest todir="${test.results.dest.dir}">
<fileset dir="${src.test.java.dir}">
<patternset refid="test.sources"/>
</fileset>
</batchtest>
</junit>
</target>
<target name="-prepare">
<property name="prepare.out.dir" value="${target.dir}"/>
<!-- Copy lib dir -->
<copy todir="${prepare.out.dir}/lib">
<fileset dir="${jar.dest.dir}" includes="*.*"></fileset>
</copy>
<!-- Copy conf dir -->
<copy todir="${prepare.out.dir}">
<fileset dir="${src.dir}" includes="conf/**/*.*"></fileset>
</copy>
<!-- Copy security resources -->
<copy todir="${prepare.out.dir}/resources">
<fileset dir="${src.dir}">
<include name="security/*"/>
<include name="security/*.*"/>
</fileset>
</copy>
<!-- Copy bin dir -->
<copy todir="${prepare.out.dir}">
<fileset dir="${src.dir}" includes="bin/**/*" />
</copy>
<fixcrlf srcdir="${prepare.out.dir}/bin" eol="lf" eof="remove" includes="*.sh,extra/*"/>
<!-- Create a logs dir in the binary release -->
<mkdir dir="${prepare.out.dir}/logs"/>
</target>
<!-- release =============================================================================== -->
<target name="release" depends="jar,javadoc" description="Creates a distribution">
<mkdir dir="${release.dest.dir}"/>
<!-- Create a new prop for the final release dirs then create the dirs -->
<!-- ie: connection_manager -->
<property name="release.name" value="${dist.prefix}"/>
<!-- ie: connection_manager_src -->
<property name="release.name.src" value="${dist.prefix}_src"/>
<!-- ie: connection_manager_2_1_2 -->
<property name="release.fullname" value="${dist.prefix}_${version.filename}"/>
<!-- ie: connection_manager_src_2_1_2 -->
<property name="release.fullname.src" value="${dist.prefix}_src_${version.filename}"/>
<property name="release.out.dir" value="${release.dest.dir}/${release.name}"/>
<property name="release.src.out.dir" value="${release.dest.dir}/${release.name.src}"/>
<mkdir dir="${release.out.dir}"/>
<mkdir dir="${release.src.out.dir}"/>
<!-- Copy all prepare dirs to the binary dist -->
<ant antfile="${basedir}/build/build.xml" target="-prepare">
<property name="prepare.out.dir" value="${release.out.dir}"/>
</ant>
<!-- Remove the development scripts -->
<delete file="${release.out.dir}/bin/cmanager-dev.bat"/>
<delete file="${release.out.dir}/bin/cmanager-dev.sh"/>
<!-- Pack200 processing on JAR files in lib dir -->
<for param="jar">
<path>
<fileset dir="${release.out.dir}/lib" includes="*.jar" excludes="startup.jar,jdic.jar,mail.jar,activation.jar,bouncycastle.jar" />
</path>
<sequential>
<delete file="@{jar}.pack" />
<pack200 src="@{jar}"
destfile="@{jar}.pack"
gzipoutput="false"
/>
<delete file="@{jar}" />
</sequential>
</for>
<!-- Copy dist docs, use filtering -->
<copy todir="${release.out.dir}">
<fileset dir="${docs.dir}/dist" includes="*.*" excludes="LICENSE.html"/>
<filterset>
<filter token="builddate" value="${builddate}"/>
<filter token="version" value="${version}"/>
</filterset>
</copy>
<copy todir="${release.src.out.dir}">
<fileset dir="${docs.dir}/dist" includes="*.*" excludes="LICENSE.html"/>
<filterset>
<filter token="builddate" value="${builddate}"/>
<filter token="version" value="${version}"/>
</filterset>
</copy>
<!-- Copy the license -->
<copy todir="${release.out.dir}" file="${license.file.path}/LICENSE.html"/>
<copy todir="${release.src.out.dir}" file="${license.file.path}/LICENSE.html"/>
<mkdir dir="${release.out.dir}/logs" />
<touch file="${release.out.dir}/logs/stderr.out" />
<!-- Copy docs -->
<copy todir="${release.out.dir}/documentation">
<fileset dir="${docs.dir}/docs"/>
<filterset>
<filter token="version" value="${version}"/>
</filterset>
</copy>
<copy todir="${release.src.out.dir}/documentation">
<fileset dir="${docs.dir}" includes="**/*.*"/>
<filterset>
<filter token="version" value="${version}"/>
</filterset>
</copy>
<!-- Copy Javadocs -->
<copy todir="${release.out.dir}/documentation/javadoc">
<fileset dir="${javadoc.dest.dir}"/>
</copy>
<copy todir="${release.src.out.dir}/documentation/docs/javadoc">
<fileset dir="${javadoc.dest.dir}"/>
</copy>
<!-- Copy source -->
<copy todir="${release.src.out.dir}/src">
<fileset dir="${src.dir}"/>
</copy>
<!-- Copy the i18n files to the resources dir. This way they won't be in the jar only -->
<copy todir="${release.out.dir}/resources/i18n">
<fileset dir="${target.i18n.dir}" includes="*.properties"/>
<fileset dir="${src.i18n.dir}" includes="*.properties"/>
</copy>
<copy todir="${release.src.out.dir}/resources/i18n">
<fileset dir="${target.i18n.dir}" includes="*.properties"/>
<fileset dir="${src.i18n.dir}" includes="*.properties"/>
</copy>
<!-- Copy build -->
<copy todir="${release.src.out.dir}/build">
<fileset dir="${basedir}/build"/>
</copy>
<!-- Package the release -->
<antcall target="release-package"/>
</target>
<!-- quickrelease ========================================================================== -->
<target name="quickrelease" description="Makes an unpackaged release without Javadocs">
<antcall target="release">
<param name="no.javadoc" value="true"/>
<param name="no.package" value="true"/>
</antcall>
</target>
<!-- release-package ======================================================================= -->
<target name="release-package" unless="no.package" description="Packages a release">
<property name="package.dest.dir" value="${release.dest.dir}"/>
<!-- ZIP -->
<zip zipfile="${package.dest.dir}/${release.fullname}.zip"
basedir="${release.out.dir}/.."
includes="${release.fullname}/**/*, ${release.name}/**/*"
/>
<zip zipfile="${package.dest.dir}/${release.fullname.src}.zip"
basedir="${release.src.out.dir}/.."
includes="${release.fullname.src}/**/*, ${release.name.src}/**/*"
/>
<!-- TAR.GZ -->
<tar tarfile="${package.dest.dir}/${release.fullname}.tar.gz"
basedir="${release.out.dir}/.."
includes="${release.fullname}/**/*, ${release.name}/**/*"
compression="gzip"
longfile="gnu"
/>
<tar tarfile="${package.dest.dir}/${release.fullname.src}.tar.gz"
basedir="${release.src.out.dir}/.."
includes="${release.fullname.src}/**/*, ${release.name.src}/**/*"
compression="gzip"
longfile="gnu"
/>
</target>
<!-- dailybuild ============================================================================ -->
<target name="dailybuild" depends="init" description="Creates a daily build release">
<property name="release.out.name" value="${dist.prefix}_${dailybuild.tstamp}"/>
<property name="release.fullname" value="${release.out.name}"/>
<property name="release.src.out.name" value="${dist.prefix}_src_${dailybuild.tstamp}"/>
<property name="release.fullname.src" value="${release.src.out.name}"/>
<property name="release.out.dir" value="${release.dest.dir}/dailybuild/${release.out.name}"/>
<property name="release.src.out.dir" value="${release.dest.dir}/dailybuild/${release.src.out.name}"/>
<antcall target="release">
<param name="release.out.name" value="${release.out.name}"/>
<param name="release.src.out.name" value="${release.src.out.name}"/>
<param name="release.out.dir" value="${release.out.dir}"/>
<param name="release.src.out.dir" value="${release.src.out.dir}"/>
<param name="package.dest.dir" value="${release.dest.dir}/dailybuild"/>
</antcall>
</target>
<!-- installer ============================================================================= -->
<target name="installer" depends="release" description="Creates an Install4j installer">
<condition property="install4j.not.ok" value="true">
<not>
<available file="${installer.install4j.home}/bin/install4j.jar"/>
</not>
</condition>
<fail if="install4j.not.ok" message="Path to Install4j not set, see build.properties.template file."/>
<taskdef name="install4j"
classname="com.install4j.Install4JTask"
classpath="${installer.install4j.home}/bin/install4j.jar"/>
<mkdir dir="${installer.dest.dir}"/>
<install4j projectfile="${installer.install4j.srcfile}" destination="${installer.dest.dir}">
<variable name="VERSION_MAJOR" value="${version.major}"/>
<variable name="VERSION_MINOR" value="${version.minor}"/>
<variable name="VERSION_REVISION" value="${version.revision}"/>
<variable name="APP_NAME" value="${installer.app_name}"/>
<variable name="APP_SHORT_NAME" value="${installer.app_short_name}"/>
<variable name="PRODUCT_NAME" value="${installer.product_name}"/>
<variable name="PUBLISHER" value="${installer.publisher}"/>
<variable name="PUBLISHER_URL" value="${installer.publisher_url}"/>
<variable name="FILE_PREFIX" value="${installer.app_short_name}"/>
<variable name="RELEASE_ROOT_PATH" value="${installer.release_root_path}"/>
<variable name="APPLICATION_ID" value="${installer.application_id}"/>
<variable name="UNIX_INSTALL_DIR" value="${installer.unix_install_dir}"/>
<variable name="WINDOWS_INSTALL_DIR" value="${installer.windows_install_dir}"/>
</install4j>
</target>
<!-- anttasks ============================================================================== -->
<target name="anttasks" depends="init">
<mkdir dir="${anttools.target.dir}"/>
<mkdir dir="${anttools.target.dir}/classes"/>
<javac
destdir="${anttools.target.dir}/classes"
includeAntRuntime="no"
debug="on"
source="1.4"
>
<src path="${anttools.src.dir}"/>
<patternset refid="compile.sources"/>
<classpath>
<path refid="compile.dependencies"/>
</classpath>
</javac>
<jar jarfile="${anttools.target.dir}/ant-subdirtask.jar">
<fileset dir="${anttools.target.dir}/classes" includes="**/*.class"/>
</jar>
</target>
<!-- clean ================================================================================= -->
<target name="clean" description="Cleans up all build-generated output">
<delete dir="${target.dir}"/>
</target>
<!-- clean-test ============================================================================ -->
<target name="clean-test" description="Cleans all compiled test classes">
<delete dir="${test.classes.dest.dir}"/>
</target>
</project>