blob: 9b5c09b900a110b7511d835b49a90a2364fd53ef [file] [log] [blame]
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="./tools/stylesheets/build.xsl"?>
<project default="dist" basedir="." name="Forrest build file">
<description>
* ========================== *
| Forrest Build System |
* ========================== *
by
Nicola Ken Barozzi (nicolaken@apache.org)
Marc Johnson (mjohnson@apache.org)
Jeff Turner (jefft@apache.org)
Run the build script: build.bat or build.sh
</description>
<target name="init">
<tstamp>
<format property="YEAR" pattern="yyyy" locale="en"/>
</tstamp>
<buildnumber file="etc/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>
<xmlproperty file="module.xml" prefix="xgump" keeproot="true" collapseAttributes="true" />
<xmlproperty file="status.xml" prefix="xstatus" keeproot="false" collapseAttributes="true" />
<xmlproperty file="properties.xml" keeproot="false" collapseAttributes="true" />
<property name="name" value="apache-forrest"/>
<property name="packages" value="${xgump.module.project.packages}"/>
<property name="version"
value="${xgump.module.project.version.major}.${xgump.module.project.version.minor}.${xgump.module.project.version.fix}${xgump.module.project.version.tag}"/>
<property name="resource.dir" location="src/resources"/>
<property name="java.dir" location="src/java"/>
<property name="scratchpad.src.dir" location="src/scratchpad/src/java"/>
<property name="components.src.dir" location="${java.dir}/components"/>
<property name="build.dir" location="build"/>
<property name="build.docs" location="build/docs"/>
<!--
<property name="build.javadocs" value="build/docs/javadocs"/>
-->
<property name="build.scratchpad.dir" location="build/scratchpad"/>
<property name="build.components.dir" location="build/components"/>
<property name="build.scratchpad.classes" location="build/scratchpad/classes"/>
<property name="build.components.classes" location="build/components/classes"/>
<property name="dist.dir" location="build/dist" />
<property name="dist-shbat.dir" location="${dist.dir}/shbat" />
<property name="tools.dir" location="tools"/>
<property name="tools.jar" location="${java.home}/../lib/tools.jar"/>
<available file="${tools.jar}" property="tools.jar.present"/>
<path id="classpath">
<fileset dir="src/scratchpad/lib" includes="**/*.jar"/>
<fileset dir="lib" includes="**/*.jar"/>
<pathelement location="${tools.jar}"/>
</path>
<mkdir dir="${build.dir}"/>
</target>
<target name="clean" depends="init" description="Delete all generated files">
<delete dir="${build.dir}"/>
</target>
<!-- =================================================================== -->
<!-- Make release distributions -->
<!-- =================================================================== -->
<target name="release-dist-src" depends="init"
description="Makes a source release distribution">
<mkdir dir="${dist.dir}"/>
<!-- Hackery to fix linefeeds and permissions before zipping -->
<patternset id="scripts">
<include name="**/*.bat"/>
<include name="**/*.sh"/>
<include name="**/ant"/>
<include name="**/forrest"/>
</patternset>
<patternset id="noscripts">
<exclude name="**/*.bat"/>
<exclude name="**/*.sh"/>
<exclude name="**/ant"/>
<exclude name="**/forrest"/>
</patternset>
<property name="tmp-scripts" location="${build.dir}/tmp/scripts"/>
<mkdir dir="${tmp-scripts}"/>
<copy todir="${tmp-scripts}">
<fileset dir=".">
<patternset refid="scripts"/>
</fileset>
</copy>
<fixcrlf eol="crlf" srcdir="${tmp-scripts}" includes="**/*.bat"/>
<fixcrlf eol="lf" srcdir="${tmp-scripts}" excludes="**/*.bat"/>
<chmod dir="${tmp-scripts}" perm="ugo+rx" excludes="**/*.bat"/>
<property name="tmp-fresh-site" location="${build.dir}/tmp/fresh-site"/>
<property name="src-fresh-site" location="${resource.dir}/fresh-site"/>
<copy todir="${tmp-fresh-site}">
<fileset dir="${src-fresh-site}" />
</copy>
<fixcrlf eol="crlf" srcdir="${tmp-fresh-site}" excludes="**/*.gif **/*.png"/>
<property name="release-name-src" value="${name}-${version}-src"/>
<zip
file="${dist.dir}/${release-name-src}.zip" >
<zipfileset dir="." prefix="${release-name-src}">
<exclude name="build/**"/>
<exclude name="${resource.dir}/fresh-site/**" />
<patternset refid="noscripts"/>
</zipfileset>
<zipfileset prefix="${release-name-src}" dir="${tmp-scripts}"/>
<zipfileset prefix="${release-name-src}" dir="etc" includes="RELEASE-NOTES-${version}.txt"/>
<zipfileset prefix="${release-name-src}/${resource.dir}/fresh-site" dir="${tmp-fresh-site}"/>
</zip>
<tar longfile="gnu"
compression="gzip"
destfile="${dist.dir}/${release-name-src}.tar.gz" >
<tarfileset dir="." prefix="${release-name-src}" username="forrest" group="forrest">
<exclude name="build/**"/>
<patternset refid="noscripts"/>
</tarfileset>
<tarfileset prefix="${release-name-src}" dir="${tmp-scripts}"
mode="755" username="forrest" group="forrest">
<include name="**/*.sh"/>
<include name="**/ant"/>
<include name="**/forrest"/>
</tarfileset>
<tarfileset prefix="${release-name-src}" dir="${tmp-scripts}"
username="forrest" group="forrest">
<exclude name="**/*.sh"/>
<exclude name="**/ant"/>
<exclude name="**/forrest"/>
</tarfileset>
<tarfileset prefix="${release-name-src}" dir="etc" includes="RELEASE-NOTES-${version}.txt"/>
</tar>
</target>
<target name="release-dist-bin" depends="init, dist-shbat"
description="Makes a binary release distribution">
<property name="release-name-bin" value="${name}-${version}-bin"/>
<zip
file="${dist.dir}/${release-name-bin}.zip" >
<zipfileset dir="${dist-shbat.dir}" prefix="${release-name-bin}"/>
<zipfileset dir="etc" prefix="${release-name-bin}/etc"/>
<zipfileset dir="etc" prefix="${release-name-bin}" includes="RELEASE-NOTES-${version}.txt"/>
</zip>
<tar longfile="gnu" compression="gzip"
destfile="${dist.dir}/${release-name-bin}.tar.gz" >
<tarfileset prefix="${release-name-bin}" dir="${dist-shbat.dir}"
username="forrest" group="forrest">
<exclude name="**/*.sh"/>
<exclude name="**/ant"/>
<exclude name="**/forrest"/>
</tarfileset>
<tarfileset prefix="${release-name-bin}" dir="${dist-shbat.dir}"
mode="755" username="forrest" group="forrest">
<include name="**/*.sh"/>
<include name="**/ant"/>
<include name="**/forrest"/>
</tarfileset>
<tarfileset prefix="${release-name-bin}/etc" dir="etc"/>
<tarfileset prefix="${release-name-bin}" dir="etc" includes="RELEASE-NOTES-${version}.txt"/>
</tar>
</target>
<target name="release-dist"
description="Makes source and binary release distributions"
depends="release-dist-bin, release-dist-src"/>
<!-- =================================================================== -->
<!-- Make all known distributions -->
<!-- =================================================================== -->
<target name="dist"
description="Makes all the known incarnations of forrest"
depends="dist-shbat" />
<!-- =================================================================== -->
<!-- Make the zip that holds what a fresh site should look like -->
<!-- =================================================================== -->
<target name="fresh-site-zip" depends="init">
<!-- TODO: decide on a better place to read/set this prop from/to -->
<property name="fresh-site.zip" value="./build/fresh-site.zip" />
<zip destfile="${fresh-site.zip}" basedir="${resource.dir}/fresh-site" />
</target>
<!-- =================================================================== -->
<!-- Make the WEB-INF directory like cocoon (CLI or webapp) needs it -->
<!-- Note that @tokens@ in config files will be unexpanded. -->
<!-- =================================================================== -->
<target name="webapp-webinf" depends="init, scratchpad.jar, components.jar" >
<!-- TODO: decide on a better place to read/set this prop from/to -->
<property name="webapp.webinf.dir" value="./build/WEB-INF" />
<mkdir dir="${webapp.webinf.dir}" />
<copy todir="${webapp.webinf.dir}" >
<fileset dir="${resource.dir}/conf" >
<exclude name="*.xmap" />
<exclude name="skinconf.xml" />
</fileset>
</copy>
<mkdir dir="${webapp.webinf.dir}/classes" />
<copy todir="${webapp.webinf.dir}/classes" >
<fileset dir="${resource.dir}/schema">
<include name="CatalogManager.properties"/>
</fileset>
<!--
<fileset dir="${build.classes}">
<include name="**/*.class"/>
</fileset>
<fileset dir="${build.scratchpad.classes}">
<include name="**/*.class"/>
</fileset>
-->
</copy>
<!-- Temporary hack to stop Cocoon rewriting extensions -->
<mkdir dir="${webapp.webinf.dir}/classes/org/apache/cocoon/util"/>
<touch file="${webapp.webinf.dir}/classes/org/apache/cocoon/util/mime.types"/>
<mkdir dir="${webapp.webinf.dir}/lib"/>
<copy todir="${webapp.webinf.dir}/lib">
<!--
<fileset dir="./lib/endorsed" />
<fileset dir="./lib/optional"/>
-->
<fileset dir="./lib/core"/>
<fileset dir="./src/scratchpad/lib"/>
<fileset dir="${build.scratchpad.dir}" includes="*.jar"/>
<fileset dir="${build.components.dir}" includes="*.jar"/>
</copy>
</target>
<!-- =================================================================== -->
<!-- Make the bare context directory like cocoon (CLI or webapp) needs it-->
<!-- =================================================================== -->
<target name="bare-context-dir" depends="init" >
<!-- TODO: decide on a better place to read/set this prop from/to -->
<property name="bare-context.dir" value="./build/bare-context" />
<!-- Copy entity catalog, entities and class files -->
<copy todir="${bare-context.dir}/resources/schema" >
<fileset dir="${resource.dir}/schema"/>
</copy>
<!-- Copy default image files. These may be overridden by identically named
files in ${project.home}/src/documentation/resources/images. -->
<copy todir="${bare-context.dir}/resources/images" >
<fileset dir="${resource.dir}/images"/>
</copy>
<!-- Copy Chaperon grammars -->
<copy todir="${bare-context.dir}/resources/grammars" >
<fileset dir="${resource.dir}/grammars"/>
</copy>
<!-- Copy Cocoon configuration and sitemap -->
<copy todir="${bare-context.dir}">
<fileset dir="${resource.dir}/conf">
<include name="*.xmap"/>
<include name="skinconf.xml"/>
<include name="jettyconf.xml"/>
<include name="jtidy.properties"/>
</fileset>
</copy>
<!-- Copy stylesheets -->
<copy todir="${bare-context.dir}/resources/stylesheets" >
<fileset dir="${resource.dir}/stylesheets" />
</copy>
<!-- Copy skins -->
<copy todir="${bare-context.dir}/skins/" >
<fileset dir="${resource.dir}/skins" />
</copy>
</target>
<!-- =================================================================== -->
<!-- Validate the important core configuration files -->
<!-- =================================================================== -->
<target name="validate-config" depends="init"
description="Validate the important core configuration files">
<!-- FIXME allow switch
if="validate.config">
-->
<taskdef name="jing" classname="com.thaiopensource.relaxng.util.JingTask">
<classpath>
<fileset dir="./lib/core" includes="*.jar" />
</classpath>
</taskdef>
<!-- skinconf.xml -->
<echo message="validating **/skinconf.xml ..."/>
<jing compactSyntax="true" rngfile="./src/resources/schema/relaxng/skinconf.rnc">
<fileset dir="./src/resources" includes="**/skinconf.xml"/>
</jing>
<!-- All stylesheets **/*.xsl -->
<echo message="validating stylesheets **/*.xsl ..."/>
<jing rngfile="./src/resources/schema/relaxng/xslt.rng">
<fileset dir="./src/resources" includes="**/*.xsl"/>
<fileset dir="./tools" includes="**/*.xsl"/>
</jing>
<!-- sitemap.xmap -->
<echo message="validating **/sitemap.xmap ..."/>
<jing rngfile="./src/resources/schema/relaxng/sitemap-v06.rng">
<fileset dir="./src/resources/conf" includes="*.xmap"/>
</jing>
<!-- book.xml -->
<!-- FIXME: Need Norm Walsh catalog entity resolver or Jeff's DoctypeChanger.
<echo message="validating **/book.xml ..."/>
<jing rngfile="./src/resources/schema/relaxng/book-v01.rng">
<fileset dir="./src" includes="**/book.xml"/>
</jing>
-->
</target>
<!-- =================================================================== -->
<!-- Make the shell-bat distribution -->
<!-- =================================================================== -->
<target name="dist-shbat"
depends="init, validate-config, fresh-site-zip, webapp-webinf, bare-context-dir" >
<!-- TODO: decide on a better place to read/set this prop from/to -->
<!-- fresh drop-off location for the distribution -->
<delete dir="${dist-shbat.dir}" />
<mkdir dir="${dist-shbat.dir}" />
<!-- copy the ant script at the heart of the distribution -->
<!--
<copy todir="${dist-shbat.dir}" file="forrest.build.xml" />
-->
<!-- copy the prepared and wrapper stuff for the distribution -->
<copy todir="${dist-shbat.dir}">
<fileset dir="./src/resources/forrest-shbat" />
</copy>
<!-- copy licenses -->
<copy todir="${dist-shbat.dir}/legal">
<fileset dir="./legal" />
</copy>
<!-- copy the fresh-site.zip to clone from -->
<copy todir="${dist-shbat.dir}" file="${fresh-site.zip}" />
<!-- copy the web-inf as needed by the cocoon CLI -->
<mkdir dir="${dist-shbat.dir}/WEB-INF" />
<copy todir="${dist-shbat.dir}/WEB-INF">
<fileset dir="${webapp.webinf.dir}" />
</copy>
<mkdir dir="${dist-shbat.dir}/lib/endorsed" />
<copy todir="${dist-shbat.dir}/lib/endorsed">
<fileset dir="lib/endorsed" />
</copy>
<mkdir dir="${dist-shbat.dir}/lib/optional" />
<copy todir="${dist-shbat.dir}/lib/optional">
<fileset dir="lib/optional" />
</copy>
<!-- Copy Ant jars, so the shbat distribution is self-contained -->
<mkdir dir="${dist-shbat.dir}/ant" />
<copy todir="${dist-shbat.dir}/ant">
<fileset dir="tools/ant" />
</copy>
<copy todir="${dist-shbat.dir}/ant/lib">
<fileset dir="lib/core" includes="resolver*.jar"/>
</copy>
<!-- Copy forrestbot -->
<mkdir dir="${dist-shbat.dir}/forrestbot" />
<copy todir="${dist-shbat.dir}/forrestbot">
<fileset dir="src/resources/forrestbot">
<exclude name="bin/**"/>
</fileset>
</copy>
<copy todir="${dist-shbat.dir}/bin">
<fileset dir="src/resources/forrestbot/bin"/>
</copy>
<!-- Fix bin/ permissions -->
<fixcrlf eol="crlf" srcdir="${dist-shbat.dir}/bin" includes="*.bat"/>
<fixcrlf eol="lf" srcdir="${dist-shbat.dir}/bin" excludes="*.bat"/>
<chmod dir="${dist-shbat.dir}/bin" perm="ugo+rx" excludes="*.bat"/>
<!-- Fix ant/bin/ permissions -->
<fixcrlf eol="crlf" srcdir="${dist-shbat.dir}/ant/bin" includes="*.bat"/>
<fixcrlf eol="lf" srcdir="${dist-shbat.dir}/ant/bin" excludes="*.bat"/>
<chmod dir="${dist-shbat.dir}/ant/bin" perm="ugo+rx" excludes="*.bat"/>
<!-- copy the bare-context dir as needed by the cocoon CLI -->
<mkdir dir="${dist-shbat.dir}/context" />
<copy todir="${dist-shbat.dir}/context">
<fileset dir="${bare-context.dir}" />
</copy>
<echo>
*-----------------------------------------------------------------
| installation notice
*-----------------------------------------------------------------
| You have succesfully built the shell-bat distribution of Forrest.
| Please find it at: ${dist-shbat.dir}
| Please copy the contents to the install directory of your choice
| Please have the environment variable FORREST_HOME point to it.
| It is recommended to add
| unix: $FORREST_HOME/bin: to your $PATH
| win: %FORREST_HOME%\bin; to your %PATH%
| Calling
| unix: $FORREST_HOME/bin/forrest -projecthelp
| win: %FORREST_HOME%\bin\forrest -projecthelp
| will list options for the 'forrest' command
| More help at http://xml.apache.org/forrest/ and forrest-dev@xml.apache.org
*-----------------------------------------------------------------
</echo>
</target>
<!-- =================================================================== -->
<!-- Generate project-site -->
<!-- =================================================================== -->
<target name="docs" depends="site"/>
<target name="site" depends="dist-shbat"
description="Generates static HTML documentation">
<property name="forrest.home" value="${dist-shbat.dir}" />
<ant antfile="${forrest.home}/forrest.antproxy.xml" target="site"/>
</target>
<!-- =================================================================== -->
<!-- Generate cocoon-webapp for project-site -->
<!-- =================================================================== -->
<target name="webapp" depends="dist-shbat"
description="Generates an unpackaged webapp of the website">
<property name="forrest.home" value="${dist-shbat.dir}" />
<ant antfile="${forrest.home}/forrest.antproxy.xml" target="webapp"/>
</target>
<!-- =================================================================== -->
<!-- Generate a .war files of the project-site -->
<!-- =================================================================== -->
<target name="war" depends="dist-shbat"
description="Generates a .war file containing the website">
<property name="forrest.home" value="${dist-shbat.dir}" />
<ant antfile="${forrest.home}/forrest.antproxy.xml" target="war"/>
</target>
<!-- =================================================================== -->
<!-- Validates Forrest XML documentation -->
<!-- =================================================================== -->
<target name="validate" depends="dist-shbat"
description="Validates XML documentation files">
<property name="forrest.home" value="${dist-shbat.dir}" />
<ant antfile="${forrest.home}/forrest.antproxy.xml" target="validate"/>
</target>
<!-- =================================================================== -->
<!-- ForrestBar for Mozilla -->
<!-- =================================================================== -->
<target name="forrestbar" depends="init">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.dir}/work/forrestbar" />
<mkdir dir="${build.dir}/work/forrestbar-jar" />
<copy todir="${build.dir}/work/forrestbar-jar" overwrite="true">
<fileset dir="src/resources/forrestbar"
includes="content/**/*.xul" />
<filterset>
<filter token="EMBEDDED_NAME" value="${forrestbot.links.forrest.local-embedded.name}"/>
<filter token="EMBEDDED_URL" value="${forrestbot.links.forrest.local-embedded.url}"/>
<filter token="WEBAPP_NAME" value="${forrestbot.links.forrest.local-webapp.name}"/>
<filter token="WEBAPP_URL" value="${forrestbot.links.forrest.local-webapp.url}"/>
</filterset>
</copy>
<copy todir="${build.dir}/work/forrestbar-jar" overwrite="true">
<fileset dir="src/resources/forrestbar"
excludes="content/**/*.xul" />
</copy>
<jar jarfile="${build.dir}/work/forrestbar/forrestbar.jar">
<fileset dir="${build.dir}/work/forrestbar-jar" includes="content/**/*" />
</jar>
<copy file="src/resources/forrestbar/install.js"
todir="${build.dir}/work/forrestbar" overwrite="true">
</copy>
<zip zipfile="${build.dir}/forrestbar.xpi"
basedir="${build.dir}/work/forrestbar" />
</target>
<!-- ================================== -->
<!-- Target used by Gump -->
<!-- ================================== -->
<target name="gump" description="Target used by Gump">
<antcall target="site"/>
<antcall target="webapp"/>
</target>
<!-- =================================================================== -->
<!-- Compile scratchpad classes -->
<!-- =================================================================== -->
<target name="scratchpad.compile" depends="init">
<mkdir dir="${build.scratchpad.classes}"/>
<javac srcdir= "${scratchpad.src.dir}"
destdir= "${build.scratchpad.classes}"
debug= "${build.compiler.debug}"
optimize= "${build.compiler.optimize}"
deprecation= "${build.compiler.deprecation}"
nowarn= "${build.compiler.nowarn}"
classpathref= "classpath">
</javac>
</target>
<!-- =================================================================== -->
<!-- Create scratchpad jar -->
<!-- =================================================================== -->
<target name="scratchpad.jar" depends="scratchpad.compile">
<mkdir dir="${build.scratchpad.dir}"/>
<jar destfile="${build.scratchpad.dir}/xml-forrest-scratchpad.jar"
basedir="${build.scratchpad.classes}"/>
</target>
<!-- =================================================================== -->
<!-- Compile Cocoon components -->
<!-- =================================================================== -->
<target name="components.compile" depends="init">
<mkdir dir="${build.components.classes}"/>
<javac srcdir= "${components.src.dir}"
destdir= "${build.components.classes}"
debug= "${build.compiler.debug}"
optimize= "${build.compiler.optimize}"
deprecation= "${build.compiler.deprecation}"
nowarn= "${build.compiler.nowarn}"
classpathref= "classpath">
</javac>
</target>
<!-- =================================================================== -->
<!-- Jar Cocoon components -->
<!-- =================================================================== -->
<target name="components.jar" depends="components.compile">
<mkdir dir="${build.components.dir}"/>
<jar destfile="${build.components.dir}/xml-forrest-components.jar"
basedir="${build.components.classes}"/>
</target>
<!-- =================================================================== -->
<!-- Generate DTDs with entities expanded -->
<!-- =================================================================== -->
<target name='expand-dtd' depends="init" description="Generates '-full' DTDs,
with all entity refs expanded, for use with catalog-ignorant editors like
IDEA">
<taskdef name="dtd2xml" classpathref="classpath" classname="org.cyberneko.dtd.anttasks.DTD2XML"/>
<property name="dtdx.dir" location="build/tmp/dtdx"/>
<mkdir dir="${dtdx.dir}"/>
<!-- Generate an intermediate XML representation of each DTD -->
<dtd2xml classpathref="classpath" outputDir="${dtdx.dir}" preserveDirs="yes" extension=".dtdx">
<fileset dir="${resource.dir}/schema/dtd">
<include name="changes-v12.dtd"/>
<include name="document-v11.dtd"/>
<include name="document-v12.dtd"/>
<include name="faq-v12.dtd"/>
<include name="howto-v12.dtd"/>
<include name="todo-v12.dtd"/>
<include name="v20a/document-v20.dtd"/>
<include name="v20a/faq-v20.dtd"/>
</fileset>
</dtd2xml>
<!-- Now transform the intermediate format back to the regular DTD format -->
<!-- Note that we could also transform to XSD or RNG -->
<xslt basedir="${dtdx.dir}"
destdir="${dist-shbat.dir}/context/resources/schema/dtd"
extension="-full.dtd"
style="tools/dtdconverters/dtdx2dtd.xsl">
<include name="*.dtdx"/>
<include name="v20a/*.dtdx"/>
</xslt>
</target>
</project>