<?xml version="1.0"?>
<!--========================================================
$Id: build.xml 5175 2006-11-19 01:20:21Z djgregor $
Build file for OpenNMS
Refactoring notes:
ELB - All targets that should be displayed require a description attribute.
ELB - All targets that should not be displayed require it's absence.
======================================================== -->
<project name="opennms" default="usage" basedir=".">
<description>
Build file for OpenNMS.
OpenNMS is a network monitoring system implemented in Java.
For more information consult the README file included in
your distribution.
</description>
<!-- overrride with site-specific settings (first proprety set wins) -->
<property file="build.properties"/>
<!-- versioning options -->
<property name="product.version" value="1.2.9"/>
<property name="product.release" value="0"/>
<property name="product.snapshot" value="true"/>
<property name="product.fullversion"
value="${product.version}-${product.release}"/>
<!-- build options -->
<!-- Warning: there are some internal ant properties named build.* -->
<!-- Note: build.dir needs to be a path relative to ${basedir}, and
the same thing might be the case for some properties that
contain build.dir -->
<property name="relative.build.dir" value="work"/>
<property name="build.dir" value="${basedir}/${relative.build.dir}"/>
<property name="build.castor.source.dir" value="${build.dir}/castor"/>
<property name="build.sablecc.source.dir" value="${build.dir}/sablecc"/>
<property name="build.docs.dir" value="${build.dir}/docs"/>
<property name="build.rpm.dir" value="${build.dir}/rpm"/>
<property name="build.filter.docs.dir" value="${build.dir}/docs.filter"/>
<property name="build.api.dir" value="${build.docs.dir}/javadoc"/>
<property name="build.classes.dir" value="${build.dir}/opennms/classes"/>
<property name="build.tests.dir" value="${build.dir}/opennms/tests"/>
<property name="build.jar.dir" value="${build.dir}/jar"/>
<property name="build.jicmp.dir" value="${build.dir}/jicmp"/>
<property name="build.jrrd.dir" value="${build.dir}/jrrd"/>
<property name="build.postgresql.dir" value="${build.dir}/postgresql"/>
<property name="build.release.dir" value="${build.dir}/releases"/>
<property name="build.postgresql.include.dir"
value="/usr/include/pgsql/server"/>
<property name="build.rrdtool.include.dir" value="/usr/include"/>
<property name="build.rrdtool.lib.dir" value="/usr/lib"/>
<property name="build.rrdtool.bin" value="/usr/bin/rrdtool"/>
<property name="database.name" value="opennms"/>
<property name="database.user" value="opennms"/>
<property name="database.password" value="opennms"/>
<!--compiler options-->
<property name="compiler.debug" value="true"/>
<property name="compiler.optimize" value="true"/>
<property name="compiler.verbose" value="false"/>
<!-- XXX This should be true, but will have to set it false for now -->
<property name="compiler.deprecation" value="false"/>
<!--source directories -->
<property name="source.dir" value="${basedir}/src"/>
<property name="core.source.dir" value="${source.dir}/core"/>
<property name="joesnmp.source.dir" value="${source.dir}/joesnmp"/>
<property name="postgresql.source.dir" value="${source.dir}/postgresql"/>
<property name="report.source.dir" value="${source.dir}/report"/>
<property name="services.source.dir" value="${source.dir}/services"/>
<property name="install.source.dir" value="${source.dir}/install"/>
<property name="web.source.dir" value="${source.dir}/web/src"/>
<!-- test results directory -->
<property name="test.xml.dir" value="${build.dir}/test-results" />
<property name="mock.logLevel" value="WARN" />
<property name="mock.debug" value="false" />
<property name="mock.rundbtests" value="false" />
<!-- docs source directory -->
<property name="docs.source.dir" value="${basedir}/docs"/>
<!--library directories-->
<!-- packaged libraries that are included in binary distributions -->
<property name="packaged.lib.dir" value="${basedir}/lib"/>
<!-- development libraries that are not included in binary distributions -->
<property name="dev.lib.dir" value="${basedir}/devlib"/>
<!-- castor specific -->
<property name="castor.xsd.dir" value="${basedir}/schema/xsd"/>
<property name="castor.config.dir"
value="${services.source.dir}/org/opennms/netmgt/config"/>
<property name="castor.typefactory" value="j2"/>
<!-- sablecc specific -->
<property name="sablecc.filter.dir" value="org/opennms/netmgt/filter"/>
<!-- relative directories for use in filesets and for install.dir -->
<property name="relative.install.dir" value="dist"/>
<!-- dist options and archive names -->
<property name="dist.source.archive.prefix"
value="${ant.project.name}-${product.version}-src"/>
<property name="dist.docs.archive.prefix"
value="${ant.project.name}-${product.version}-docs"/>
<!-- install directories -->
<!-- install.dir: the top directory into which to install OpenNMS -->
<property name="install.dir" value="${basedir}/${relative.install.dir}"/>
<property name="install.init.dir" value="${install.dir}/bin"/>
<property name="install.webapps.dir" value="${install.dir}/webapps" />
<property name="install.servlet.dir"
value="${install.webapps.dir}/opennms"/>
<property name="install.share.dir" value="${install.dir}/share"/>
<property name="install.bin.dir" value="${install.dir}/bin"/>
<property name="install.postgresql.dir" value="${install.dir}/lib"/>
<property name="install.contrib.dir" value="${install.dir}/contrib"/>
<property name="install.etc.dir" value="${install.dir}/etc"/>
<property name="install.logs.dir" value="${install.dir}/logs"/>
<property name="install.pid.file" value="${install.dir}/logs/opennms.pid"/>
<!-- install.prefix: a prefix used for installation in or chroot -->
<property name="install.prefix" value=""/>
<property name="install.postgresql.service" value="postgresql"/>
<property name="install.database.name" value="${database.name}"/>
<property name="install.database.user" value="${database.user}"/>
<property name="install.database.password" value="${database.password}"/>
<property name="install.database.driver" value="org.postgresql.Driver"/>
<!-- XXX why is compatible=7.1 being used?
It's not added here... see etc/opennms-database.xml and
src/web/etc/web.xml where @[email protected] is used. -->
<property name="install.database.url"
value="jdbc:postgresql://localhost:5432/"/>
<property name="install.database.bindir"
value="/usr/bin"/>
<property name="install.rrdtool.bin" value="${build.rrdtool.bin}"/>
<property name="install.perl.bin" value="/usr/bin/perl"/>
<!-- rpm specific -->
<property name="rpm.install.dir" value="/opt/OpenNMS"/>
<property name="rpm.build.executable" value="rpmbuild"/>
<property name="rpm.build.docs" value="1"/>
<property name="rpm.sign" value="false"/>
<property name="rpm.buildtests" value="false"/>
<property name="rpm.database.name" value="opennms"/>
<property name="rpm.database.password" value="opennms"/>
<property name="rpm.database.user" value="opennms"/>
<property name="rpm.additional.args" value=""/>
<!-- jars that are referenced in multiple places -->
<property name="postgresql.jar" value="pg74.215.jdbc3.jar" />
<!-- paths -->
<path id="sources.java.path">
<pathelement path="${build.castor.source.dir}"/>
<pathelement path="${build.sablecc.source.dir}"/>
<pathelement path="${core.source.dir}"/>
<pathelement path="${joesnmp.source.dir}"/>
<pathelement path="${services.source.dir}"/>
<pathelement path="${web.source.dir}"/>
<pathelement path="${report.source.dir}"/>
<pathelement path="${install.source.dir}"/>
</path>
<!-- Classpath reference for <javac/> and <javadoc/> -->
<path id="libraries.java.path">
<pathelement path="${packaged.lib.dir}/log4j.jar"/>
<pathelement path="${packaged.lib.dir}/regexp120.jar"/>
<pathelement path="${packaged.lib.dir}/servlet.jar"/>
<pathelement path="${packaged.lib.dir}/ldap.jar"/>
<pathelement path="${packaged.lib.dir}/catalina.jar"/>
<pathelement path="${packaged.lib.dir}/castor-0.9.3.9.jar"/>
<pathelement path="${packaged.lib.dir}/fop0205.jar"/>
<pathelement path="${packaged.lib.dir}/avalon-framework-cvs-20020806.jar"/>
<pathelement path="${packaged.lib.dir}/batik.jar"/>
<pathelement path="${packaged.lib.dir}/mx4j-3.0.1.jar"/>
<pathelement path="${packaged.lib.dir}/jdhcp.jar"/>
<pathelement path="${packaged.lib.dir}/jcifs.jar"/>
<pathelement path="${packaged.lib.dir}/bsf220.jar"/>
<pathelement path="${packaged.lib.dir}/xerces201.jar"/>
<pathelement path="${packaged.lib.dir}/xmlrpc-1.2-b1.jar"/>
<pathelement path="${packaged.lib.dir}/jrobin-1.4.0.jar"/>
<pathelement path="${packaged.lib.dir}/mailapi.jar"/>
<pathelement path="${packaged.lib.dir}/smtp.jar"/>
<pathelement path="${packaged.lib.dir}/jradius-client.jar"/>
<pathelement path="${packaged.lib.dir}/smack.jar"/>
<pathelement path="${packaged.lib.dir}/smackx.jar"/>
<!-- <pathelement path="${packaged.lib.dir}/imap.jar"/> -->
<!-- <pathelement path="${packaged.lib.dir}/pop3.jar"/> -->
<pathelement path="${packaged.lib.dir}/activation.jar"/>
<pathelement path="${packaged.lib.dir}/jmta.jar"/>
<pathelement path="${packaged.lib.dir}/c3p0-0.9.0-pre5.jar"/>
<pathelement path="/System/Library/Java"/>
</path>
<!-- The jars listed for Class-Path in the MANIFEST.MF for the installer's
JAR file -->
<path id="install.manifest.jars">
<pathelement path="${packaged.lib.dir}/${postgresql.jar}"/>
</path>
<pathconvert refid="install.manifest.jars" pathsep=" "
property="install.manifest.classes">
<map from="${packaged.lib.dir}/" to=""/>
</pathconvert>
<!-- Libraries that are linked into Tomcat's server/lib directory from
WEB-INF/lib by the installer or by the RPM. These also need to be
in web.jars or one of the opennms_*.jar files so that the libraries
make it into WEB-INF/lib. See the "install.servlet" target to see
how things are copied into WEB-INF/lib. -->
<path id="tomcatlib.jars.path">
<pathelement path="${packaged.lib.dir}/log4j.jar"/>
<pathelement path="${packaged.lib.dir}/castor-0.9.3.9.jar"/>
<pathelement path="${packaged.lib.dir}/castor-0.9.3.9-xml.jar"/>
<pathelement path="${build.jar.dir}/opennms_core.jar"/>
<pathelement path="${build.jar.dir}/opennms_services.jar"/>
<pathelement path="${build.jar.dir}/opennms_web.jar"/>
<!-- These are the libraries that were in opennms.spec.in:
castor-0.9.3.9.jar /
log4j.jar /
opennms_common.jar /
opennms_core.jar /
opennms_services.jar /
opennms_web.jar /
-->
</path>
<pathconvert targetos="unix" refid="tomcatlib.jars.path"
property="install.tomcat.serverlibs">
<map from="${packaged.lib.dir}/" to=""/>
<map from="${build.jar.dir}/" to=""/>
</pathconvert>
<!-- patterns and sets -->
<!-- XXX not used -->
<!--
<patternset id="not.run">
<exclude name="nightly-build.pl"/>
<exclude name="*.bat"/>
</patternset>
-->
<!-- Files in ${packaged.lib.dir} that are copied into ${install.dir}/lib.
Note: everything in ${build.jar.dir} is also copied. -->
<patternset id="lib.jars">
<include name="*.jar" />
<exclude name="ant*.jar" />
<exclude name="fop0170.jar" />
<exclude name="fop0203.jar" />
<exclude name="avalon-framework-4.0.jar" />
<exclude name="jakarta-regexp*.jar" />
<exclude name="pylib*.jar" />
<exclude name="sablecc*.jar" />
</patternset>
<!-- Files in ${packaged.lib.dir} that are copied into
${install.servlet.dir}/WEB-INF/lib.
Note: opennms_*.jar from ${build.jar.dir} is also copied. -->
<patternset id="web.jars">
<include name="castor*.jar" />
<include name="fop0205.jar" />
<include name="jms*.jar" />
<include name="log4j*.jar" />
<include name="${postgresql.jar}" />
<include name="regexp*.jar" />
<include name="w3c*.jar" />
<!--- Remove this for 1.4 since it is included in the JVM
<include name="xalan231.jar" />
-->
<include name="avalon-framework-cvs-20020806.jar" />
<include name="logkit-1.0.jar" />
<include name="batik.jar" />
<include name="jcifs.jar" />
<include name="ldap.jar" />
<include name="jrobin*.jar" />
<include name="activation.jar" />
<include name="imap.jar" />
<include name="jmta.jar" />
<include name="mailapi.jar" />
<include name="pop3.jar" />
<include name="smtp.jar" />
<include name="c3p0-0.9.0-pre5.jar"/>
</patternset>
<!-- The includes in this patternset need to match the directories in
the <fop> tasks for the pdf.docs target, along with the common
directory. -->
<patternset id="doc.dirs">
<include name="common*"/>
<include name="**/CVS)/<filter token="/1" value="${/1}"//>/'
Get rid of everything after "awk" to get a list of which files have
which filtering tokens.
-->
<filter token="ant.project.name" value="${ant.project.name}"/>
<filter token="build.soext" value="${build.soext}"/>
<filter token="root.source" value="${basedir}"/>
<filter token="install.database.bindir"
value="${install.database.bindir}"/>
<filter token="install.database.driver"
value="${install.database.driver}"/>
<filter token="install.database.name" value="${install.database.name}"/>
<filter token="install.database.password"
value="${install.database.password}"/>
<filter token="install.database.url" value="${install.database.url}"/>
<filter token="install.database.user" value="${install.database.user}"/>
<filter token="install.perl.bin" value="${install.perl.bin}"/>
<filter token="install.postgresql.service"
value="${install.postgresql.service}"/>
<filter token="install.rrdtool.bin" value="${install.rrdtool.bin}"/>
<filter token="install.tomcat.serverlibs"
value="${install.tomcat.serverlibs}"/>
<filter token="product.fullversion.stamp"
value="${product.fullversion.stamp}"/>
<filter token="product.release" value="${product.release}"/>
<filter token="product.release.stamp" value="${product.release.stamp}"/>
<filter token="product.version" value="${product.version}"/>
<filter token="install.etc.dir" value="${install.etc.dir}"/>
<filter token="install.bin.dir" value="${install.bin.dir}"/>
<filter token="install.init.dir" value="${install.init.dir}"/>
<filter token="install.logs.dir" value="${install.logs.dir}"/>
<filter token="install.manifest.classes"
value="${install.manifest.classes}"/>
<filter token="install.pid.file" value="${install.pid.file}"/>
<filter token="install.postgresql.dir" value="${install.postgresql.dir}"/>
<filter token="install.webapps.dir" value="${install.webapps.dir}"/>
<filter token="install.servlet.dir" value="${install.servlet.dir}"/>
<filter token="install.share.dir" value="${install.share.dir}"/>
<filter token="install.dir" value="${install.dir}"/>
<filter token="rpm.buildtests" value="${rpm.buildtests}"/>
<filter token="rpm.database.name" value="${rpm.database.name}"/>
<filter token="rpm.database.password" value="${rpm.database.password}"/>
<filter token="rpm.database.user" value="${rpm.database.user}"/>
<filter token="rpm.install.dir" value="${rpm.install.dir}"/>
<filter token="rpm.platform" value="${rpm.platform}"/>
<!-- prep wrapup -->
<property name="prep.done" value="true"/>
</target>
<target name="platform.check" depends="platform.init, platform.darwin,
platform.freebsd, platform.linux,
platform.sun, platform.default"/>
<target name="platform.init">
<condition property="platform.darwin">
<os name="Mac OS X"/>
</condition>
<condition property="platform.freebsd">
<os name="FreeBSD"/>
</condition>
<condition property="platform.linux">
<os name="Linux"/>
</condition>
<condition property="platform.sun">
<os name="SunOS"/>
</condition>
</target>
<target name="platform.darwin" if="platform.darwin">
<property name="build.platform.define" value="__DARWIN__"/>
<property name="build.soext" value="dylib"/>
<property name="build.jniext" value="jnilib"/>
<property name="build.java.jnimd.dir" value=""/>
</target>
<target name="platform.freebsd" if="platform.freebsd">
<property name="build.platform.define" value="__FreeBSD__"/>
<property name="build.soext" value="so"/>
<property name="build.jniext" value="so"/>
<property name="build.java.jnimd.dir" value="/freebsd"/>
</target>
<target name="platform.linux" if="platform.linux">
<property name="build.platform.define" value="__LINUX__"/>
<property name="build.soext" value="so"/>
<property name="build.jniext" value="so"/>
<property name="build.java.jnimd.dir" value="/linux"/>
</target>
<target name="platform.sun" if="platform.sun">
<property name="build.platform.define" value="__SOLARIS__"/>
<property name="build.soext" value="so"/>
<property name="build.jniext" value="so"/>
<property name="build.java.jnimd.dir" value="/solaris"/>
<property name="build.jrrd.linker.arg" value="-R${build.rrdtool.lib.dir}"/>
</target>
<target name="platform.default" unless="build.platform.define">
<fail>
Your operating system is not supported by the build system. See the
platform.* targets in the build.xml file for details on supported
platforms. You can try to work around this error by modifying an
existing platform or creating your own (and don't forget to add it
to the depends list in the platform.check target).
</fail>
</target>
<target name="java.check">
<condition property="java.versionokay">
<or>
<contains string="${java.vm.version}" substring="1.4."/>
<contains string="${java.vm.version}" substring="1.5."/>
</or>
</condition>
<fail unless="java.versionokay">
Your Java version (${java.vm.version}) is not supported. The
build system is currently designed and tested to work with Java
versions 1.4 and 1.5. You can try to work around this error by
modifying the java.check target in the build.xml file.
</fail>
</target>
<target name="compile.check" depends="prep">
<condition property="compile.check.postgresql.include">
<available file="${build.postgresql.include.dir}/postgres.h"/>
</condition>
<fail unless="compile.check.postgresql.include">
Could not find postgres.h include file in ${build.postgresql.include.dir}.
Please make sure that you have the PostgreSQL development files installed
or, if they are installed in a non-standard location, you may need to
set the build.postgresql.include.dir property to the directory that
contains postgres.h. See README.build for details on setting properties.
</fail>
<condition property="compile.check.rrdtool.include">
<available file="${build.rrdtool.include.dir}/rrd.h"/>
</condition>
<fail unless="compile.check.rrdtool.include">
Could not find rrd.h include file in ${build.rrdtool.include.dir}.
Please make sure that you have the rrdtool development files installed
or, if they are installed in a non-standard location, you may need
to set the build.rrdtool.include.dir property to the directory that
contains rrd.h. See README.build for details on setting properties.
</fail>
<condition property="compile.check.rrdtool.lib">
<or>
<available file="${build.rrdtool.lib.dir}/librrd.a"/>
<available file="${build.rrdtool.lib.dir}/librrd.so"/>
</or>
</condition>
<fail unless="compile.check.rrdtool.lib">
Could not find librrd.a or librrd.so library in ${build.rrdtool.lib.dir}.
Please make sure that you have the rrdtool development files installed
or, if they are installed in a non-standard location, you may need
to set the build.rrdtool.lib.dir property to the directory that
contains librrd.a or librrd.so. See README.build for details on setting
properties.
</fail>
<available property="apple.apis.present" classname="com.apple.cocoa.foundation.NSArray" classpathref="libraries.java.path" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" />
</target>
<target name="info" depends="prep"
description="Show information about this build instance">
<echo>
=== Java ===
JVM Version = ${java.vm.vendor} ${java.vm.name} ${java.vm.version}
Java Home = ${java.home}
CLASSPATH = ${java.class.path}
Ant Version = ${ant.version}
Ant project name = ${ant.project.name}
Ant project base directory = ${basedir}
=== System ===
OS Name = ${os.name}
OS Version = ${os.version}
User = ${user.name}
Home Directory = ${user.home}
OpenNMS Version = ${product.fullversion.stamp}
Compilation Defines = ${build.platform.define}
=== Build/Install Tools ===
PostgreSQL Include Arguments = ${build.postgresql.include.dir}
RRDTool Include Arguments = ${build.rrdtool.include.dir}
RRDTool Library Arguments = ${build.rrdtool.lib.dir}
=== Build Directories ===
Build Working Directory = ${build.dir}
Class Working Directory = ${build.classes.dir}
Release Tarball Directory = ${build.release.dir}
=== Install Directories ===
Installation Prefix = ${install.prefix}
Installation Directory = ${install.dir}
init.d Directory = ${install.init.dir}
PostgreSQL Library Directory = ${install.postgresql.dir}
Shared Files Directory = ${install.share.dir}
Servlet Directory = ${install.servlet.dir}
=== RPM Details ===
RPM Platform = ${rpm.platform}
RPM Install Directory = ${rpm.install.dir}
</echo>
</target>
<!-- USAGE targets -->
<target name="usage" description="How to use this build file">
<java fork="true" dir="${basedir}" jar="${dev.lib.dir}/ant-launcher.jar">
<arg value="-projecthelp"/>
</java>
</target>
<!-- "meta" targets -->
<target name="check" depends="java.check, platform.check, compile.check"
description="check prerequisites for build"/>
<target name="install"
depends="install.lib, install.servlet, install.init, install.etc,
install.bin, install.logs, install.share, install.contrib"
description="build "all", and install"/>
<target name="all" depends="compile, jar"
description="build everything (except documentation)"/>
<!-- CLEAN targets -->
<target name="clean" depends="prep, clean.dist">
<delete dir="${build.dir}"/>
</target>
<!-- archive/package targets -->
<target name="rpm" depends="prep, rpm.check, all, test, rpm.prepare"
description="Build an RPM package">
<exec dir="${build.rpm.dir}" executable="${rpm.build.executable}"
failοnerrοr="true">
<arg value="-bb"/>
<arg value="SPECS/opennms.spec"/>
<arg value="--define"/>
<arg value="platform ${rpm.platform}"/>
<arg value="--define"/>
<arg value="_topdir ${build.rpm.dir}"/>
<arg value="--define"/>
<arg value="_tmppath ${build.rpm.dir}/tmp"/>
<arg value="--define"/>
<arg value="snapshot ${product.snapshot}"/>
<arg value="--define"/>
<arg value="date ${DSTAMP}"/>
<arg value="--define"/>
<arg value="standalone 0"/>
<arg value="--define"/>
<arg value="builddocs ${rpm.build.docs}"/>
<arg line="${rpm.sign.arg}"/>
<arg line="${rpm.additional.args}"/>
</exec>
</target>
<target name="srpm" depends="prep, rpm.check, release.source.tar, rpm.prepare"
description="Build an RPM and a source RPM package">
<copy todir="${build.rpm.dir}/SOURCES"
file="${build.release.dir}/${release.source.archive.prefix}.tar.gz"/>
<echo message="building RPM for OpenNMS version ${product.fullversion.stamp}..."/>
<exec dir="${build.rpm.dir}" executable="${rpm.build.executable}"
failοnerrοr="true">
<arg value="-ba"/>
<arg value="SPECS/opennms.spec"/>
<arg value="--define"/>
<arg value="platform ${rpm.platform}"/>
<arg value="--define"/>
<arg value="_topdir ${build.rpm.dir}"/>
<arg value="--define"/>
<arg value="_tmppath ${build.rpm.dir}/tmp"/>
<arg value="--define"/>
<arg value="standalone 1"/>
<arg value="--define"/>
<arg value="builddocs ${rpm.build.docs}"/>
<arg line="${rpm.sign.arg}"/>
<arg line="${rpm.additional.args}"/>
</exec>
</target>
<target name="rpm.prepare" depends="prep">
<mkdir dir="${build.rpm.dir}/BUILD"/>
<mkdir dir="${build.rpm.dir}/RPMS/i386"/>
<mkdir dir="${build.rpm.dir}/RPMS/i486"/>
<mkdir dir="${build.rpm.dir}/RPMS/i586"/>
<mkdir dir="${build.rpm.dir}/RPMS/i686"/>
<mkdir dir="${build.rpm.dir}/RPMS/athlon"/>
<mkdir dir="${build.rpm.dir}/RPMS/k6"/>
<mkdir dir="${build.rpm.dir}/RPMS/noarch"/>
<mkdir dir="${build.rpm.dir}/SOURCES"/>
<mkdir dir="${build.rpm.dir}/SPECS"/>
<mkdir dir="${build.rpm.dir}/SRPMS"/>
<mkdir dir="${build.rpm.dir}/tmp"/>
<copy filtering="yes"
file="tools/packages/opennms/opennms.spec.in"
tofile="${build.rpm.dir}/SPECS/opennms.spec"
overwrite="${filter.overwrite}" />
<copy todir="${build.rpm.dir}/SOURCES">
<fileset dir="tools/packages/opennms">
<include name="***.patch.gz"/>
<include name="***"/>
<exclude name="${relative.build.dir}*.swp"/>
</fileset>
</copy>
</target>
<target name="release.source.prep">
<mkdir dir="${build.release.dir}"/>
</target>
<target name="release.source.tar" depends="release.source.copy,
release.source.prep">
<tar tarfile="${build.release.dir}/${release.source.archive.prefix}.tar.gz"
basedir="${build.dir}" longfile="gnu" compression="gzip"
includes="${release.source.dir}/"/>
</target>
<target name="release.source.zip" depends="release.source.copy,
release.source.prep">
<zip zipfile="${build.release.dir}/${release.source.archive.prefix}.zip"
basedir="${build.dir}"
includes="${release.source.dir}/"/>
</target>
<!-- XXX This needs to be reworked and the generated files need to be put
somewhere under ${build.dir} -->
<target name="release.prepare.binary" depends="prep">
<mkdir dir="${build.dir}/${release.binary.dir}"/>
<antcall target="install" inheritAll="false">
<param name="install.dir" value="${release.install.dir}"/>
<param name="install.prefix" value="${build.dir}"/>
</antcall>
<move todir="${build.dir}/${release.binary.dir}">
<fileset dir="${build.dir}${release.install.dir}" includes="***.sh"/>
<include name="***"/>
<exclude name="***.jpg"/>
<exclude name="***.gif"/>
<include name="***.png"/>
</fileset>
</copy>
</target>
<target name="copy.contrib" depends="prep">
<mkdir dir="${build.dir}/contrib"/>
<copy todir="${build.dir}/contrib">
<fileset dir="contrib">
<include name="**installer.properties"/>
<include name="**/MANIFEST.MF"/>
</fileset>
</copy>
</target>
<!-- SOURCES targets -->
<!-- This target should be used to generate all source code
That does not already exist in CVS -->
<target name="sources"
depends="sablecc.filter.sources.generate, castor.sources.generate"
description="Update Java source code generated by Castor and Sablecc"/>
<target name="sablecc.filter.sources.generate">
<ant antfile="build-sablecc.xml"/>
</target>
<target name="castor.sources.generate">
<ant antfile="build-castor.xml"/>
</target>
<!-- COMPILE targets -->
<target name="compile" depends="compile.check, java.compile, jicmp.compile,
jrrd.compile, postgresql.compile"
description="compile all code"/>
<target name="java.compile" depends="prep,sources">
<mkdir dir="${build.classes.dir}"/>
<javac destdir="${build.classes.dir}"
debug="${compiler.debug}"
optimize="${compiler.optimize}"
verbose="${compiler.verbose}"
classpathref="libraries.java.path" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow"
deprecation="${compiler.deprecation}">
<src>
<path refid="sources.java.path"/>
</src>
<include name="***Test.java"/>
<exclude name="**/mock*Growl*" unless="apple.apis.present"/>
</javac>
<copy todir="${build.classes.dir}">
<fileset dir="${build.sablecc.source.dir}">
<include name="***.jsp"/>
<classpath>
<path refid="libraries.java.path" />
<path refid="sources.java.path" />
<fileset dir="${dev.lib.dir}">
<include name="***.java"/>
<exclude name="***Test.java"/>
<include name="**/mock*Test.java" />
<exclude name="**/AllTests.java" />
</fileset>
<fileset dir="${source.dir}/install">
<include name="***Test.java" />
</fileset>
</batchtest>
<sysproperty key="mock.logLevel" value="${mock.logLevel}" />
<sysproperty key="mock.debug" value="${mock.debug}" />
<sysproperty key="mock.rundbtests" value="${mock.rundbtests}" />
</junit>
<condition property="continue.build">
<or>
<isset property="ignoreFailedTests" />
<not> <isset property="test.failed" /></not>
</or>
</condition>
<fail unless="continue.build" >
Unit Tests Failed. Check the test results in ${test.xml.dir}.
To ignore failed tests, set the ignoreFailedTests property to true.
See README.build for details on setting properties.
</fail>
</target>
<target name="runTest" depends="prep, java.compile, junit.compile"
description="Run a single unit test class">
<fail unless="test.class">
You need to define the test.class property to indicate which test
to run. See README.build for details on setting properties.
</fail>
<junit errorProperty="test.failed" failureProperty="test.failed">
<classpath>
<path refid="libraries.java.path"/>
<pathelement location="${dev.lib.dir}/junit.jar"/>
<pathelement location="${packaged.lib.dir}/hsqldb.jar"/>
<pathelement location="${packaged.lib.dir}/${postgresql.jar}"/>
<pathelement location="${build.classes.dir}" />
<pathelement location="${build.tests.dir}" />
</classpath>
<formatter type="plain" usefile="false" />
<test name="${test.class}"/>
<sysproperty key="mock.logLevel" value="${mock.logLevel}" />
<sysproperty key="mock.debug" value="${mock.debug}" />
<sysproperty key="mock.rundbtests" value="${mock.rundbtests}" />
</junit>
<condition property="continue.build">
<or>
<isset property="ignoreFailedTests" />
<not> <isset property="test.failed" /></not>
</or>
</condition>
<fail unless="continue.build" >
Unit Tests Failed. Check the test results in ${test.xml.dir}.
To ignore failed tests, set the ignoreFailedTests property to true.
See README.build for details on setting properties.
</fail>
</target>
<!-- JAR targets -->
<target name="jar" depends="opennms_core.jar, opennms_joesnmp.jar,
opennms_web.jar, opennms_common.jar,
opennms_services.jar, opennms_install.jar"
description="create jar files"/>
<target name="jar.copyxml" depends="prep">
<mkdir dir="${build.dir}/opennms/xmlfiles"/>
<copy todir="${build.dir}/opennms/xmlfiles">
<fileset dir="src/services">
<include name="**MANIFEST.MF"/>
</patternset>
</fileset>
</jar>
</target>
<!-- DOCS targets -->
<target name="docs" depends="javadoc.docs, html.docs, pdf.docs"
description="Build javadoc and manuals"/>
<target name="javadoc.docs" depends="prep,sources,javadoc.docs.uptodate"
unless="javadoc.docs.uptodate">
<mkdir dir="${build.api.dir}"/>
<javadoc destdir="${build.api.dir}"
packagenames="HelpFrame.*,ToolTipTree.*,org.opennms.*"
author="true"
version="true"
private="true"
windowtitle="OpenNMS API"
doctitle="OpenNMS API ${product.version}"
header="OpenNMS API ${product.version}"
footer="OpenNMS API ${product.version}"
bottom="Generated by ${user.name} on ${TODAY} ${TSTAMP}."
splitindex="true"
failοnerrοr="true"
maxmemory="128m">
<classpath>
<path refid="libraries.java.path"/>
<pathelement location="${dev.lib.dir}/junit.jar"/>
<pathelement location="${packaged.lib.dir}/hsqldb.jar"/>
</classpath>
<sourcepath>
<path refid="sources.java.path"/>
</sourcepath>
</javadoc>
</target>
<target name="javadoc.docs.uptodate" depends="prep">
<dependset>
<srcfileset dir="${core.source.dir}">
<include name="***.java"/>
</srcfileset>
<srcfileset dir="${postgresql.source.dir}">
<include name="***.java"/>
</srcfileset>
<srcfileset dir="${services.source.dir}">
<include name="***.java"/>
</srcfileset>
<srcfileset dir="${install.source.dir}">
<include name="***.html"/>
<include name="package-list"/>
<include name="stylesheet.css"/>
<include name="resources/inherit.gif"/>
</targetfileset>
</dependset>
<condition property="javadoc.docs.uptodate">
<available file="${build.api.dir}/index.html" type="file"/>
</condition>
</target>
<target name="html.docs" depends="prep,copy.docs,html.docs.uptodate"
unless="html.docs.uptodate">
<mkdir dir="${build.docs.dir}"/>
<style basedir="${build.filter.docs.dir}"
destdir="${build.docs.dir}"
style="${docs.source.dir}/common/html-docbook.xsl"
includes="*/book.xml"/>
</target>
<target name="html.docs.uptodate">
<dependset>
<srcfileset dir="${docs.source.dir}"/>
<targetfileset dir="${build.docs.dir}"/>
</dependset>
<condition property="html.docs.uptodate">
<!-- Magic file: canidate for refactoring -->
<available file="${build.docs.dir}/releasenotes/book.html" type="file"/>
</condition>
</target>
<target name="docs.fot.uptodate" depends="prep,copy.docs">
<uptodate property="fot.is.uptodate">
<srcfiles dir="${build.filter.docs.dir}">
<include name="**/book.xml"/>
<include name="**/bookinfo.xml"/>
<include name="**/preface.xml"/>
<include name="**/chap*.xml"/>
</srcfiles>
<mapper type="regexp" from="^(.*)/[^/]+$$"
to="${build.docs.dir}//1/book.fot"/>
</uptodate>
</target>
<target name="docs.fot" depends="prep,docs.fot.uptodate,copy.docs"
unless="fot.is.uptodate">
<mkdir dir="${build.docs.dir}"/>
<style basedir="${build.filter.docs.dir}"
destdir="${build.docs.dir}"
style="${docs.source.dir}/common/fo-docbook.xsl"
includes="**/book.xml"
classpath="${packaged.lib.dir}/xalan231.jar"
extension=".fot"
/>
</target>
<!-- The directories in the <fop> targets need to match the includes
in the doc.dirs patternset. -->
<target name="pdf.docs" depends="prep, docs.fot">
<fop fofile="${build.docs.dir}/install/book.fot"
outfile="${build.docs.dir}/install/book.pdf"/>
<fop fofile="${build.docs.dir}/releasenotes/book.fot"
outfile="${build.docs.dir}/releasenotes/book.pdf"/>
</target>
<!-- copy web UI JSPs to the webapp directory -->
<target name="install.jsp" depends="prep">
<mkdir dir="${install.prefix}${install.webapps.dir}"/>
<copy todir="${install.prefix}${install.webapps.dir}" filtering="yes"
overwrite="${filter.overwrite}">
<fileset dir="src/web">
<include name="opennms.xml"/>
</fileset>
</copy>
<mkdir dir="${install.prefix}${install.servlet.dir}"/>
<copy todir="${install.prefix}${install.servlet.dir}" filtering="yes"
overwrite="${filter.overwrite}">
<fileset dir="src/web/web">
<include name="***.jar"/>
<exclude name="***.jpg"/>
<exclude name="***.jar"/>
<include name="***.jpg"/>
<include name="***"/>
</fileset>
</copy>
<mkdir dir="${install.prefix}${install.servlet.dir}/WEB-INF/lib"/>
<copy todir="${install.prefix}${install.servlet.dir}/WEB-INF/lib">
<fileset dir="${packaged.lib.dir}">
<patternset refid="web.jars"/>
</fileset>
<fileset dir="${install.prefix}${install.dir}/lib">
<include name="opennms_*.jar" />
</fileset>
</copy>
<mkdir dir="${install.prefix}${install.servlet.dir}/WEB-INF/classes"/>
<exec executable="rm"
dir="${install.prefix}${install.servlet.dir}/WEB-INF/classes"
failοnerrοr="true">
<arg value="-f"/>
<arg value="log4j.properties"/>
</exec>
<exec executable="ln"
dir="${install.prefix}${install.servlet.dir}/WEB-INF/classes"
failοnerrοr="true">
<arg value="-sf"/>
<arg value="${install.etc.dir}/log4j.properties"/>
<arg value="log4j.properties"/>
</exec>
</target>
</project>