<?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.    
-->

<project name="Apache UIMA overview and setup documentation" default="all" basedir=".">

  <!-- ======================================================================== -->
  <!-- ==                                                                    == -->
  <!-- == Build all the Velocity Docbook Documentation                       == -->
  <!-- ==                                                                    == -->
  <!-- ======================================================================== -->
  <target name="all" description="--> Build the book">

    <!-- Build the Users Guide -->
    <ant antfile="build-docbook.xml" target="all">
      <property name="book_name" value="overview_and_setup"/>
    </ant>
  </target>

  <!-- ======================================================================== -->
  <!-- ==                                                                    == -->
  <!-- == Clean up the target directory                                      == -->
  <!-- ==                                                                    == -->
  <!-- ======================================================================== -->
  <target name="clean"
          description="--> Delete temporary and distribution directories for docs">
    <ant antfile="build-docbook.xml" target="clean"/>
  </target>
</project>
