blob: 2ee2cda4c987edca1ace097b5441776ad2559ab5 [file] [log] [blame]
<?xml version="1.0"?>
<!--
Copyright 2002-2004 The Apache Software Foundation or its licensors,
as applicable.
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.
-->
<project default="local-deploy" basedir="." name="Forrest_Plugins_build_file">
<property environment="env"/>
<property name="forrest.version" value="0.7"/>
<property name="forrest.home" location="${env.FORREST_HOME}"/>
<property name="forrest.core" location="${env.FORREST_HOME}/main" />
<property name="forrest.ant.lib.dir" location="${forrest.home}/tools/ant/lib"/>
<property name="forrest.build.dir" location="${forrest.home}/build"/>
<property name="forrest.plugins.dir" location="${forrest.home}/plugins"/>
<property name="forrest.plugins.build.dir" location="${forrest.home}/plugins/build"/>
<property name="forrest.plugins.dist.dir" location="${forrest.plugins.build.dir}/dist"/>
<property name="forrest.plugins.template.dir" location="${forrest.plugins.dir}/pluginTemplate"/>
<property name="forrest.plugins.localDeploy.dir" location="${forrest.build.dir}/plugins"/>
<property name="forrest.plugins.descriptor.file" location="${forrest.plugins.dir}/plugins.xml"/>
<!-- the plugin config (i.e. applies to current plugin) -->
<property name="plugin.src.dir" value="src"/>
<property name="plugin.java.dir" value="${plugin.src.dir}/java"/>
<property name="plugin.lib.dir" value="lib"/>
<property name="plugin.resources.dir" value="resources"/>
<property name="plugin.stylesheets.dir" value="${plugin.resources.dir}/stylesheets"/>
<property name="deploy.svn.user" value=""/>
<property name="deploy.svn.password" value=""/>
<property name="deploy.plugins.svn.url" value="https://svn.apache.org/repos/asf/forrest/site/plugins"/>
<property name="deploy.plugin.docs.svn.url" value="https://svn.apache.org/repos/asf/forrest/site/${forrest.version}/docs/plugins"/>
<property name="deploy.plugins.svn-dir" location="${forrest.build.dir}/svn-plugins-deploy"/>
<property name="deploy.docs.svn-dir" location="${forrest.build.dir}/svn-plugin-docs-deploy"/>
<property name="deploy.plugins.svn-filestoadd" location="build/svn-plugin.deploy.toadd"/>
<property name="deploy.docs.svn-filestoadd" location="build/svn-docs.deploy.toadd"/>
<property name="deploy.plugins.sandbox.dir" location="${deploy.plugins.svn-dir}"/>
<property name="deploy.docs.sandbox.dir" location="${deploy.docs.svn-dir}"/>
<property name="build.dir" location="build"/>
<property name="build.classes" location="${build.dir}/classes"/>
<property name="build.docs" location="${build.dir}/site"/>
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<fileset dir="${forrest.ant.lib.dir}" includes="ant-contrib-*.jar" />
</classpath>
</taskdef>
<taskdef resource="taskdef.properties">
<classpath>
<fileset dir="${forrest.ant.lib.dir}" includes="jsvn-0.9-dev.jar"/>
</classpath>
</taskdef>
<target name="init">
<tstamp>
<format property="YEAR" pattern="yyyy" locale="en"/>
</tstamp>
<property name="build.compiler.emacs" value="on"/>
<property name="build.compiler.warnings" value="true"/>
<property name="build.compiler.pedantic" value="false"/>
<property name="build.compiler.depend" value="true"/>
<property name="build.compiler.fulldepend" value="true"/>
<property name="build.compiler.debug" value="on"/>
<property name="build.compiler.optimize" value="off"/>
<property name="build.compiler.deprecation" value="on"/>
<property name="build.compiler.nowarn" value="on"/>
<property name="build.compiler.type" value="classic"/>
<property name="build.compiler.vm" value="1.2"/>
<input message="Which plugin do you wish to operate on (plugin-name)?"
addproperty="plugin-name"/>
<mkdir dir="${build.dir}"/>
<buildnumber file="${build.dir}/build.number"/>
<echo>
--------------------------------------------------------------
Using ${ant.version}
Build file ${ant.file}
Use 'build.[sh|bat] -projecthelp' to see other options.
Build system home ${ant.home}
Build number ${build.number}
Project Name ${ant.project.name}
Java Version ${ant.java.version}
Timestamp ${DSTAMP}${TSTAMP}
--------------------------------------------------------------
</echo>
<path id="classpath">
<fileset dir="${forrest.home}/lib" includes="**/*.jar"/>
<fileset dir="${plugin.lib.dir}" includes="*.jar"/>
<fileset dir="${plugin.lib.dir}" includes="*.zip"/>
</path>
<available file="${plugin.java.dir}" property="java_exists" type="dir"/>
</target>
<target name="clean" depends="init">
<delete dir="${forrest.plugins.localDeploy.dir}/${plugin-name}"/>
<delete dir="${forrest.plugins.dist.dir}"/>
</target>
<!-- FIXME: Forrest should really use the plugins in-place if they are available as source -->
<target name="local-deploy"
description="Deploy a plugin locally"
depends="init, clean, jar">
<echo>Locally deploying ${plugin-name}</echo>
<copy toDir="${forrest.plugins.localDeploy.dir}/${plugin-name}">
<fileset dir="${forrest.plugins.dir}/${plugin-name}">
<exclude name="lib/**"/>
<exclude name="build/**"/>
</fileset>
</copy>
<if>
<available file="${build.dir}/${plugin-name}.jar"/>
<then>
<copy toFile="${forrest.plugins.localDeploy.dir}/lib/${plugin-name}.jar"
file="${build.dir}/${plugin-name}.jar"
failonerror="false"/>
</then>
</if>
<!-- add to the entity catalog -->
<copy file="${forrest.core}/var/initial_catalog.xcat"
tofile="${forrest.plugins.localDeploy.dir}/catalog.xcat"
overwrite="false"/>
<if>
<available file="${forrest.plugins.localDeploy.dir}/${plugin-name}/resources/schema/catalog.xcat"/>
<then>
<xslt in="${forrest.plugins.localDeploy.dir}/catalog.xcat"
out="${forrest.plugins.localDeploy.dir}/catalog.xcat.new"
style="${forrest.core}/var/catalogMountSnippet.xsl"
force="true">
<param name="plugin-catalog-path"
expression="${plugin-name}/resources/schema/catalog.xcat"/>
</xslt>
<move file="${forrest.plugins.localDeploy.dir}/catalog.xcat.new"
tofile="${forrest.plugins.localDeploy.dir}/catalog.xcat"/>
</then>
</if>
<if>
<available file="lib"/>
<then>
<copy toDir="${forrest.plugins.localDeploy.dir}/lib" failonerror="false">
<fileset dir="lib"/>
</copy>
</then>
</if>
<antcall target="build"/>
</target>
<target name="build"
description="Any local actions that need to be carried out by the plugin are done here"/>
<target name="deploy-plugins.xml"
description="Deployes the plugins descriptor file (plugins.xml) to the website SVN repository"
depends="checkout-deployed-plugins">
<copy todir="${deploy.plugins.svn-dir}"
overwrite="true"
file="${forrest.plugins.descriptor.file}"/>
<!-- check in to SVN -->
<svncommit
target="${deploy.plugins.svn-dir}"
repositoryurl="${deploy.plugins.svn.url}"
commitmessage="Deployment plugins descriptor file plugins.xml (deployed by 'deploy-plugins.xml' target of plugin build script)"
/>
</target>
<target name="deploy-docs"
description="Deploy the plugin documentation"
depends="clean, dist, docs, checkout-deployed-docs, deploy-plugins.xml">
<echo>Deploying plugin documentation to the web server</echo>
<!-- Copy plugin docs into sandbox -->
<copy todir="${deploy.docs.sandbox.dir}/${plugin-name}"
overwrite="true">
<fileset dir="${build.docs}"/>
</copy>
<!-- Fix inconsitent line endings -->
<fixcrlf srcdir="${deploy.docs.sandbox.dir}/${plugin-name}" eol="unix">
<include name="**/*.html"/>
<include name="**/*.xml"/>
<include name="**/*.css"/>
</fixcrlf>
<!-- add new files to SVN -->
<!-- svnadd doesn't work (it doesn't change the working directory properly) -->
<exec executable="svn" dir="${deploy.docs.svn-dir}" output="${deploy.docs.svn-filestoadd}" failonerror="true">
<arg value="status"/>
</exec>
<!-- the status columns make all lines invalid filenames
we remove the status columns for the new files so the only valid
filenames in the list are new files
-->
<replace file="${deploy.docs.svn-filestoadd}" token="? " value=""/>
<replace file="${deploy.docs.svn-filestoadd}" token="M " value=""/>
<!-- don't fail on error here because
1) the targets file might have 'bad' filenames but we should continue
2) we would've already failed if the svn executable wasn't found
-->
<exec executable="svn" dir="${deploy.docs.svn-dir}">
<arg value="add"/>
<arg value="--targets"/>
<arg value="${deploy.docs.svn-filestoadd}"/>
</exec>
<!-- check in to SVN -->
<svncommit
target="${deploy.docs.svn-dir}"
repositoryurl="${deploy.plugins.svn.url}"
commitmessage="Deployment of docs for ${plugin-name} plugin (deployed by 'deploy-docs' target of plugin build script)"
/>
</target>
<target name="deploy"
description="Deploy the plugin to SVN"
depends="clean, deploy-plugins.xml, deploy-docs, dist, checkout-deployed-plugins">
<echo>Deploying ${plugin-name} to the web server</echo>
<!-- copy new plugin files into sandbox -->
<copy todir="${deploy.plugins.svn-dir}"
overwrite="true"
file="${forrest.plugins.dist.dir}/${plugin-name}.zip"/>
<!-- add new files to SVN -->
<!-- svnadd doesn't work (it doesn't change the working directory properly) -->
<exec executable="svn" dir="${deploy.plugins.svn-dir}" output="${deploy.plugins.svn-filestoadd}" failonerror="true">
<arg value="status"/>
</exec>
<!-- the status columns make all lines invalid filenames
we remove the status columns for the new files so the only valid
filenames in the list are new files
-->
<replace file="${deploy.plugins.svn-filestoadd}" token="? " value=""/>
<replace file="${deploy.plugins.svn-filestoadd}" token="M " value=""/>
<!-- don't fail on error here because
1) the targets file might have 'bad' filenames but we should continue
2) we would've already failed if the svn executable wasn't found
-->
<exec executable="svn" dir="${deploy.plugins.svn-dir}">
<arg value="add"/>
<arg value="--targets"/>
<arg value="${deploy.plugins.svn-filestoadd}"/>
</exec>
<!-- check in to SVN -->
<svncommit
target="${deploy.plugins.svn-dir}"
repositoryurl="${deploy.plugins.svn.url}"
commitmessage="Deployment of ${plugin-name} plugin (deployed by 'deploy' target of plugin build script)"
/>
</target>
<target name="checkout-deployed-docs"
description="Retrieve the currently deployed plugin files">
<!-- get current plugins directory from SVN -->
<svncheckout
repositoryurl="${deploy.plugin.docs.svn.url}"
username="${deploy.svn.user}"
password="${deploy.svn.password}"
destination="${deploy.docs.svn-dir}"
failonerror="true"
/>
</target>
<target name="checkout-deployed-plugins"
description="Retrieve the currently deployed plugin files">
<!-- get current plugins directory from SVN -->
<svncheckout
repositoryurl="${deploy.plugins.svn.url}"
username="${deploy.svn.user}"
password="${deploy.svn.password}"
destination="${deploy.plugins.svn-dir}"
failonerror="true"
/>
</target>
<target name="docs" depends="local-deploy">
<echo>Building Docs for ${plugin-name}</echo>
<ant antfile="${forrest.core}/forrest.build.xml" target="site">
<property name="project.home" value="${basedir}"/>
</ant>
</target>
<!-- FIXME: needs to append plugin version number to filename -->
<target name="dist"
description="Build the distribution archive for all the plugins"
depends="init">
<mkdir dir="${forrest.plugins.dist.dir}"/>
<zip destfile="${forrest.plugins.dist.dir}/${plugin-name}.zip"
basedir="${forrest.plugins.dir}/${plugin-name}"
includes="**"
excludes="**/build/**"/>
</target>
<target name="seedPlugin"
description="Create a new plugin directory in the current working directory and seed it with initial set of files"
depends="init">
<mkdir dir="${plugin-name}"/>
<mkdir dir="${plugin-name}/${plugin.src.dir}"/>
<mkdir dir="${plugin-name}/${plugin.resources.dir}"/>
<mkdir dir="${plugin-name}/${plugin.stylesheets.dir}"/>
<copy todir="${plugin-name}"
filtering="true">
<fileset dir="${forrest.plugins.template.dir}"/>
<filterset>
<filter token="plugin-name" value="${plugin-name}"/>
</filterset>
</copy>
<input message="What type of plugin do you wish to create? "
validargs="input,output,internal"
addproperty="plugin-type"/>
<move file="${plugin-name}/sitemap.xmap"
tofile="${plugin-name}/${plugin-type}.xmap"/>
</target>
<!-- =================================================================== -->
<!-- Compile java classes -->
<!-- =================================================================== -->
<target name="compile" depends="init" if="java_exists">
<mkdir dir="${build.classes}"/>
<javac srcdir= "${plugin.java.dir}"
destdir= "${build.classes}"
debug= "${build.compiler.debug}"
optimize= "${build.compiler.optimize}"
deprecation= "${build.compiler.deprecation}"
nowarn= "${build.compiler.nowarn}"
classpathref= "classpath">
</javac>
<copy todir="${build.classes}">
<fileset dir="${plugin.java.dir}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<!-- =================================================================== -->
<!-- Jar Cocoon classes -->
<!-- =================================================================== -->
<target name="jar" depends="init, compile" if="java_exists">
<jar destfile="${build.dir}/${plugin-name}.jar"
basedir="${build.classes}"/>
</target>
<target name="test" depends="init, clean, docs"/>
</project>