<!-- $Id: buildmagic.ent 63664 2007-06-27 09:42:01Z dimitris@jboss.org $ -->

<!-- ================================================================== -->
<!-- Initialization                                                     -->
<!-- ================================================================== -->

<!-- Initialize the build system. -->
<target name="_buildmagic:init" unless="init.disable">

  <!-- Make sure we have the right version of Ant -->
  <property name="buildmagic.ant15.baseversion" value="1.5"/>
  <property name="buildmagic.ant16.baseversion" value="1.6"/>
  
  <!--
     | Add new conditions for other supported Ant versions when they
     | become avaialble.
   -->

  <condition property="buildmagic.ant.compatible">
    <or>
      <contains string="${ant.version}"
        substring="Ant version ${buildmagic.ant15.baseversion}"/>
      <contains string="${ant.version}"
        substring="Ant version ${buildmagic.ant16.baseversion}"/>
    </or>
  </condition>

  <fail unless="buildmagic.ant.compatible">

  Unsupported Ant version:

    ${ant.version}

  Please install a version which is compatible with Ant ${buildmagic.ant15.baseversion} or ${buildmagic.ant16.baseversion}.

  </fail>

  <!-- JDK Detection -->
  <available classname="java.lang.StackTraceElement" property="HAVE_JDK_1.4"/>
  <available classname="java.lang.Enum" property="HAVE_JDK_1.5"/>
  <available classname="java.lang.management.LockInfo" property="HAVE_JDK_1.6"/>  
  
  <fail unless="HAVE_JDK_1.5">
  Unsupported Java version: You need at least JDK5 to build JBoss4.2
  </fail>

  <!-- Setup the project environment. -->
  <dirname property="project.root" file="${basedir}"/>
  <property name="project.build" value="${project.root}/build"/>
  <property name="project.tools" value="${project.root}/tools"/>
  <property name="project.thirdparty" value="${project.root}/thirdparty"/>

  <!-- Setup the module environment. -->
  <property name="module.root" value="${basedir}"/>
  <property file="${module.root}/local.properties"/>
  <property name="module.source" value="${module.root}/src"/>
  <property name="module.output" value="${module.root}/output"/>
  <property name="module.tools" value="${module.root}/tools"/>
  <property name="module.thirdparty" value="${module.root}/thirdparty"/>

  <!-- Load Buildmagic extention tasks. -->
  <property name="buildmagic.local.classpath" value="."/>
  <path id="buildmagic.task.classpath">
    <fileset dir="${project.tools}/lib">
      <include name="*"/>
    </fileset>
    <pathelement location="${project.tools}/lib"/>
    <pathelement location="${project.tools}/etc"/>
    <pathelement location="${project.tools}"/>
    <pathelement path="${buildmagic.local.classpath}"/>
  </path>
  <taskdef file="${project.tools}/etc/buildmagic/autoload.properties"
    classpathref="buildmagic.task.classpath"/>
  <taskdef name="property" classname="org.jboss.tools.buildmagic.task.Property"
    classpathref="buildmagic.task.classpath"/>

  <!-- Include user and project property overrides. -->
  <property file="${project.build}/local.properties"/>
  <property file="${user.home}/.buildmagic.properties"/>
  <property file="${user.home}/.ant.properties"/>

  <call target="_buildmagic:init:local-properties">
    <available file="${module.root}/etc/local.properties-example"
      property="init.have-local-properties"/>
  </call>

  <!-- Setup the build.log -->
  <call target="_buildmagic:init:buildlog" unless="init-buildlog.disable"/>

  <!-- Load common properties -->
  <property file="${project.tools}/etc/buildmagic/common.properties"/>

  <!-- Setup the build timestamp & build identifer properties -->
  <tstamp>
    <format property="build.number" pattern="yyyyMMddHHmm"/>
    <format property="YEAR" pattern="yyyy"/>
  </tstamp>
  <property name="build.id" value="${build.number}"/>

  <!-- Version identifiers for the server. -->
  <property name="version.major" value="4"/>
  <property name="version.minor" value="2"/>
  <property name="version.revision" value="1"/>
  <property name="version.tag" value="GA"/>
  <property name="version.name" value="Trinity"/>
  <!-- This must be set to the CVS tag for any release -->
  <property name="version.cvstag" value="JBoss_${version.major}_${version.minor}_${version.revision}_${version.tag}" />

  <!-- Manifest version info -->
  <property name="specification.title" value="JBoss"/>
  <property name="specification.version" value="${version.major}.${version.minor}.${version.revision}.${version.tag}"/>
  <property name="specification.vendor" value="JBoss (http://www.jboss.org/)"/>

  <property name="implementation.title" value="JBoss [${version.name}]"/>
  <property name="implementation.url" value="http://www.jboss.org/"/>
  <property name="implementation.version"
    value="${version.major}.${version.minor}.${version.revision}.${version.tag} (build: SVNTag=${version.cvstag} date=${build.id})"/>
  <property name="implementation.vendor" value="JBoss.org"/>
  <property name="implementation.vendor.id" value="${implementation.url}"/>

  <!-- Invoke the configure task -->
  <call target="configure" unless="configure.disable"/>

  <!-- Load common task properties -->
  <property file="${project.tools}/etc/buildmagic/task.properties"/>

  <!-- Marker to disable build -->
  <property name="build-bypass.marker" value="${module.output}/build-marker"/>

  <!-- Marker to disable mbean -->
  <property name="mbean-bypass.marker" value="${module.output}/mbean-marker"/>

  <!-- Install filters -->
  <propertyfilter all="${buildmagic.propertyfilter.all}"/>

  <call target="_buildmagic:init:show-environment" if="init.verbose"/>

  <!-- Finish up -->
  <property name="init.disable" value="true"/>
