blob: 42385e3f53553f15f8bacb3d803477833a2688d4 [file] [log] [blame]
<!--
-
- 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="module">
<import file="common.xml"/>
<map property="module" value="${basedir}" split="${path.separator}">
<globmapper from="${project.root}${file.separator}*" to="*"/>
</map>
<echo message="Running ant for module : ${module}"/>
<property file="${project.root}/build.deps"/>
<property name="module.build" location="${build}/${module}"/>
<property name="module.classes" location="${module.build}/classes"/>
<property name="module.precompiled" location="${module.build}/src"/>
<property name="module.api" location="${module.build}/api"/>
<property name="module.test.classes" location="${module.build}/test/classes"/>
<property name="module.results" location="${build.results}/${module}"/>
<property name="module.failed" location="${module.results}/FAILED"/>
<property name="module.src" location="src/main/java"/>
<property name="module.test.src" location="src/test/java"/>
<property name="module.bin" location="bin"/>
<property name="module.etc" location="etc"/>
<available property="module.test.src.exists" file="${module.test.src}"/>
<available property="module.etc.exists" file="${module.etc}"/>
<available property="module.bin.exists" file="${module.bin}"/>
<map property="module.name" value="${module}">
<filtermapper>
<replacestring from="${file.separator}" to="-"/>
</filtermapper>
</map>
<indirect name="module.libs" variable="${module.name}.libs"/>
<indirect name="module.test.libs" variable="${module.name}.test.libs"/>
<path id="module.libs">
<filelist dir="${project.root}" files="${module.libs}"/>
</path>
<path id="module.test.libs">
<filelist dir="${project.root}" files="${module.test.libs}"/>
</path>
<path id="module.src.path">
<pathelement location="${module.src}"/>
<pathelement location="${module.precompiled}"/>
</path>
<condition property="module.jar"
value="${build.plugins}/${project.name}-${module.name}-${project.version}.jar"
else="${build.lib}/${project.name}-${module.name}-${project.version}.jar">
<and>
<isset property="module.plugin"/>
<istrue value="${module.plugin}"/>
</and>
</condition>
<property name="module.test.jar"
location="${build.lib}/${project.name}-${module.name}-tests-${project.version}.jar"/>
<!-- module.depends and module.test.depends are supplied by the importing file -->
<property name="module.depends" value=""/>
<property name="module.test.depends" value=""/>
<property name="module.test.excludes" value=""/>
<map property="module.depends.path" value="${module.depends}" join="${path.separator}">
<globmapper from="*" to="${build}/*/classes"/>
</map>
<map property="module.test.depends.path" value="${module.test.depends}" join="${path.separator}">
<globmapper from="*" to="${build}/*/classes"/>
</map>
<path id="module.class.path">
<pathelement location="${module.classes}"/>
<pathelement path="${module.depends.path}"/>
<path refid="module.libs"/>
</path>
<path id="module.test.path">
<pathelement path="${module.test.classes}"/>
<path refid="module.class.path"/>
<pathelement path="${module.test.depends.path}"/>
<path refid="module.test.libs"/>
</path>
<property name="javac.deprecation" value="off"/>
<target name="debug">
<echo-prop name="basedir"/>
<echo-prop name="project.root"/>
<echo-prop name="module"/>
<echo-prop name="module.libs"/>
<echo-prop name="module.test.libs"/>
<echo-prop name="module.name"/>
<echo-prop name="module.jar"/>
<echo-prop name="module.depends"/>
<echo-prop name="module.depends.path"/>
<echo-prop name="module.test.depends"/>
<echo-prop name="module.test.depends.path"/>
<echo-path refid="module.src.path"/>
<echo-path refid="module.class.path"/>
<echo-path refid="module.test.path"/>
</target>
<target name="prepare">
<mkdir dir="${build.bin}"/>
<mkdir dir="${build.etc}"/>
<mkdir dir="${build.lib}"/>
<mkdir dir="${build.results}"/>
<mkdir dir="${build.data}"/>
<mkdir dir="${build.plugins}"/>
<mkdir dir="${module.classes}"/>
<mkdir dir="${module.precompiled}"/>
<mkdir dir="${module.api}"/>
<mkdir dir="${module.test.classes}"/>
<mkdir dir="${module.results}"/>
</target>
<target name="precompile"/>
<target name="compile" depends="prepare,precompile" description="compile sources">
<javac source="${java.source}" target="${java.target}"
destdir="${module.classes}" debug="on"
deprecation="${javac.deprecation}">
<src refid="module.src.path"/>
<classpath refid="module.class.path"/>
</javac>
<!-- copy any non java src files into the build tree, e.g. log4j.properties -->
<copy todir="${module.classes}" verbose="true">
<fileset dir="${module.src}">
<exclude name="**/*.java"/>
<exclude name="**/package.html"/>
</fileset>
</copy>
</target>
<target name="precompile-tests" if="module.test.src.exists"/>
<target name="compile-tests" depends="compile,precompile-tests" if="module.test.src.exists"
description="compilte unit tests">
<javac target="${java.target}" source="${java.source}"
destdir="${module.test.classes}" debug="on"
deprecation="${javac.deprecation}"
srcdir="${module.test.src}">
<classpath refid="module.test.path"/>
</javac>
<!-- copy any non java src files into the build tree, e.g. log4j.properties -->
<copy todir="${module.test.classes}" verbose="true">
<fileset dir="${module.test.src}">
<exclude name="**/*.java"/>
<exclude name="**/package.html"/>
</fileset>
</copy>
</target>
<property name="java.naming.factory.initial" value="org.apache.qpid.jndi.PropertiesFileInitialContextFactory"/>
<condition property="config" value="${profile}.testprofile" else="default.testprofile">
<and>
<isset property="profile"/>
<available file="${project.root}/${profile}.testprofile" type="file"/>
</and>
</condition>
<property file="${project.root}/${config}"/>
<condition property="dontruntest" value="dontruntest" else="runtest">
<contains substring="${module.name}" string="${exclude.modules}" />
</condition>
<target name="test" depends="build,compile-tests" if="module.test.src.exists"
unless="${dontruntest}" description="execute unit tests">
<delete file="${module.failed}"/>
<junit fork="${test.fork}" maxmemory="${test.mem}" reloading="no"
haltonfailure="${haltonfailure}" haltonerror="${haltonerror}"
failureproperty="test.failures" printsummary="on" timeout="600000" >
<sysproperty key="amqj.logging.level" value="${amqj.logging.level}"/>
<sysproperty key="root.logging.level" value="${root.logging.level}"/>
<sysproperty key="log4j.configuration" value="${log4j.configuration}"/>
<sysproperty key="java.naming.factory.initial" value="${java.naming.factory.initial}"/>
<sysproperty key="java.naming.provider.url" value="${java.naming.provider.url}"/>
<sysproperty key="broker" value="${broker}"/>
<sysproperty key="broker.clean" value="${broker.clean}"/>
<sysproperty key="broker.version" value="${broker.version}"/>
<sysproperty key="broker.ready" value="${broker.ready}" />
<sysproperty key="test.excludes" value="${test.excludes}"/>
<sysproperty key="test.excludesfile" value="${test.excludesfile}"/>
<sysproperty key="max_prefetch" value ="${max_prefetch}"/>
<sysproperty key="example.plugin.target" value="${project.root}/build/lib/plugins"/>
<sysproperty key="QPID_EXAMPLE_HOME" value="${project.root}/broker"/>
<sysproperty key="QPID_HOME" value="${project.root}/broker"/>
<formatter type="plain"/>
<formatter type="xml"/>
<classpath refid="module.test.path"/>
<batchtest fork="${test.fork}" todir="${module.results}">
<fileset dir="${module.test.src}" excludes="${module.test.excludes}">
<include name="**/${test}.java"/>
</fileset>
</batchtest>
</junit>
<antcall target="touch-failed"/>
<condition property="failed">
<and>
<isfalse value="${test.failures.ignore}"/>
<available file="${module.failed}"/>
</and>
</condition>
<fail if="failed" message="TEST SUITE FAILED"/>
</target>
<target name="touch-failed" if="test.failures">
<touch file="${module.failed}"/>
<touch file="${build.failed}"/>
</target>
<target name="copy-bin" if="module.bin.exists" description="copy bin directory if it exists to build tree">
<copy todir="${build.bin}" failonerror="false">
<fileset dir="${module.bin}"/>
</copy>
<chmod dir="${build.bin}" perm="ugo+rx" includes="**/*"/>
</target>
<target name="copy-etc" if="module.etc.exists" description="copy etc directory if it exists to build tree">
<copy todir="${build.etc}" failonerror="false">
<fileset dir="${module.etc}"/>
</copy>
</target>
<target name="build" depends="jar,jar-tests,libs,copy-bin,copy-etc" description="compile and copy resources into build tree"/>
<target name="jar.manifest" depends="compile" if="module.manifest">
<jar destfile="${module.jar}" basedir="${module.classes}" manifest="${module.manifest}"/>
</target>
<target name="jar.nomanifest" depends="compile" unless="module.manifest">
<jar destfile="${module.jar}" basedir="${module.classes}"/>
</target>
<target name="jar" depends="jar.manifest,jar.nomanifest" description="create jar"/>
<target name="jar-tests" depends="compile-tests" description="create unit test jar">
<jar destfile="${module.test.jar}" basedir="${module.test.classes}"/>
</target>
<target name="libs" description="copy dependencies into build tree">
<copy todir="${build.lib}" failonerror="false" flatten="true">
<fileset dir="${basedir}${file.separator}.." includes="${module.libs}"/>
</copy>
</target>
<uptodate property="doc.done" targetfile="${module.api}/index.html">
<srcfiles dir="${module.src}" includes="**/*.java"/>
</uptodate>
<target name="doc" depends="prepare" unless="doc.done" description="generate api-doc">
<javadoc destdir="${module.api}" sourcepathref="module.src.path"
classpathref="module.class.path" packagenames="*"/>
</target>
<target name="clean" description="remove build artifacts">
<delete dir="${module.build}"/>
<delete dir="${module.results}"/>
</target>
</project>