<!--
 ! Copyright 2009-2013 by The Regents of the University of California
 ! Licensed 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 from
 ! 
 !     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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>hyracks-documentation</artifactId>
  <name>hyracks-documentation</name>

  <parent>
    <groupId>edu.uci.ics.hyracks</groupId>
    <artifactId>hyracks</artifactId>
    <version>0.2.12</version>
  </parent>

  <build>
    <plugins>
    	<plugin>
    		<groupId>org.apache.maven.doxia</groupId>
    		<artifactId>doxia-maven-plugin</artifactId>
    		<version>1.1.3</version>
    		<executions>
    		  <execution>
    		    <phase>package</phase>
    		    <goals>
    		      <goal>render-books</goal>
    		    </goals>
    		  </execution>
    		</executions>
    		<configuration>
    		  <books>
    		    <book>
    		      <directory>src/books/user-guide</directory>
    		      <descriptor>src/books/user-guide/doxia-descriptor.xml</descriptor>
    		      <formats>
    		        <format>
    		          <id>pdf</id>
    		        </format>
    		        <format>
    		          <id>xhtml</id>
    		        </format>
    		      </formats>
    		    </book>
    		  </books>
    		</configuration>
    	</plugin>
    </plugins>
  </build>
  <dependencies>
  </dependencies>
</project>