</target>

<!-- Install the local.properties example if it is there -->
<target name="_buildmagic:init:local-properties">
  <!-- Setup the local.properties file as needed -->
  <copy file="${module.root}/etc/local.properties-example"
    tofile="${module.root}/local.properties" filtering="yes"/>
  <property file="${module.root}/local.properties"/>
</target>

<!-- Initialize the build.log -->
<target name="_buildmagic:init:buildlog">
  <property name="buildlog.level" value="info"/>
  <record name="${basedir}/build.log" append="no" loglevel="${buildlog.level}"/>
  <property name="init-buildlog.disable" value="true" system="true"/>
</target>

<!-- Show the running environment if -Dinit.verbose=true -->
<target name="_buildmagic:init:show-environment">
  <echo><![CDATA[
project.root:    ${project.root}
module.root:     ${module.root}
user.home:       ${user.home}
build.compiler:  ${build.compiler}
java.home:       ${java.home}
java.class.path: ${java.class.path}
java.version:    ${java.version}
java.vendor:     ${java.vendor}
java.vm.version: ${java.vm.version}
java.vm.name:    ${java.vm.name}
java.vm.info:    ${java.vm.info}
os.name:         ${os.name}
os.arch:         ${os.arch}
os.version:      ${os.version}
    ]]></echo>
</target>

<!-- ================================================================== -->
<!-- Build Bypass                                                       -->
<!-- ================================================================== -->

<target name="_buildmagic:build-bypass-checker" depends="init" unless="build-bypass.disabled">

  <uptodate property="build-bypass.on" targetfile="${build-bypass.marker}">
    <srcfiles dir="${module.source}" includes="**/*"/>
    <srcfiles dir="${module.root}" includes="build.xml,local.properties"/>
    <srcfiles dir="${project.root}" includes="build/build.xml,build/local.properties"/>
    <srcfiles dir="${project.thirdparty}" includes="**/*"/>
    <srcfiles dir="${project.tools}" includes="**/*"/>
  </uptodate>

</target>

<target name="_buildmagic:build-bypass-notice" if="build-bypass.on">
  <echo>
Build disabled because module is already built. To force the module
to build define build-bypass.disabled=true.
  </echo>
</target>

<target name="_buildmagic:build-bypass-check" depends="_buildmagic:build-bypass-checker, _buildmagic:build-bypass-notice"/>


<!-- ================================================================== -->
<!-- Cleaning                                                           -->
<!-- ================================================================== -->

<!-- Clean up all build output -->
<target name="_buildmagic:clean" depends="init">
   <call target="_buildmagic:clean-internal">
      <available file="${module.output}" property="module.output.present"/>   
   </call>   
</target>

<!-- Actuall cleanup, fails if ${module.output} is missing -->
<target name="_buildmagic:clean-internal">
   <delete includeEmptyDirs="true">
      <fileset dir="${module.output}">
         <exclude name="eclipse-classes*/**"/>
      </fileset>
   </delete>
</target>

<!-- Clean up all generated files -->
<target name="_buildmagic:clobber" depends="init">
  <delete file="${module.root}/local.properties"/>
  <delete dir="${module.output}/eclipse-classes*"/>

  <!-- Try to stop the build log before we delete the file. -->
  <record name="${module.root}/build.log" action="stop"/>

  <!--
     | This file may be opened still due and fail to be removed on win32
     | systems, so lets just ignore those errors for now.
   -->
  <delete file="${module.root}/build.log" quiet="true" failonerror="false"/>
</target>


<!-- ================================================================== -->
<!-- Help                                                               -->
<!-- ================================================================== -->

