<?xml version="1.0" encoding="UTF-8"?>

<!--
 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.
-->

<!--
NOTE: This build file depends on the Velocity Docbook Framework and won't
work unless that framework is installed. Set the property 'dbf.basedir' in
project.properties to refer to the installation directory before using this
script.
-->
<project name="click-book" default="all" basedir=".">

    <!-- Load the properties -->
    <property file="project.properties"/>
    <property file="../../build/build.properties"/>

    <target name="all" description="Build all documentation" depends="prepare">
        <ant antfile="build-docbook.xml" target="all"/>
    </target>

    <target name="clean" depends="prepare"
        description="--> Delete temporary and distribution directories for docs">
        <delete dir="target"/>
        <delete dir="${dbf.basedir}"/>
    </target>

    <target name="html" description="Generate HTML docs in multiple files" depends="prepare">
        <ant antfile="build-docbook.xml" target="html"/>
    </target>

    <target name="htmlsingle" description="Generate HTML docs in a single, big file" depends="prepare">
        <ant antfile="build-docbook.xml" target="htmlsingle"/>
    </target>

    <target name="extract" unless="dbf.extracted">
        <unzip src="${dbf.path}" dest="${dbf.basedir}/"/>
    </target>

    <target name="get-deps">
        <mkdir dir="lib"/>
        <get src="http://click-docbook.googlecode.com/svn/trunk/build/${dbf.zip}"
 	       dest="${dbf.path}"
 	       verbose="true"
 	       usetimestamp="true"/>
    </target>

    <target name="get-deps-proxy" description="download JAR dependencies">
       <setproxy proxyhost="${proxy.host}" proxyport="${proxy.port}"/>
       <antcall target="get-deps"/>
    </target>

    <target name="pdf" description="Generates a single PDF file" depends="prepare">
        <ant antfile="build-docbook.xml" target="pdf"/>
    </target>

    <target name="prepare">
        <available file="${dbf.path}" property="dbf.downloaded"/>
        <fail message="The Velocity Docbook Framework is not available. To resolve this download the dependencies (~9 MB) with 'ant get-deps'.">
            <condition>
                <or><isfalse value="${dbf.downloaded}"/></or>
            </condition>
        </fail>

        <available file="${dbf.basedir}" property="dbf.extracted"/>
        <antcall target="extract"/>
    </target>

</project>
