blob: d913ab6f584969924841e5fceb4bba3dad7ad8fc [file] [log] [blame]
<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<project name="ZooKeeper" default="jar">
<property name="Name" value="ZooKeeper" />
<property name="name" value="zookeeper" />
<property environment="env"/>
<property name="version" value="3.2.2" />
<property name="final.name" value="${name}-${version}"/>
<property name="revision.dir" value="${basedir}/.revision" />
<property name="revision.properties" value="revision.properties" />
<property file="${basedir}/src/java/${revision.properties}" />
<!-- Target JDK version to build for. Certain zookeeper features -->
<!-- (for example, JMX) are only supported on JDK 1.6 -->
<property name="target.jdk" value="${ant.java.version}" />
<property name="src.dir" value="${basedir}/src" />
<property name="java.src.dir" value="${src.dir}/java/main" />
<property name="jmx.src.dir" value="${src.dir}/java/jmx" />
<property name="lib.dir" value="${src.dir}/java/lib" />
<property name="build.dir" value="${basedir}/build" />
<property name="distribution" value="${basedir}/distribution" />
<property name="src_generated.dir" value="${src.dir}/java/generated" />
<property name="c.src.dir" value="${src.dir}/c" />
<property name="csrc_generated.dir" value="${c.src.dir}/generated" />
<property name="build.classes" value="${build.dir}/classes" />
<property name="jar.name" value="zookeeper-dev.jar" />
<property name="jute.file" value="${src.dir}/zookeeper.jute" />
<property name="build.testclasses" value="${build.dir}/testclasses"/>
<property name="test.build.dir" value="${build.dir}/test" />
<property name="test.src.dir" value="${src.dir}/java/test"/>
<property name="systest.src.dir" value="${src.dir}/java/systest"/>
<property name="test.log.dir" value="${test.build.dir}/logs" />
<property name="test.data.dir" value="${test.build.dir}/data" />
<property name="test.data.upgrade.dir" value="${test.data.dir}/upgrade" />
<property name="test.data.invalid.dir" value="${test.data.dir}/invalidsnap" />
<property name="test.cppunit.dir" value="${test.build.dir}/test-cppunit"/>
<property name="test.tmp.dir" value="${test.build.dir}/tmp" />
<property name="test.output" value="no" />
<property name="test.timeout" value="900000" />
<property name="test.junit.output.format" value="plain" />
<property name="test.junit.fork.mode" value="perTest" />
<property name="test.junit.printsummary" value="yes" />
<property name="test.junit.haltonfailure" value="no" />
<property name="config.dir" value="${src.dir}/java/test/config" />
<property name="test.junit.maxmem" value="512m" />
<property name="conf.dir" value="${basedir}/conf"/>
<property name="docs.dir" value="${basedir}/docs"/>
<property name="docs.src" value="${basedir}/src/docs"/>
<property name="javadoc.link.java"
value="http://java.sun.com/javase/6/docs/api/" />
<property name="javadoc.packages" value="org.apache.*" />
<property name="build.docs" value="${build.dir}/docs" />
<property name="build.javadoc" value="${build.docs}/api" />
<property name="build.javadoc.dev" value="${build.docs}/dev-api"/>
<property name="dist.dir" value="${build.dir}/${final.name}"/>
<property name="clover.home" location="${env.CLOVER_HOME}"/>
<property name="clover.jar" location="${clover.home}/lib/clover.jar" />
<property name="clover.db.dir" location="${test.build.dir}/clover/db"/>
<property name="clover.report.dir"
location="${test.build.dir}/clover/reports"/>
<property name="contrib.dir" value="${src.dir}/contrib"/>
<property name="recipes.dir" value="${src.dir}/recipes"/>
<available property="clover.present"
classname="com.cenqua.clover.CloverInstr"
classpath="${clover.home}/lib/clover.jar"/>
<available file="${c.src.dir}/Makefile" property="Makefile.present"/>
<!-- check if clover reports should be generated -->
<condition property="clover.enabled">
<and>
<isset property="run.clover"/>
<isset property="clover.present"/>
</and>
</condition>
<property name="test.cobertura.output.format" value="html" />
<property name="coveragereport.dir" value="${build.dir}/cobertura" />
<!-- rats properties -->
<property name="rats_url" value="http://arat.googlecode.com/files/rat-lib-all-0.5.1.jar" />
<property name="rat.reporting.classname" value="rat.Report"/>
<!-- test patch properties -->
<property name="scratch.dir" value="${user.home}/tmp"/>
<property name="svn.cmd" value="svn"/>
<property name="grep.cmd" value="grep"/>
<property name="patch.cmd" value="patch"/>
<property name="make.cmd" value="make"/>
<property name="test_patch_sh" value="${test.src.dir}/bin/test-patch.sh"/>
<!-- jdiff.home property set -->
<property name="jdiff.home" value="${lib.dir}"/>
<property name="jdiff.version" value="1.0.9"/>
<property name="xerces.version" value="1.4.4"/>
<property name="jdiff.jar" value="${jdiff.home}/jdiff-${jdiff.version}.jar"/>
<property name="xerces.jar" value="${jdiff.home}/xerces-${xerces.version}.jar"/>
<property name="jdiff.build.dir" value="${build.docs}/jdiff"/>
<property name="jdiff.xml.dir" value="${lib.dir}/jdiff"/>
<property name="jdiff.stable" value="3.1.1"/>
<property name="jdiff.stable.javadoc"
value="http://hadoop.apache.org/zookeeper/docs/r${jdiff.stable}/api/"/>
<property name="jdiff.download.url"
value="http://mirrors.ibiblio.org/pub/mirrors/maven2/jdiff/jdiff/${jdiff.version}/jdiff-${jdiff.version}.jar"/>
<property name="jdiff.jar" value="${jdiff.home}/jdiff.jar"/>
<property name="xerces.download.url"
value="http://mirrors.ibiblio.org/pub/mirrors/maven2/xerces/xerces/${xerces.version}/xerces-${xerces.version}.jar"/>
<property name="xerces.jar" value="${jdiff.home}/xerces.jar"/>
<!-- ====================================================== -->
<!-- Macro definitions -->
<!-- ====================================================== -->
<macrodef name="macro_tar" description="Worker Macro for tar">
<attribute name="param.destfile"/>
<element name="param.listofitems"/>
<sequential>
<tar compression="gzip" longfile="gnu"
destfile="@{param.destfile}">
<param.listofitems/>
</tar>
</sequential>
</macrodef>
<!-- ====================================================== -->
<!-- Generate and compile the Java files -->
<!-- ====================================================== -->
<target name="init">
<mkdir dir="${build.classes}" />
<tstamp>
<format property="build.time" pattern="MM/dd/yyyy HH:mm zz" timezone="GMT"/>
<format property="year" pattern="yyyy" timezone="GMT"/>
</tstamp>
<condition property="extra.src.dir" value="${jmx.src.dir}">
<and>
<equals arg1="${target.jdk}" arg2="1.6"/>
<available file="${jmx.src.dir}" type="dir"/>
</and>
</condition>
<path id="project.classpath">
<fileset dir="${build.classes}" />
<pathelement path="${lib.dir}/log4j-1.2.15.jar" />
<pathelement path="${clover.jar}" />
<pathelement path="${lib.dir}/jline-0.9.94.jar" />
</path>
</target>
<target name="jute" depends="init">
<javac srcdir="${java.src.dir}" destdir="${build.classes}" target="${target.jdk}"
includes="org/apache/jute/**" debug="on" />
</target>
<target name="compile_jute_uptodate">
<uptodate property="juteBuild.notRequired"
srcfile="${jute.file}"
targetfile="${src_generated.dir}/.generated"/>
</target>
<target name="compile_jute" depends="jute,compile_jute_uptodate" unless="juteBuild.notRequired">
<mkdir dir="${src_generated.dir}" />
<mkdir dir="${csrc_generated.dir}" />
<java classname="org.apache.jute.compiler.generated.Rcc" fork="true" dir="${src_generated.dir}">
<arg value="-l" />
<arg value="java" />
<arg value="../../zookeeper.jute" />
<classpath>
<pathelement path="${build.classes}" />
</classpath>
</java>
<java classname="org.apache.jute.compiler.generated.Rcc" fork="true" dir="${csrc_generated.dir}">
<arg value="-l" />
<arg value="c" />
<arg value="../../zookeeper.jute" />
<classpath>
<pathelement path="${build.classes}" />
</classpath>
</java>
<touch file="${src_generated.dir}/.generated"/>
</target>
<target name="ver-gen" depends="init">
<javac srcdir="${java.src.dir}" destdir="${build.classes}" target="${target.jdk}"
includes="org/apache/zookeeper/version/util/**" debug="on" />
</target>
<target name="svn-revision" unless="lastRevision">
<mkdir dir="${revision.dir}" />
<condition property="shell.name" value="cmd" else="sh">
<os family="windows"/>
</condition>
<condition property="revision.cmd.line"
value="/c ${src.dir}\lastRevision.bat" else="${src.dir}/lastRevision.sh">
<os family="windows"/>
</condition>
<exec executable="${shell.name}">
<arg line="${revision.cmd.line} ${revision.dir}${file.separator}${revision.properties}"/>
</exec>
<property file="${revision.dir}/${revision.properties}" />
</target>
<target name="version-info" depends="ver-gen,svn-revision">
<mkdir dir="${src_generated.dir}" />
<java classname="org.apache.zookeeper.version.util.VerGen" fork="true"
dir="${src_generated.dir}">
<arg value="${version}" />
<arg value="${lastRevision}" />
<arg value="${build.time}" />
<classpath>
<pathelement path="${build.classes}" />
</classpath>
</java>
</target>
<target name="build-generated" depends="compile_jute,version-info" >
<javac srcdir="${src_generated.dir}" destdir="${build.classes}"
target="${target.jdk}" debug="on" />
</target>
<target name="compile-extra" depends="compile-main" if="extra.src.dir">
<javac srcdir="${extra.src.dir}" destdir="${build.classes}"
target="${target.jdk}" debug="on">
<classpath refid="project.classpath"/>
</javac>
<copy todir="${build.classes}">
<fileset dir="${extra.src.dir}"/>
</copy>
</target>
<target name="compile-main" depends="build-generated">
<javac srcdir="${java.src.dir}" destdir="${build.classes}"
target="${target.jdk}" debug="on">
<classpath refid="project.classpath"/>
<compilerarg value="-Xlint:all"/>
<compilerarg value="-Xlint:-path"/>
</javac>
<copy todir="${build.classes}">
<fileset dir="${java.src.dir}"/>
<fileset dir="${src_generated.dir}"/>
</copy>
</target>
<target name="compile" depends="clover,compile-main,compile-extra"/>
<target name="test-classpath">
<path id="test.classpath">
<fileset dir="${basedir}">
<include name="*.jar"/>
</fileset>
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
<pathelement path="${clover.jar}" />
</path>
</target>
<target name="compile-test" depends="jar,test-classpath">
<mkdir dir="${build.testclasses}"/>
<javac srcdir="${test.src.dir}" destdir="${build.testclasses}"
target="${target.jdk}" debug="on">
<classpath refid="test.classpath"/>
</javac>
<javac srcdir="${systest.src.dir}" destdir="${build.testclasses}"
target="${target.jdk}" debug="on">
<classpath refid="test.classpath"/>
</javac>
</target>
<!-- ====================================================== -->
<!-- Documentation -->
<!-- ====================================================== -->
<target name="docs" depends="forrest.check" description="Generate forrest-based documentation. To use, specify -Dforrest.home=&lt;base of Apache Forrest installation&gt; on the command line." if="forrest.home">
<condition property="forrest.exec" value="forrest.bat" else="forrest">
<os family="windows"/>
</condition>
<exec dir="${docs.src}" executable="${forrest.home}/bin/forrest"
failonerror="true">
<env key="JAVA_HOME" value="${java5.home}"/>
</exec>
<copy todir="${docs.dir}">
<fileset dir="${docs.src}/build/site/" />
</copy>
<style basedir="${conf.dir}" destdir="${docs.dir}"
includes="zookeeper-default.xml" style="conf/configuration.xsl"/>
</target>
<target name="forrest.check" unless="forrest.home" depends="java5.check">
<fail message="'forrest.home' is not defined. Please pass -Dforrest.home=&lt;base of Apache Forrest installation&gt; to Ant on the command-line." />
</target>
<target name="java5.check" unless="java5.home">
<fail message="'java5.home' is not defined. Forrest requires Java 5. Please pass -Djava5.home=&lt;base of Java 5 distribution&gt; to Ant on the command-line." />
</target>
<!-- Javadoc -->
<target name="javadoc-dev" depends="jar"
description="Generate javadoc for zookeeper developers">
<mkdir dir="${build.javadoc.dev}"/>
<javadoc
overview="${java.src.dir}/overview.html"
packagenames="org.apache.zookeeper.*"
destdir="${build.javadoc.dev}"
author="true"
version="true"
use="true"
windowtitle="${Name} ${version} API"
doctitle="${Name} ${version} API"
bottom="Copyright &amp;copy; ${year} The Apache Software Foundation"
>
<packageset dir="${java.src.dir}">
<include name="org/apache/**"/>
<exclude name="org/apache/jute/**"/>
</packageset>
<packageset dir="${src_generated.dir}"/>
<link href="${javadoc.link.java}"/>
<classpath refid="project.classpath"/>
</javadoc>
</target>
<target name="javadoc" depends="jar" description="Generate javadoc">
<mkdir dir="${build.javadoc}"/>
<javadoc
overview="${java.src.dir}/overview.html"
packagenames="org.apache.zookeeper.*"
destdir="${build.javadoc}"
author="true"
version="true"
use="true"
Public="yes"
windowtitle="${Name} ${version} API"
doctitle="${Name} ${version} API"
bottom="Copyright &amp;copy; ${year} The Apache Software Foundation"
>
<fileset dir="${java.src.dir}">
<include name="org/apache/**/*Main.java"/>
<include name="org/apache/zookeeper/AsyncCallback.java"/>
<include name="org/apache/zookeeper/CreateMode.java"/>
<include name="org/apache/zookeeper/KeeperException.java"/>
<include name="org/apache/zookeeper/ServerAdminClient.java"/>
<include name="org/apache/zookeeper/Watcher.java"/>
<include name="org/apache/zookeeper/ZooDefs.java"/>
<include name="org/apache/zookeeper/ZooKeeper.java"/>
<include name="org/apache/zookeeper/server/LogFormatter.java"/>
<include name="org/apache/zookeeper/server/PurgeTxnLog.java"/>
<exclude name="org/apache/zookeeper/server/quorum/QuorumPacket"/>
</fileset>
<packageset dir="${src_generated.dir}">
<exclude name="org/apache/zookeeper/proto"/>
<exclude name="org/apache/zookeeper/txn"/>
<exclude name="org/apache/zookeeper/version"/>
<exclude name="org/apache/zookeeper/server/**"/>
</packageset>
<link href="${javadoc.link.java}"/>
<classpath>
<fileset dir="${basedir}">
<include name="${jar.name}"/>
</fileset>
<path refid="project.classpath"/>
</classpath>
</javadoc>
</target>
<!-- ====================================================== -->
<!-- Make zookeeper.jar -->
<!-- ====================================================== -->
<target name="jar" depends="compile">
<java classname="org.apache.zookeeper.Version" fork="true"
outputproperty="revision" failonerror="true">
<arg value="--revision" />
<classpath>
<pathelement path="${build.classes}" />
<pathelement path="${clover.jar}" />
</classpath>
</java>
<exec executable="hostname" outputproperty="host.name"/>
<jar jarfile="${jar.name}">
<fileset file="LICENSE" />
<fileset dir="${build.classes}" excludes="**/.generated"/>
<manifest>
<attribute name="Main-Class" value="org.apache.zookeeper.server.quorum.QuorumPeer" />
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Built-At" value="${build.time}"/>
<attribute name="Built-On" value="${host.name}" />
<attribute name="Implementation-Title" value="org.apache.zookeeper"/>
<attribute name="Implementation-Version" value="${revision}"/>
<attribute name="Implementation-Vendor" value="The Apache Software Foundation"/>
</manifest>
</jar>
</target>
<target name="release-jar">
<antcall target="jar">
<param name="jar.name" value="${build.dir}/${final.name}.jar" />
</antcall>
</target>
<!-- ================================================================== -->
<!-- D I S T R I B U T I O N -->
<!-- ================================================================== -->
<!-- -->
<!-- ================================================================== -->
<target name="package"
depends="release-jar,api-report,compile-test,create-cppunit-configure"
description="Build distribution">
<mkdir dir="${dist.dir}"/>
<mkdir dir="${dist.dir}/lib"/>
<mkdir dir="${dist.dir}/contrib"/>
<mkdir dir="${dist.dir}/recipes"/>
<mkdir dir="${dist.dir}/bin"/>
<mkdir dir="${dist.dir}/docs"/>
<mkdir dir="${dist.dir}/docs/jdiff"/>
<mkdir dir="${dist.dir}/docs/api"/>
<copy todir="${dist.dir}/lib" includeEmptyDirs="false">
<fileset dir="${lib.dir}"/>
</copy>
<subant target="package">
<!--Pass down the version in case its needed again and the target
distribution directory so contribs know where to install to.-->
<property name="version" value="${version}"/>
<property name="dist.dir" value="${dist.dir}"/>
<fileset file="${contrib.dir}/build.xml"/>
<fileset file="${recipes.dir}/build.xml"/>
</subant>
<copy todir="${dist.dir}">
<fileset file="${build.dir}/${final.name}.jar"/>
</copy>
<copy todir="${dist.dir}/bin">
<fileset dir="bin"/>
</copy>
<copy todir="${dist.dir}/conf">
<fileset dir="${conf.dir}" excludes="**/*.template"/>
</copy>
<copy todir="${dist.dir}/docs">
<fileset dir="${docs.dir}" />
<fileset dir="${build.docs}"/>
</copy>
<copy todir="${dist.dir}">
<fileset dir=".">
<include name="*.txt" />
</fileset>
</copy>
<copy todir="${dist.dir}/src" includeEmptyDirs="true">
<fileset dir="src" excludes="**/*.template **/docs/build/**/*"/>
</copy>
<copy todir="${dist.dir}/" file="build.xml"/>
<chmod perm="ugo+x" type="file" parallel="false">
<fileset dir="${dist.dir}/bin"/>
<fileset dir="${dist.dir}/src/contrib/">
<include name="*/bin/*" />
</fileset>
</chmod>
</target>
<!-- ================================================================== -->
<!-- Make release tarball -->
<!-- ================================================================== -->
<target name="tar" depends="package" description="Make release tarball">
<macro_tar param.destfile="${build.dir}/${final.name}.tar.gz">
<param.listofitems>
<!-- it's unfortunate that the binaries have to be duplicated
however that's the only way ant currently supports afaik -->
<tarfileset dir="${build.dir}" mode="664">
<exclude name="${final.name}/bin/*" />
<exclude name="${final.name}/contrib/*/bin/*" />
<exclude name="${final.name}/**/compile" />
<exclude name="${final.name}/**/config.guess" />
<exclude name="${final.name}/**/config.sub" />
<exclude name="${final.name}/**/configure" />
<exclude name="${final.name}/**/depcomp" />
<exclude name="${final.name}/**/install-sh" />
<exclude name="${final.name}/**/ltmain.sh" />
<exclude name="${final.name}/**/missing" />
<exclude name="${final.name}/**/*.sh" />
<include name="${final.name}/**" />
</tarfileset>
<tarfileset dir="${build.dir}" mode="755">
<!-- be sure to add to exclude list above if you add here -->
<include name="${final.name}/bin/*" />
<include name="${final.name}/contrib/*/bin/*" />
<!-- autotools related commands -->
<include name="${final.name}/**/compile" />
<include name="${final.name}/**/config.guess" />
<include name="${final.name}/**/config.sub" />
<include name="${final.name}/**/configure" />
<include name="${final.name}/**/depcomp" />
<include name="${final.name}/**/install-sh" />
<include name="${final.name}/**/ltmain.sh" />
<include name="${final.name}/**/missing" />
<!-- any shell scripts -->
<include name="${final.name}/**/*.sh" />
</tarfileset>
</param.listofitems>
</macro_tar>
</target>
<target name="binary" depends="package"
description="Make tarball without source and documentation">
<macro_tar param.destfile="${build.dir}/${final.name}-bin.tar.gz">
<param.listofitems>
<tarfileset dir="${build.dir}" mode="664">
<include name="${final.name}/src/c/**" />
<exclude name="${final.name}/src/c/generated/**" />
</tarfileset>
<tarfileset dir="${build.dir}" mode="664">
<exclude name="${final.name}/bin/*" />
<exclude name="${final.name}/src/**" />
<exclude name="${final.name}/docs/**" />
<include name="${final.name}/**" />
</tarfileset>
<tarfileset dir="${build.dir}" mode="755">
<include name="${final.name}/bin/*" />
</tarfileset>
</param.listofitems>
</macro_tar>
</target>
<!-- ====================================================== -->
<!-- Clean. Delete the build files, and their directories -->
<!-- ====================================================== -->
<target name="clean" depends="clean-contrib,clean-recipes"
description="Clean. Delete the build files, and their directories">
<delete dir="${build.dir}"/>
<delete dir="${docs.src}/build"/>
<delete dir="${src_generated.dir}" />
<delete dir="${csrc_generated.dir}" />
<delete file="${jdiff.jar}" />
<delete file="${xerces.jar}" />
<delete file="${lib.dir}/Null.java"/>
<delete file="${lib.dir}/rats.jar" />
<delete file="${jdiff.xml.dir}/${name}_${version}.xml"/>
<delete file="${jar.name}" />
<delete dir="${distribution}"/>
<delete dir="${revision.dir}"/>
<delete>
<fileset dir="${basedir}" includes="*.jar,*.tar.gz"/>
</delete>
</target>
<target name="clean-contrib">
<subant target="clean">
<fileset file="${contrib.dir}/build.xml"/>
</subant>
</target>
<target name="clean-recipes">
<subant target="clean">
<fileset file="${recipes.dir}/build.xml"/>
</subant>
</target>
<!-- ====================================================== -->
<!-- Run unit tests -->
<!-- ====================================================== -->
<target name="test-init" depends="jar,compile-test">
<delete dir="${test.log.dir}" />
<delete dir="${test.tmp.dir}" />
<delete dir="${test.data.upgrade.dir}" />
<delete dir="${test.data.invalid.dir}" />
<delete dir="${test.data.dir}" />
<mkdir dir="${test.log.dir}" />
<mkdir dir="${test.tmp.dir}" />
<mkdir dir="${test.data.dir}" />
<mkdir dir="${test.data.upgrade.dir}" />
<mkdir dir="${test.data.invalid.dir}" />
<copy todir="${test.data.upgrade.dir}">
<fileset dir="${basedir}/src/java/test/data/upgrade"/>
</copy>
<copy todir="${test.data.invalid.dir}">
<fileset dir="${basedir}/src/java/test/data/invalidsnap"/>
</copy>
</target>
<target name="junit.run">
<junit showoutput="${test.output}"
printsummary="${test.junit.printsummary}"
haltonfailure="${test.junit.haltonfailure}"
fork="yes"
forkmode="${test.junit.fork.mode}"
maxmemory="${test.junit.maxmem}"
dir="${basedir}" timeout="${test.timeout}"
errorProperty="tests.failed" failureProperty="tests.failed">
<sysproperty key="build.test.dir" value="${test.tmp.dir}" />
<sysproperty key="test.data.dir" value="${test.data.dir}" />
<sysproperty key="log4j.configuration"
value="file:${basedir}/conf/log4j.properties" />
<classpath refid="test.classpath"/>
<classpath>
<pathelement path="${build.testclasses}" />
</classpath>
<formatter type="${test.junit.output.format}" />
<batchtest todir="${test.log.dir}" unless="testcase">
<fileset dir="${test.src.dir}"
includes="**/*${test.category}Test.java"/>
</batchtest>
<batchtest todir="${test.log.dir}" if="testcase">
<fileset dir="${test.src.dir}" includes="**/${testcase}.java"/>
</batchtest>
</junit>
<fail if="tests.failed">Tests failed!</fail>
</target>
<target name="check-cppunit-configure" depends="init" >
<condition property="need.cppunit.configure">
<not> <available file="${c.src.dir}/configure"/> </not>
</condition>
</target>
<target name="check-cppunit-makefile" depends="init" >
<condition property="need.cppunit.makefile">
<not> <available file="${test.cppunit.dir}/Makefile"/> </not>
</condition>
</target>
<!--
1. If we have a Makefile it will handle up-to-date check and also
regenerate the configure script if missing. (done)
2. If we don't have a Makefile use the configure script to
regenerate it. (done)
3. If we don't have a Makefile nor a configure script then it's
last resort and run autoreconf, then configure (done)
-->
<target name="create-cppunit-configure" depends="check-cppunit-configure"
if="need.cppunit.configure">
<exec executable="autoreconf" dir="${c.src.dir}" searchpath="yes"
failonerror="yes">
<arg value="-if"/>
</exec>
</target>
<target name="create-cppunit-makefile" depends="check-cppunit-makefile"
if="need.cppunit.makefile">
<antcall target="create-cppunit-configure">
<param name="cppunit" value="true"/>
</antcall>
<mkdir dir="${test.cppunit.dir}"/>
<exec executable="${c.src.dir}/configure" dir="${test.cppunit.dir}"
failonerror="yes">
<env key="base_dir" value="${basedir}"/>
<env key="CALLER" value="ANT"/>
<arg value="--prefix=${test.cppunit.dir}"/>
</exec>
</target>
<target name="call-test-cppunit" description="to execute cppunit tests">
<antcall target="create-cppunit-makefile"/>
<antcall target="test-cppunit">
<param name="cppunit" value="true"/>
</antcall>
</target>
<target name="test-cppunit"
depends="compile_jute, jar, create-cppunit-makefile"
if="cppunit"
description="to run cppunit test cases">
<property name="lib.cppunit" value="/usr/local/lib"/>
<exec dir="${test.cppunit.dir}" executable="make" failonerror="true">
<env key="LD_LIBRARY_PATH" value="${lib.cppunit}"/>
<env key="PATH" path="${env.PATH};${c.src.dir};"/>
<env key="CALLER" value="ANT"/>
<env key="CLOVER_HOME" value="{clover.home}"/>
<env key="base_dir" value="${basedir}"/>
<arg line="clean run-check"/>
</exec>
</target>
<target name="test-unit-category">
<property name="test.category" value="Unit"/>
</target>
<target name="test-unit" depends="test-init,test-unit-category,junit.run"/>
<target name="test-func-category">
<property name="test.category" value="Func"/>
</target>
<target name="test-func" depends="test-init,test-func-category,junit.run"/>
<target name="test-perf-category">
<property name="test.category" value="Perf"/>
</target>
<target name="test-perf" depends="test-init,test-perf-category,junit.run"/>
<target name="test-category">
<property name="test.category" value=""/>
</target>
<target name="test" description="to run core and contrib tests">
<antcall target="test-core"/>
<antcall target="test-contrib"/>
</target>
<target name="test-contrib" description="to run contrib tests">
<!-- yet to implement -->
</target>
<target name="test-core-java" depends="test-init, test-category, junit.run"/>
<target name="test-core-cppunit" depends="test-init, test-category, call-test-cppunit"/>
<target name="test-core" depends="test-core-java, test-core-cppunit"/>
<!-- ====================================================== -->
<!-- Run optional third-party tool targets -->
<!-- ====================================================== -->
<!-- clover code coverage -->
<target name="clover" depends="clover.setup, clover.info"
description="Instrument the Unit tests using Clover. Requires a Clover license and CLOVER_HOME environment variable set appropriately. To use, specify -Drun.clover=true on the command line."/>
<target name="clover.setup" if="clover.enabled">
<taskdef resource="cloverlib.xml" classpath="${clover.jar}"/>
<mkdir dir="${clover.db.dir}"/>
<clover-setup initString="${clover.db.dir}/zookeeper_coverage.db">
<fileset dir="${java.src.dir}"
includes="org/apache/zookeeper/**/*"
excludes="org/apache/zookeeper/version/**/*"/>
</clover-setup>
</target>
<target name="clover.info" if="run.clover" unless="clover.present">
<echo>
Clover not found. Code coverage reports disabled.
</echo>
</target>
<target name="clover.check">
<fail unless="clover.present">
##################################################################
Clover not found.
Please make sure clover.jar is in ANT_HOME/lib, or made available
to Ant using other mechanisms like -lib or CLASSPATH.
##################################################################
</fail>
</target>
<target name="generate-clover-reports" depends="clover.check, clover">
<mkdir dir="${clover.report.dir}"/>
<clover-report>
<current outfile="${clover.report.dir}" title="${final.name}">
<format type="html"/>
</current>
</clover-report>
<clover-report>
<current outfile="${clover.report.dir}/clover.xml" title="${final.name}">
<format type="xml"/>
</current>
</clover-report>
</target>
<!-- Run with 'ant -Dfindbugs.home="path to Findbugs directory" findbugs -->
<property name="findbugs.home" value="" />
<target name="findbugs" depends="check-for-findbugs, jar" if="findbugs.present">
<property name="findbugs.out.dir" value="${test.build.dir}/findbugs" />
<property name="findbugs.exclude.file" value="${config.dir}/findbugsExcludeFile.xml" />
<property name="findbugs.report.htmlfile" value="${findbugs.out.dir}/zookeeper-findbugs-report.html" />
<property name="findbugs.report.xmlfile" value="${findbugs.out.dir}/zookeeper-findbugs-report.xml" />
<taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"
classpath="${findbugs.home}/lib/findbugs-ant.jar" />
<mkdir dir="${findbugs.out.dir}" />
<findbugs home="${findbugs.home}" output="xml:withMessages" excludeFilter="${findbugs.exclude.file}"
outputFile="${findbugs.report.xmlfile}" effort="max" jvmargs="-Xmx512M">
<auxClasspath path="${lib.dir}/log4j-1.2.15.jar" />
<sourcePath path="${java.src.dir}" />
<class location="${basedir}/${jar.name}" />
</findbugs>
<xslt style="${findbugs.home}/src/xsl/default.xsl" in="${findbugs.report.xmlfile}"
out="${findbugs.report.htmlfile}" />
</target>
<target name="check-for-findbugs">
<available property="findbugs.present" file="${findbugs.home}/lib/findbugs.jar" />
</target>
<!-- Code coverage -->
<target name="cobertura-instrument" depends="compile-test">
<taskdef resource="tasks.properties">
<classpath>
<pathelement path="${lib.dir}/cobertura/cobertura.jar" />
<fileset dir="${lib.dir}/cobertura/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
<cobertura-instrument todir="${build.dir}/cobertura">
<fileset dir="${build.classes}">
<include name="org/apache/zookeeper/**/*.class"/>
</fileset>
</cobertura-instrument>
</target>
<target name="cobertura-test" depends="test-init,cobertura-instrument">
<junit showoutput="${test.output}" printsummary="yes" haltonfailure="no" fork="yes"
maxmemory="${test.junit.maxmem}" dir="${basedir}" timeout="${test.timeout}"
errorProperty="tests.failed" failureProperty="tests.failed">
<sysproperty key="build.test.dir" value="${test.tmp.dir}" />
<sysproperty key="test.data.dir" value="${test.data.dir}" />
<sysproperty key="log4j.configuration"
value="file:${basedir}/conf/log4j.properties" />
<classpath>
<pathelement path="${build.dir}/cobertura" />
<pathelement path="${lib.dir}/cobertura/cobertura.jar" />
<fileset dir="${lib.dir}/cobertura/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
</classpath>
<classpath>
<pathelement path="${build.testclasses}" />
</classpath>
<classpath refid="test.classpath"/>
<classpath>
<pathelement path="${build.classes}" />
</classpath>
<formatter type="${test.junit.output.format}" />
<batchtest todir="${test.log.dir}" unless="testcase">
<fileset dir="${test.src.dir}"
includes="**/*Test.java"/>
</batchtest>
<batchtest todir="${test.log.dir}" if="testcase">
<fileset dir="${test.src.dir}" includes="**/${testcase}.java"/>
</batchtest>
</junit>
<fail if="tests.failed">Tests failed!</fail>
</target>
<target name="cobertura-report" depends="cobertura-test">
<cobertura-report format="${test.cobertura.output.format}"
destdir="${coveragereport.dir}" >
<fileset dir="${java.src.dir}">
<include name="**/*.java" />
</fileset>
<fileset dir="${src_generated.dir}">
<include name="**/*.java" />
</fileset>
</cobertura-report>
</target>
<target name="checkstyle" depends="checkstyle.check, set-checkstyle-classpath" if="checkstyle.home"
description="Run optional third-party tool targets">
<taskdef resource="checkstyletask.properties">
<classpath refid="checkstyle-classpath"/>
</taskdef>
<mkdir dir="${test.build.dir}"/>
<checkstyle config="${test.src.dir}/checkstyle.xml" failOnViolation="false">
<fileset dir="${src.dir}/java" includes="**/*.java" excludes="**/generated/**"/>
<formatter type="xml" toFile="${test.build.dir}/checkstyle-errors.xml"/>
</checkstyle>
<xslt style="${test.src.dir}/checkstyle-noframes-sorted.xsl" in="${test.build.dir}/checkstyle-errors.xml"
out="${test.build.dir}/checkstyle-errors.html"/>
</target>
<target name="checkstyle.check" unless="checkstyle.home">
<fail message="'checkstyle.home' is not defined. Please pass -Dcheckstyle.home=&lt;base of checkstyle installation&gt;
to Ant on the command-line." />
</target>
<target name="set-checkstyle-classpath">
<path id="checkstyle-classpath">
<fileset dir="${checkstyle.home}">
<include name="**/*.jar"/>
</fileset>
</path>
</target>
<!-- ================================================================== -->
<!-- Perform audit activities for the release -->
<!-- ================================================================== -->
<target name="get-rats" depends="package" description="Downloads the release audit tool">
<get src="${rats_url}" dest="${lib.dir}/rats.jar" usetimestamp="false" />
</target>
<target name="releaseaudit" depends="get-rats" description="Release Audit activities">
<java classname="${rat.reporting.classname}" fork="true" classpath="${lib.dir}/rats.jar">
<arg value="${build.dir}/${final.name}"/>
</java>
</target>
<target name="findbugs.check" depends="check-for-findbugs" unless="findbugs.present">
<fail message="'findbugs.home' is not defined. Please pass -Dfindbugs.home=&lt;base of Findbugs installation&gt;
to Ant on the command-line." />
</target>
<target name="patch.check" unless="patch.file">
<fail message="'patch.file' is not defined. Please pass -Dpatch.file=&lt;location of patch file&gt;
to Ant on the command-line." />
</target>
<target name="test-patch" depends="patch.check,findbugs.check,forrest.check">
<exec executable="bash" failonerror="true">
<arg value="${test_patch_sh}"/>
<arg value="DEVELOPER"/>
<arg value="${patch.file}"/>
<arg value="${scratch.dir}"/>
<arg value="${svn.cmd}"/>
<arg value="${grep.cmd}"/>
<arg value="${patch.cmd}"/>
<arg value="${findbugs.home}"/>
<arg value="${forrest.home}"/>
<arg value="${basedir}"/>
<arg value="${java5.home}"/>
<arg value="${ant.project.name}"/>
</exec>
</target>
<target name="hudson-test-patch" depends="findbugs.check,forrest.check">
<exec executable="bash" failonerror="true">
<arg value="${test_patch_sh}"/>
<arg value="HUDSON"/>
<arg value="${scratch.dir}"/>
<arg value="${support.dir}"/>
<arg value="${ps.cmd}"/>
<arg value="${wget.cmd}"/>
<arg value="${jiracli.cmd}"/>
<arg value="${svn.cmd}"/>
<arg value="${grep.cmd}"/>
<arg value="${patch.cmd}"/>
<arg value="${findbugs.home}"/>
<arg value="${forrest.home}"/>
<arg value="${eclipse.home}"/>
<arg value="${python.home}"/>
<arg value="${basedir}"/>
<arg value="${trigger.url}"/>
<arg value="${jira.passwd}"/>
<arg value="${java5.home}"/>
<arg value="${curl.cmd}"/>
<arg value="${defect}"/>
<arg value="${ant.project.name}"/>
</exec>
</target>
<target name="get-jdiff" description="download jdiff and its dependencies">
<get src="${jdiff.download.url}" dest="${jdiff.jar}" usetimestamp="true"/>
<get src="${xerces.download.url}" dest="${xerces.jar}" usetimestamp="true"/>
</target>
<target name="api-xml" depends="get-jdiff, javadoc, write-null">
<javadoc>
<doclet name="jdiff.JDiff"
path="${jdiff.jar}:${xerces.jar}">
<param name="-apidir" value="${jdiff.xml.dir}"/>
<param name="-apiname" value="${name} ${version}"/>
</doclet>
<packageset dir="${java.src.dir}">
<include name="org/apache/zookeeper"/>
<exclude name="org/apache/jute"/>
</packageset>
<classpath>
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
<pathelement path="${build.classes}" />
</classpath>
</javadoc>
</target>
<target name="write-null">
<exec executable="touch">
<arg value="${jdiff.home}/Null.java"/>
</exec>
</target>
<target name="api-report" depends="api-xml">
<mkdir dir="${jdiff.build.dir}"/>
<javadoc sourcepath="${java.src.dir}"
destdir="${jdiff.build.dir}"
excludepackagenames="org.apache.jute"
sourceFiles="${jdiff.home}/Null.java">
<doclet name="jdiff.JDiff" path="${jdiff.jar}:${xerces.jar}">
<param name="-oldapi" value="${name} ${jdiff.stable}"/>
<param name="-newapi" value="${name} ${version}"/>
<param name="-oldapidir" value="${jdiff.xml.dir}"/>
<param name="-newapidir" value="${jdiff.xml.dir}"/>
<param name="-javadocold" value="${jdiff.stable.javadoc}"/>
<param name="-javadocnew" value="../../api/"/>
<param name="-stats"/>
</doclet>
<classpath>
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
<pathelement path="${build.classes}" />
</classpath>
</javadoc>
</target>
</project>