<target name="_buildmagic:help:standard" depends="init">
  <projecthelp taskname="help">
    <header><![CDATA[
  The ${module.Name} module.
      ]]></header>
    <footer><![CDATA[
    -projecthelp for all targets
    -help for full options
      ]]></footer>
  </projecthelp>
</target>

<target name="_buildmagic:help:build" depends="init">
  <projecthelp taskname="help">
    <header><![CDATA[
  The ${module.Name} module.
      ]]></header>
    <footer><![CDATA[
    -Dgroups=<group>[(,<group>)*]      Specify the module groups.
    -Dmodules=<module>[(,<module>)*]   Specify the modules.
                                       (overrides groups).
    -projecthelp for all targets
    -help for full options
      ]]></footer>
  </projecthelp>
</target>


<!-- ================================================================== -->
<!-- Release                                                            -->
<!-- ================================================================== -->

<target name="_buildmagic:release:zip" depends="init">
  <zip zipfile="${module.output}/${release.id}.zip">
    <fileset dir="${module.output}">
      <include name="${release.id}/**"/>
    </fileset>
  </zip>
</target>

<target name="_buildmagic:release:tar" depends="init">
  <tar tarfile="${module.output}/${release.id}.tar" longfile="gnu"
    basedir="${module.output}"
    includes="${release.id}/**">
  </tar>
</target>

<target name="_buildmagic:release:tgz" depends="_buildmagic:release:tar">
  <gzip src="${module.output}/${release.id}.tar"
    zipfile="${module.output}/${release.id}.tgz"/>
</target>


<!-- ================================================================== -->
<!-- Install                                                            -->
<!-- ================================================================== -->

<target name="_buildmagic:install:default" depends="init">
  <!-- Copy the output directory to the install directory -->
  <mkdir dir="${install.root}"/>
  <copy todir="${install.root}" filtering="no">
    <fileset dir="${module.output}">
      <include name="**/*"/>
      <exclude name="${install.id}/**"/>
    </fileset>
  </copy>
</target>

<!-- ================================================================== -->
<!-- Initialization                                                     -->
<!-- ================================================================== -->

<!--
   | Initialize the build system.  Must depend on '_buildmagic:init'.
   | Other targets should depend on 'init' or things will mysteriously fail.
 -->

<target name="_default:init" unless="init.disable" depends="_buildmagic:init">
</target>


<!-- ================================================================== -->
<!-- Tasks                                                              -->
<!-- ================================================================== -->

<target name="_default:task-init">

  <!-- Where source files live -->
  <property name="source.java" value="${module.source}/main"/>
  <property name="source.etc" value="${module.source}/etc"/>
  <property name="source.bin" value="${module.source}/bin"/>
  <property name="source.docs" value="${module.source}/docs"/>
  <property name="source.resources" value="${module.source}/resources"/>
  <property name="source.examples" value="${module.source}/examples"/>

  <!-- Where build generated files will go -->
  <property name="build.classes" value="${module.output}/classes"/>
  <property name="build.lib" value="${module.output}/lib"/>
  <property name="build.api" value="${module.output}/api"/>
  <property name="build.etc" value="${module.output}/etc"/>
  <property name="build.bin" value="${module.output}/bin"/>
  <property name="build.docs" value="${module.output}/docs"/>
  <property name="build.parsers" value="${module.output}/gen-parsers"/>
  <property name="build.resources" value="${module.output}/resources"/>
  <property name="build.examples" value="${module.output}/examples"/>
  <property name="build.reports" value="${module.output}/reports"/>
  <property name="build.gen" value="${module.output}/gen"/>
  <property name="build.gen-src" value="${module.output}/gen-src"/>
  <property name="build.todo" value="${module.output}/todo"/>

  <!-- Install/Release structure -->
  <property name="install.id" value="${module.name}-${module.version}"/>
  <property name="release.id" value="${install.id}"/>
  <property name="install.root" value="${module.output}/${install.id}"/>

  <!-- The combined thirdparty classpath -->
  <path id="thirdparty.classpath">
    <path refid="library.classpath"/>
    <path refid="dependentmodule.classpath"/>
  </path>

  <!-- This module is based on Java 1.4 -->
  <property name="javac.target" value="1.4"/>
  <property name="javac.source" value="1.4"/>

  <!-- RMIC should generate stubs compatible with Java 1.2+ -->
  <property name="rmic.stubVersion" value="1.2"/>

  <!-- classpath and local.classpath must have a value using with a path -->
  <property name="classpath" value=""/>
  <property name="local.classpath" value=""/>

  <!-- The classpath required to build classes. -->
  <path id="javac.classpath">
    <pathelement path="${classpath}"/>
    <pathelement path="${local.classpath}"/>
    <path refid="thirdparty.classpath"/>
  </path>
  <!-- The bootstrap classpath used to override jdk classes -->
  <path id="javac.bootclasspath">
    <!-- Optional module override boot classpath -->
    <pathelement path="${local.bootclasspath}"/>
    <!-- The sun jdk boot classpath property -->
    <pathelement path="${sun.boot.classpath}"/>
  </path>

  <!-- The classpath required to build javadocs. -->
  <path id="javadoc.classpath">
    <path refid="javac.classpath"/>
  </path>

  <!-- The default prefix -->
  <property name="jar.prefix" value="jboss-${module.name}"/>

  <!-- The default server and client jar name -->
  <property name="jar.server.name" value="${jar.prefix}.jar"/>
  <property name="jar.client.name" value="${jar.prefix}-client.jar"/>

  <!-- Packages to include when generating api documentation -->
  <property name="javadoc.packages" value="org.jboss.*"/>
