<?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="build-site" default="docs" basedir=".">

    <description>
        Build documentation - XDocs and Javadoc.
        
        For building XDocs, edit xdocs/**/*.xml first.
        If ../jakarta-site2 does not exist, set -Dsite.dir=... for it,
        or just use -Dvelocity.dir=.../velocity-1.4.x if you have downloaded Velocity somewhere.

        XXX for no apparent reason, your CWD must be the main Ant source dir, or this will fail:
        .../docs.xml:64: org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource './site.vsl'
        
        After this generation the pages in docs/ should be up-to-date and need to be committed.
        Since I don't remember whether there is a cron job updating the site I
        usually log in to people.apache.org and run 'svn up' in /www/ant.apache.org/
        (make sure your umask is 002 before you do that so the pages remain group writable).
    </description>

    <!-- Initialization properties -->
    <property name="project.name" value="ant"/>
    <property name="docs.src"     location="xdocs"/>
    <property name="docs.dest"    location="docs"/>
    <property name="project.file" value="stylesheets/project.xml" />
    <property name="templ.path"   location="xdocs/stylesheets" />
    <property name="velocity.props"   location="${docs.src}/velocity.properties" />
    <property name="include.xml"  value="**/*.xml" />

    <target name="setup-explicit-classpath" if="velocity.dir">
        <path id="anakia.classpath">
            <fileset dir="${velocity.dir}">
                <include name="velocity-dep-*.jar"/>
                <include name="velocity-*-dep.jar"/>
                <!-- XXX why is this needed separately? -->
                <include name="build/lib/jdom-*.jar"/>
                <include name="lib/jdom-*.jar"/>
            </fileset>
        </path>
    </target>

    <target name="setup-implicit-classpath" unless="velocity.dir">
        <property name="site.dir" location="../jakarta-site2"/>
        <path id="anakia.classpath">
            <fileset dir="${site.dir}/lib">
                <include name="*.jar"/>
            </fileset>
        </path>
    </target>

    <target name="prepare" depends="setup-explicit-classpath,setup-implicit-classpath">
        <available classname="org.apache.velocity.anakia.AnakiaTask"
                   property="AnakiaTask.present">
            <classpath refid="anakia.classpath"/>
        </available>
        <condition property="onwindows">
            <os family="windows"/>
        </condition>
    </target>

    <target depends="prepare" name="prepare-error" unless="AnakiaTask.present">
        <echo>
            AnakiaTask is not present! Please check to make sure that
            velocity.jar is in your classpath.
        </echo>
    </target>

    <target name="anakia" if="AnakiaTask.present" depends="prepare-error">
        <taskdef name="anakia" classname="org.apache.velocity.anakia.AnakiaTask">
            <classpath refid="anakia.classpath"/>
        </taskdef>

        <anakia basedir="${docs.src}" destdir="${docs.dest}/"
             extension=".html" style="./site.vsl"
             projectFile="${project.file}"
             excludes="**/stylesheets/**"
             includes="${include.xml}"
             lastModifiedCheck="true"
             templatePath="${templ.path}"
             velocityPropertiesFile="${velocity.props}">
        </anakia>
        <fixcrlf srcdir="${docs.dest}" includes="**/*.html"
                 encoding="iso-8859-1" outputencoding="iso-8859-1"/>
    </target>

    <target name="fixcrlf" if="onwindows">
        <fixcrlf srcDir="${docs.dest}" eol="dos" includes="*.html"
                 encoding="iso-8859-1" outputencoding="iso-8859-1"/>
    </target>

    <target name="docs" if="AnakiaTask.present" depends="anakia,fixcrlf" description="Create XDocs.">
    </target>
    <target name="javadocs" description="Create Javadoc.">
      <ant antfile="build.xml" target="dist_javadocs">
        <property name="dist.javadocs" value="${docs.dest}/manual/api" />
      </ant>
    </target>

    <target name="all" depends="docs,javadocs" description="Create both XDocs and Javadoc."/>
    
    
    <available property="jdk1.5+" classname="java.net.Proxy"/>
    <target name="txt2html">
        <fail unless="jdk1.5+" message="Tomcat BuildUtils requires Java5+"/>
        <property name="build.dir" value="build"/>
        <tempfile property="temp.dir"/>
        <mkdir dir="${temp.dir}/org/apache/tomcat/buildutil"/>
        <get src="http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/tomcat/buildutil/Txt2Html.java"
             dest="${temp.dir}/org/apache/tomcat/buildutil/Txt2Html.java"/>
        <javac srcdir="${temp.dir}" destdir="${temp.dir}" includeAntRuntime="true"/>
        <taskdef name="txt2html" classname="org.apache.tomcat.buildutil.Txt2Html" classpath="${temp.dir}"/>
        <mkdir dir="${build.dir}/html"/>
        <txt2html todir="${build.dir}/html">
            <fileset file="WHATSNEW"/>
        </txt2html>
        <delete dir="${temp.dir}"/>
    </target>

</project>
