<?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.
-->
<!-- $Id$ -->
<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>
  <packaging>pom</packaging>

  <groupId>org.apache.cocoon</groupId>
  <artifactId>site</artifactId>
  <version>1-SNAPSHOT</version>
  <name>Cocoon Site [modules]</name>
  <url>http://cocoon.apache.org</url>
  <description>
    This module is only used to invoke the site creation process.
  </description>

  <distributionManagement>
    <site>
      <id>website</id>
      <url>./target/deploy-site</url>
    </site>
  </distributionManagement>

  <!-- Minimal reporting configuration is required here, otherwise site
       creation stops with an error -->
  <reporting>
    <plugins>
      <plugin>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <version>2.0.1</version>
        <reportSets>
          <reportSet>
            <reports>
              <report>summary</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>
  
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.0</version>
      </plugin>
    </plugins>
  </build>  
  
  <profiles>
    <profile>
      <id>docs-sites</id>
      <modules>
        <!-- Category sites -->
        <module>cocoon-main-site</module>
        <module>cocoon-22-site</module>
        <module>cocoon-blocks-site</module>
        <module>cocoon-core-site</module>
        <module>cocoon-subprojects-site</module>
        <module>cocoon-maven-plugins-site</module>
        <module>cocoon-configuration-site</module>
      </modules>      
    </profile>
    <profile>
      <id>docs-deployment-units</id>
      <modules>
        <!-- Cocoon Blocks -->
        <module>../blocks/cocoon-ajax/cocoon-ajax-impl</module>
        <module>../blocks/cocoon-apples/cocoon-apples-impl</module>        
        <module>../blocks/cocoon-auth/cocoon-auth-impl</module>
        <module>../blocks/cocoon-captcha/cocoon-captcha-impl</module>
        <module>../blocks/cocoon-flowscript/cocoon-flowscript-impl</module>
        <module>../blocks/cocoon-fop/cocoon-fop-impl</module>
        <module>../blocks/cocoon-forms/cocoon-forms-impl</module>
        <module>../blocks/cocoon-mail/cocoon-mail-impl</module>
        <module>../blocks/cocoon-template/cocoon-template-impl</module>
        <module>../blocks/cocoon-batik/cocoon-batik-impl</module>
        <module>../blocks/cocoon-html/cocoon-html-impl</module>
        <module>../blocks/cocoon-linkrewriter/cocoon-linkrewriter-impl</module>
        <module>../blocks/cocoon-databases/cocoon-databases-bridge</module>
        <module>../blocks/cocoon-databases/cocoon-databases-impl</module>
        <module>../blocks/cocoon-databases/cocoon-databases-hsqldb-server</module>
        <module>../blocks/cocoon-databases/cocoon-databases-hsqldb-client</module>
    
        <!-- Unreleased Cocoon Blocks -->
        <module>../blocks/cocoon-eventcache/cocoon-eventcache-impl</module>
        <!-- Java flow was excluded from building because org.apache.commons:javaflow:jar:1.0-SNAPSHOT is not available anywhere -->
        <!--<module>../blocks/cocoon-javaflow/cocoon-javaflow-impl</module>-->
        <module>../blocks/cocoon-jcr/cocoon-jcr-impl</module>
        <module>../blocks/cocoon-jms/cocoon-jms-impl</module>
        <module>../blocks/cocoon-lucene/cocoon-lucene-impl</module>
        <module>../blocks/cocoon-portal/cocoon-portal-impl</module>
        <module>../blocks/cocoon-profiler/cocoon-profiler-impl</module>
        <module>../blocks/cocoon-serializers/cocoon-serializers-impl</module>
    
        <!-- Subprojects -->
        <module>../core/cocoon-servlet-service/cocoon-servlet-service-components</module>
    
        <!-- Maven plugins -->
        <module>../tools/cocoon-maven-plugin</module>
        <module>../tools/cocoon-it-fw</module>        
    
        <!-- Core modules -->
        <module>../core/cocoon-expression-language/cocoon-expression-language-api</module>
        <module>../core/cocoon-expression-language/cocoon-expression-language-impl</module>
        <module>../core/cocoon-pipeline/cocoon-pipeline-api</module>
        <module>../core/cocoon-pipeline/cocoon-pipeline-impl</module>
        <module>../core/cocoon-pipeline/cocoon-pipeline-components</module>
        <module>../core/cocoon-sitemap/cocoon-sitemap-api</module>
        <module>../core/cocoon-sitemap/cocoon-sitemap-impl</module>
        <module>../core/cocoon-sitemap/cocoon-sitemap-components</module>
        <module>../core/cocoon-store/cocoon-store-impl</module>
        <module>../core/cocoon-thread/cocoon-thread-api</module>
        <module>../core/cocoon-thread/cocoon-thread-impl</module>
        <module>../core/cocoon-util</module>
        <module>../core/cocoon-xml/cocoon-xml-api</module>
        <module>../core/cocoon-xml/cocoon-xml-impl</module>
        <module>../core/cocoon-xml/cocoon-xml-resolver</module>
        <module>../core/cocoon-xml/cocoon-xml-util</module>
        <module>../core/cocoon-core</module>
      </modules>       
    </profile>    
    <profile>
      <id>cocoon-docs-cleaner</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.cocoon</groupId>
            <artifactId>cocoon-maven-docs-cleaner-plugin</artifactId>
            <version>1.0.0-M1-SNAPSHOT</version>
          </plugin>
        </plugins>
      </build>
    </profile>  
  </profiles>

</project>