</target>

<!-- ================================================================== -->
<!-- Compile                                                            -->
<!-- ================================================================== -->

<!-- Compile all class files -->
<target name="_default:compile-classes" depends="init" unless="compile.disable">
  <mkdir dir="${build.classes}"/>

  <!-- Hack, required to avoid duplicate javac targets -->
  <mkdir dir="${build.gen-src}"/>

  <!-- Remove classes which depend on changed files, so they will rebuild. -->
  <depend srcdir="${source.java}:${build.gen-src}"
    destdir="${build.classes}"
    dump="${javac.depend.dump}"
    closure="${javac.depend.closure}">
    <include name="${javac.includes}"/>
    <exclude name="${javac.excludes}"/>
  </depend>

  <javac destdir="${build.classes}"
    optimize="${javac.optimize}"
    target="${javac.target}"
    source="${javac.source}"
    debug="${javac.debug}"
    depend="${javac.depend}"
    verbose="${javac.verbose}"
    deprecation="${javac.deprecation}"
    includeAntRuntime="${javac.include.ant.runtime}"
    includeJavaRuntime="${javac.include.java.runtime}"
    includes="${javac.includes}"
    excludes="${javac.excludes}"
    failonerror="${javac.fail.onerror}">
    <bootclasspath>
      <path refid="javac.bootclasspath"/>
    </bootclasspath>
    <src path="${source.java}:${build.gen-src}"/>
    <classpath refid="javac.classpath"/>
  </javac>
</target>

<!--
   | Compile mbeans
 -->

<target name="_buildmagic:mbean-bypass-checker" depends="init" unless="mbean-bypass.disabled">
  <uptodate property="mbean-bypass.on" targetfile="${mbean-bypass.marker}">
    <srcfiles dir="${source.java}" includes="${mbean.includes}"/>
  </uptodate>

</target>
<target name="_default:compile-mbean-sources"
  depends="_buildmagic:mbean-bypass-checker"
  unless="mbean-bypass.on">

  <taskdef name="jmxdoclet"
    classname="xdoclet.modules.jmx.JMXDocletTask"
    classpathref="xdoclet.task.classpath"/>

  <mkdir dir="${build.gen-src}"/>

  <jmxdoclet destdir="${build.gen-src}"
    excludedtags="@version,@author">
    <fileset dir="${source.java}"
      includes="${mbean.includes}"/>
    <mbeaninterface mergedir="${project.tools}/etc/xdoclet/templates"/>
  </jmxdoclet>

  <touch file="${mbean-bypass.marker}"/>
</target>
<target name="_default:compile-xmbean-sources"
  depends="_buildmagic:mbean-bypass-checker"
  unless="mbean-bypass.on">

  <taskdef name="jmxdoclet"
    classname="xdoclet.modules.jmx.JMXDocletTask"
    classpathref="xdoclet.task.classpath"/>

  <mkdir dir="${build.gen-src}"/>

  <jmxdoclet destdir="${build.gen-src}"
    excludedtags="@version,@author">
    <fileset dir="${source.java}"
      includes="${mbean.includes}"/>
    <mbeaninterface mergedir="${project.tools}/etc/xdoclet/templates"/>
    <jbossxmbean/>
  </jmxdoclet>

  <touch file="${mbean-bypass.marker}"/>
</target>

<!-- Compile all module test class files -->
<target name="_default:compile-test-classes" depends="init" unless="compile.disable">

  <mkdir dir="${build.test}"/>

  <!-- Hack, required to avoid duplicate javac targets -->
  <mkdir dir="${build.gen.test}"/>

  <!-- Remove classes which depend on changed files, so they will rebuild. -->
  <depend srcdir="${source.test}:${build.gen.test}"
    destdir="${build.test}"
    dump="${javac.depend.dump}"
    closure="${javac.depend.closure}">
    <include name="${javac.includes}"/>
    <exclude name="${javac.excludes}"/>
  </depend>

  <javac destdir="${build.test}"
    optimize="${javac.optimize}"
    target="${javac.target}"
    source="${javac.source}"
    debug="${javac.debug}"
    depend="${javac.depend}"
    verbose="${javac.verbose}"
    deprecation="${javac.deprecation}"
    includeAntRuntime="${javac.include.ant.runtime}"
    includeJavaRuntime="${javac.include.java.runtime}"
    includes="${javac.includes}"
    excludes="${javac.excludes}"
    failonerror="${javac.fail.onerror}">
    <src path="${source.test}:${build.gen.test}"/>
    <classpath>
      <path refid="javac.classpath"/>
      <pathelement location="${build.classes}"/>
    </classpath>
  </javac>
