<?xml version="1.0" encoding="UTF-8"?>
<!-- 
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 * 
 * 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 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.
 */
 -->

<!-- ======================================================================== -->
<!--                                                                          -->
<!--  maven Buildfile                                                         -->
<!--                                                                          -->
<!-- $Id$ -->
<!--                                                                          -->
<!-- ======================================================================== -->

<project
  xmlns:j="jelly:core"
  xmlns:m="maven"
  xmlns:u="jelly:util"
  xmlns:maven="jelly:maven"
  default="turbine:build">

  
  <!-- ================================================================== -->
  <!-- C O M P I L E   P O S T - G O A L                                  -->
  <!-- ================================================================== -->
  <!-- executed before the building of the jar, it copies all the various -->
  <!-- resource files into the jar build directory                        -->
  <!-- ================================================================== -->
  <postGoal name="java:compile">
    <copy
      file="${maven.src.dir}/dtd/intake.dtd"
      todir="${maven.build.dest}/org/apache/turbine/services/intake/transform"
    />
    <copy
      file="${maven.src.dir}/macros/TurbineMacros.vm"
      todir="${maven.build.dest}/macros"
    />
  </postGoal>


  <!-- ================================================== -->
  <!-- Perform the nightly build process                  -->
  <!-- ================================================== -->
  <goal name="nightly:build"
      description="Build distribution snapshots">

    <cvs command="-q update -Pd"/>
    <attainGoal name="clean"/>
    <maven:snapshot project="${pom}"/>

    <j:set var="maven.final.name" value="${snapshotSignature}-${pom.currentVersion}"/>
    <attainGoal name="dist:build"/>

  </goal>

  <!-- ================================================== -->
  <!-- Deploy the nightly builds                          -->
  <!-- ================================================== -->
  <goal name="nightly:deploy"
     prereqs="nightly:build"
     description="Deploy the nightly builds">

    <m:user-check user="${maven.username}"/>

    <echo>
       deploymentAddress = ${pom.siteAddress}
       deploymentDirectory = ${turbine.nightly.dist.dir}
    </echo>

    <j:set var="dist.dir" value="${maven.build.dir}/distributions" />

    <!-- Make sure the destination directory exists before trying to copy -->
    <exec dir="." executable="${maven.ssh.executable}">
       <arg line="${pom.siteAddress} -l ${maven.username} 'mkdir -p ${turbine.nightly.dist.dir}'"/>
    </exec>

    <fileScanner var="distFiles">
      <fileset dir="${dist.dir}">
      </fileset>
    </fileScanner>

    <j:forEach var="file" items="${distFiles.iterator()}">
      <echo>Processing ${file}</echo>

      <exec dir="${dist.dir}" executable="${maven.scp.executable}">
        <arg value="${file}"/>
        <arg value="${maven.username}@${pom.siteAddress}:${turbine.nightly.dist.dir}"/>
      </exec>
    </j:forEach>

  </goal>

  <!-- ================================================== -->
  <!-- Generate the Maven Turbine Plugin Site             -->
  <!-- ================================================== -->
  <!-- postGoal name="site">
     <maven:reactor
      basedir="${basedir}/src/maven-plugin"
      includes="project.xml"
      excludes="examples/*"
      goals="clean,site"
      banner="Building"
      ignoreFailures="false"
    />
    <copy todir="${maven.build.dir}/docs/maven-turbine-plugin">
      <fileset dir="${basedir}/src/maven-plugin/target/docs"/>
    </copy>
  </postGoal -->
  
  <!-- ================================================== -->
  <!-- Generate the Torque Implementations for Schedule   -->
  <!-- and Security Site                                  -->
  <!-- ================================================== -->
  <!--postGoal name="site">
     <maven:reactor
      basedir="${basedir}/src/torque"
      includes="project.xml"
      excludes="examples/*"
      goals="clean,site"
      banner="Building"
      ignoreFailures="false"
    />
    <copy todir="${maven.build.dir}/docs/turbine-torque-impl">
      <fileset dir="${basedir}/src/torque/target/docs"/>
    </copy>
  </postGoal-->  
  
  <goal name="turbine:build" description="Build all Turbine components">
  	<attainGoal name="jar"/>
  	<attainGoal name="multiproject:artifact"/>  	
  </goal>
  <goal name="turbine:clean" description="Clean all Turbine components" prereqs="clean">
  	<attainGoal name="multiproject:clean"/>  	
  </goal>  
</project>