</target>

<!-- Compile manifests -->
<target name="_default:compile-etc" depends="init" unless="compile.disable">
  <mkdir dir="${build.etc}"/>
  <copy todir="${build.etc}" filtering="yes">
    <fileset dir="${source.etc}">
      <include name="**"/>
    </fileset>
  </copy>
</target>

<!-- Compile resource files -->
<target name="_default:compile-resources" depends="init" unless="compile.disable">
  <mkdir dir="${build.resources}"/>
  <copy todir="${build.resources}" filtering="yes">
    <fileset dir="${source.resources}">
      <patternset refid="compile-resources.filter.pattern"/>
    </fileset>
  </copy>
  <copy todir="${build.resources}" filtering="no">
    <fileset dir="${source.resources}">
      <patternset refid="compile-resources.pattern"/>
    </fileset>
  </copy>
</target>

<patternset id="compile-resources.filter.pattern">
  <include name="**/*"/>
</patternset>

<patternset id="compile-resources.pattern">
  <exclude name="INVALID_FILE_DOES_NOT_EXISTS"/>
</patternset>

<!-- Compile stylesheets files -->
<target name="_default:compile-stylesheets" depends="init" unless="compile.disable">
  <mkdir dir="${build.stylesheets}"/>
  <copy todir="${build.stylesheets}" filtering="yes">
    <fileset dir="${source.stylesheets}">
      <include name="**/*"/>
    </fileset>
  </copy>
</target>

<!-- Compile bin scripts -->
<target name="_default:compile-bin" depends="init" unless="compile.disable">
  <mkdir dir="${build.bin}"/>
  <copy todir="${build.bin}" filtering="yes">
    <fileset dir="${source.bin}">
      <include name="**/*"/>
    </fileset>
  </copy>

  <call target="_default:fix-bin"/>
</target>

<target name="_default:fix-bin" depends="init">
  <fixcrlf srcdir="${build.bin}"
    eol="lf" eof="remove"
    includes="**/*.sh, **/*.conf"/>

  <fixcrlf srcdir="${build.bin}"
    eol="crlf" eof="remove"
    includes="**/*.bat, **/*.cmd"/>

  <chmod perm="+x">
    <fileset dir="${build.bin}">
      <include name="**/*.sh"/>
    </fileset>
  </chmod>
</target>

<target name="_default:compile-web" depends="init" unless="compile.disable">
  <mkdir dir="${build.web}"/>
  <copy todir="${build.web}" filtering="yes">
    <fileset dir="${source.web}">
      <patternset refid="compile-web.filter.pattern"/>
    </fileset>
  </copy>
  <copy todir="${build.web}" filtering="no">
    <fileset dir="${source.web}">
      <patternset refid="compile-web.pattern"/>
    </fileset>
  </copy>
</target>

<patternset id="compile-web.pattern">
  <exclude name="INVALID_FILE_DOES_NOT_EXISTS"/>
</patternset>

<patternset id="compile-web.filter.pattern">
  <include name="**/*"/>
</patternset>

<target name="_default:compile-checksums" depends="init" unless="compile.disable">
  <checksum>
    <fileset dir="${build.lib}">
      <include name="*.jar"/>
      <include name="*.zip"/>
    </fileset>
  </checksum>
</target>

<!-- Compile RMI stubs -->
<target name="_default:compile-rmi" depends="init" unless="compile.disable">
  <rmic base="${build.classes}"
    verify="${rmic.verify}"
    iiop="${rmic.iiop}"
    iiopopts="${rmic.iiopops}"
    idl="${rmic.idl}"
    idlopts="${rmic.idlops}"
    debug="${rmic.debug}"
    stubVersion="${rmic.stubVersion}">
    <classpath refid="javac.classpath"/>
    <patternset refid="compile-rmi.pattern"/>
  </rmic>
</target>

<patternset id="compile-rmi.pattern">
  <exclude name="INVALID_FILE_DOES_NOT_EXISTS"/>
</patternset>

<!-- ================================================================== -->
<!-- Jars                                                               -->
<!-- ================================================================== -->

<target name="_default:server-client-jars">

  <!-- Build the server jar -->
  <jar jarfile="${build.lib}/${jar.server.name}"
    manifest="${build.etc}/default.mf">
    <fileset dir="${build.classes}"
      includes="${jar.server.includes}"/>
  </jar>

  <!-- Build jbossmq-client.jar -->
  <jar jarfile="${build.lib}/${jar.client.name}"
    manifest="${build.etc}/default.mf">
    <fileset dir="${build.classes}"
      includes="${jar.client.includes}"/>
  </jar>

</target>

<!-- ================================================================== -->
<!-- Documents                                                          -->
<!-- ================================================================== -->

<target name="docs" description="Builds all documentation."
  depends="docs-api"/>

<!-- ======== -->
<!-- JavaDocs -->
<!-- ======== -->

<target name="docs-javadocs-check" depends="init">

  <!-- if index.html is newer than the sources we are up to date -->
  <uptodate property="docs-javadocs.disable"
    targetfile="${build.api}/index.html">
    <srcfiles dir="${source.java}" includes="**/*.java"/>
  </uptodate>
</target>
<target name="docs-javadocs" depends="init" unless="docs-javadocs.disable">
  <call target="docs-javadocs_1_4" if="HAVE_JDK_1.4"/>
</target>
<!-- Generate Javadoc if we are out of date -->
<target name="docs-javadocs_1_4"
  depends="docs-javadocs-check"
  unless="docs-javadocs.disable">

  <mkdir dir="${build.api}"/>
  <mkdir dir="${module.output}/gen-src"/>
  <javadoc packagenames="org.jboss.*,${javadoc.packages}"
    sourcepath="${source.java}:${module.output}/gen-src"
    destdir="${build.api}"
    classpathref="javac.classpath"
    windowtitle="${javadoc.windowtitle}"
    splitindex="${javadoc.splitindex}"
    author="${javadoc.author}"
    version="${javadoc.version}"
    public="${javadoc.public}"
    package="${javadoc.package}"
    protected="${javadoc.protected}"
    private="${javadoc.private}"
    use="${javadoc.use}"
    verbose="${javadoc.verbose}">
    <doctitle><![CDATA[<h1>${module.Name} API Documentation</h1>]]></doctitle>
    <bottom><![CDATA[
      <i>
      <div align="center">
        <font size="-1">Copyright &#169; 2002 JBoss Group, LLC. All Rights Reserved.</font>
      </div>
      </i>
    ]]></bottom>

    <!--
    <link href="http://java.sun.com/j2se/1.3/docs/api"/>
      -->

    <!-- Added links and tags by Yanik Crepeau <yanik@exScriptis.com> 2003-05-13 -->
    <!--Thes tag declarations will shut down the Unknown tag warning during the javadoc process -->
    <link href="http://java.sun.com/j2se/1.4.1/docs/api/"/>
    <tag name="ejb.interface-method" description="ejb interface method delcaration" enabled="false"/>
    <tag name="ejb.persistence" description="ejb persistence declaration" enabled="false"/>
    <tag name="ejb.pk-field" description="ejb primary-key field declaration" enabled="false"/>
    <tag name="ejb.pk" description="ejb" enabled="false"/>
    <tag name="ejb.bean" description="ejb" enabled="false"/>
    <tag name="ejb.transaction" description="ejb" enabled="false"/>
    <tag name="ejb.finder" description="ejb" enabled="false"/>
    <tag name="ejb.relation" description="ejb" enabled="false"/>
    <tag name="ejb.create-method" description="ejb" enabled="false"/>

    <tag name="jboss.query" description="jboss" enabled="false"/>
    <tag name="jboss.lazy-load-group" description="jboss" enabled="false"/>
    <tag name="jboss.load-group" description="jboss" enabled="false"/>
    <tag name="jboss.persistence" description="jboss" enabled="false"/>
    <tag name="jboss.entity-command" description="jboss" enabled="false"/>
    <tag name="jboss.method-attribute" description="jboss" enabled="false"/>
    <tag name="jboss.relation" description="jboss" enabled="false"/>
    <tag name="jboss.method-attribute" description="jboss" enabled="false"/>
    <tag name="jboss.relation-read-ahead" description="jboss" enabled="false"/>
    <tag name="jboss.relation-table" description="jboss" enabled="false"/>
    <tag name="jboss.table-attribute" description="jboss" enabled="false"/>

    <tag name="jmx.managed-attribute" description="jmx" enabled="false"/>
    <tag name="jmx.managed-constructor" description="jmx" enabled="false"/>
    <tag name="jboss.method-attributes" description="jboss" enabled="false"/>

  </javadoc>
</target>

<target name="docs-api" depends="docs-javadocs"/>

<target name="javadocs" depends="docs-javadocs"/>

<!-- ========= -->
<!-- TODO Docs -->
<!-- ========= -->

<target name="docs-todo-check" depends="init">

  <!-- if index.html is newer than the sources we are up to date -->
  <uptodate property="docs-todo.disable"
    targetfile="${build.todo}/index.html">
    <srcfiles dir="${source.java}" includes="**/*.java"/>
  </uptodate>
</target>

<!-- Generate TODO list from @todo tags -->
<target name="docs-todo"
  depends="docs-todo-check"
  unless="docs-todo.disable">

  <!-- tdi: todo task not defined
  <mkdir dir="${build.todo}"/>
  <todo destdir="${build.todo}">
    <fileset dir="${source.java}">
      <include name="**/*.java"/>
    </fileset>
    <info/>
  </todo>
  -->
</target>

<target name="todo" depends="docs-todo"/>

<!-- ============== -->
<!-- JMX MBean Docs -->
<!-- ============== -->

<target name="jmx-docs" depends="init">
  <taskdef name="jmxdoclet" classname="xdoclet.modules.jmx.JMXDocletTask" classpathref="xdoclet.task.classpath"/>

  <mkdir dir="${build.jmx-doc}"/>
  <jmxdoclet
    destdir="${build.jmx-doc}"
    force="false"
    excludedtags="@version,@author">
    <fileset dir="${source.java}">
      <include name="**/*.java"/>
    </fileset>
    <jbossXmlDoc/>
  </jmxdoclet>

</target>

<!-- Generate the plain HTML jmx docs -->
<target name="jmx-docs-html-plain" depends="jmx-docs">


  <!-- Force the use of SAXON XSLT -->
  <property system="true"
    name="javax.xml.transform.TransformerFactory"
    value="com.icl.saxon.TransformerFactoryImpl"/>

  <mkdir dir="${build.jmx-api}"/>
  <style style="${project.thirdparty}/oasis/docbook-xsl/html/docbook.xsl"
    processor="trax"
    extension=".html"
    basedir="${build.jmx-doc}"
    destdir="${build.jmx-api}">
    <include name="**/*.xml"/>
    <param name="quiet" expression="${oasis.docbook.xsl.chunker.quiet}"/>
    <param name="base.dir" expression="${build.jmx-api}${file.separator}"/>
  </style>

</target>


<!-- ================================================================== -->
<!-- Cleaning                                                           -->
<!-- ================================================================== -->

<!-- Clean up all build output -->
<target name="_default:clean"
  depends="_buildmagic:clean">
</target>

<!-- Clean up all generated files -->
<target name="_default:clobber"
  depends="_buildmagic:clobber, clean">
</target>

<target name="rebuild" depends="clean,most" description="clean and rebuild"/>


<!-- ================================================================== -->
<!-- Install & Release                                                  -->
<!-- ================================================================== -->

<!-- ================================================================== -->
<!-- Project (build module) Targets                                     -->
<!-- ================================================================== -->

<!-- jason: this needs to be cleaned up -->

<target name="configure-project" unless="configure-project.disable">

  <!-- Bits for building source archives -->
  <patternset id="source.ignore">
    <exclude name="**/output/**"/>
  </patternset>
  <patternset id="source.free">
    <exclude name="tools/**"/>
    <exclude name="thirdparty/**"/>
    <include name="**"/>
  </patternset>
  <patternset id="source.external">
    <include name="tools/**"/>
    <include name="thirdparty/**"/>
  </patternset>

  <!-- Skip any missing modules and issue a warning -->
  <property name="executemodules.skipmissing" value="true"/>

  <!-- The header and footer displayed during each module execution -->
  <property name="executemodules.header"><![CDATA[
 ==============================================================
 ==
 ==  Executing '@TARGET@' in module '@MODULE@'...
 ==
 ==]]></property>

  <property name="executemodules.footer"><![CDATA[
 ==
 ==
 ==  Finished '@TARGET@' in module '@MODULE@'.
 ==
 ==============================================================
  ]]></property>

  <property name="executemodules.exportproperties">
       version.major,
       version.minor,
       version.revision,
       version.tag,
       version.name,
       version.cvstag,

       specification.title,
       specification.version,
       specification.vendor,

       implementation.title,
       implementation.version,
       implementation.vendor,
       implementation.vendor.id,
       implementation.url
  </property>

  <!-- Show the module configuration -->
  <echo>groups:  ${groups}</echo>
  <echo>modules: ${modules}</echo>

  <property name="configure-project.disable" value="true" system="true"/>

</target>

<!-- ================================================================== -->
<!-- Module Pass-through Targets                                        -->
<!-- ================================================================== -->

<!-- Invoke the 'all' on all configured modules -->
<target name="_buildmagic:modules:all" depends="init">
  <execmodules target="all"
    modules="${modules}"
    root="${project.root}/@MODULE@"
    skipmissing="${executemodules.skipmissing}"
    exportproperties="${executemodules.exportproperties}">
    <before target="_module-@MODULE@-@TARGET@-prepare"/>
    <header message="${executemodules.header}"/>
    <footer message="${executemodules.footer}"/>
    <after target="_module-@MODULE@-@TARGET@"/>
    <property name="init.have-parent" value="true"/>
  </execmodules>
</target>

<!-- Invoke the 'most' on all configured modules -->
<target name="_buildmagic:modules:most" depends="init">
  <execmodules target="most"
    modules="${modules}"
    root="${project.root}/@MODULE@"
    skipmissing="${executemodules.skipmissing}"
    exportproperties="${executemodules.exportproperties}">
    <header message="${executemodules.header}"/>
    <footer message="${executemodules.footer}"/>
    <before target="_module-@MODULE@-@TARGET@-prepare"/>
    <after target="_module-@MODULE@-@TARGET@"/>
    <property name="init.have-parent" value="true"/>
  </execmodules>
</target>

<!-- Invoke the 'main' on all configured modules -->
<target name="_buildmagic:modules:main" depends="init">
  <execmodules target="main"
    modules="${modules}"
    root="${project.root}/@MODULE@"
    skipmissing="${executemodules.skipmissing}"
    exportproperties="${executemodules.exportproperties}">
    <header message="${executemodules.header}"/>
    <footer message="${executemodules.footer}"/>
    <before target="_module-@MODULE@-@TARGET@-prepare"/>
    <after target="_module-@MODULE@-@TARGET@"/>
    <property name="init.have-parent" value="true"/>
  </execmodules>
</target>

<!-- Invoke the 'release' on all configured modules -->
<target name="_buildmagic:modules:release" depends="init">
  <execmodules target="release"
    modules="${modules}"
    root="${project.root}/@MODULE@"
    skipmissing="${executemodules.skipmissing}"
    exportproperties="${executemodules.exportproperties}">
    <before target="_module-@MODULE@-@TARGET@-prepare"/>
    <header message="${executemodules.header}"/>
    <footer message="${executemodules.footer}"/>
    <after target="_module-@MODULE@-@TARGET@"/>
    <property name="init.have-parent" value="true"/>
  </execmodules>
</target>

<!-- Invoke the 'tests' on all configured modules -->
<target name="_buildmagic:modules:tests" depends="init">
  <execmodules target="tests"
    modules="${modules}"
    root="${project.root}/@MODULE@"
    skipmissing="${executemodules.skipmissing}"
    exportproperties="${executemodules.exportproperties}">
    <before target="_module-@MODULE@-@TARGET@-prepare"/>
    <header message="${executemodules.header}"/>
    <footer message="${executemodules.footer}"/>
    <after target="_module-@MODULE@-@TARGET@"/>
    <property name="init.have-parent" value="true"/>
    <property name="build.reports" value="${project.root}/testsuite/output/reports"/>
  </execmodules>
</target>

<!-- Invoke the 'clean' on all configured modules -->
<target name="_buildmagic:modules:clean" depends="init">
  <execmodules target="clean"
    modules="${modules}"
    root="${project.root}/@MODULE@"
    skipmissing="${executemodules.skipmissing}">
    <before target="_module-@MODULE@-@TARGET@-prepare"/>
    <header message="${executemodules.header}"/>
    <footer message="${executemodules.footer}"/>
    <after target="_module-@MODULE@-@TARGET@"/>
    <property name="init.have-parent" value="true"/>
  </execmodules>
</target>

<!-- Invoke the 'clobber' on all configured modules -->
<target name="_buildmagic:modules:clobber" depends="init">
  <execmodules target="clobber"
    modules="${modules}"
    root="${project.root}/@MODULE@"
    skipmissing="${executemodules.skipmissing}">
    <before target="_module-@MODULE@-@TARGET@-prepare"/>
    <header message="${executemodules.header}"/>
    <footer message="${executemodules.footer}"/>
    <after target="_module-@MODULE@-@TARGET@"/>
    <property name="init.have-parent" value="true"/>
  </execmodules>
</target>

<!-- Invoke the 'docs' on all configured modules -->
<target name="_buildmagic:modules:docs" depends="init">
  <execmodules target="docs"
    modules="${modules}"
    root="${project.root}/@MODULE@"
    skipmissing="${executemodules.skipmissing}">
    <before target="_module-@MODULE@-@TARGET@-prepare"/>
    <header message="${executemodules.header}"/>
    <footer message="${executemodules.footer}"/>
    <after target="_module-@MODULE@-@TARGET@"/>
    <property name="init.have-parent" value="true"/>
  </execmodules>
</target>

