summaryrefslogtreecommitdiffstats
path: root/maths/build.xml
diff options
context:
space:
mode:
Diffstat (limited to 'maths/build.xml')
-rw-r--r--maths/build.xml292
1 files changed, 292 insertions, 0 deletions
diff --git a/maths/build.xml b/maths/build.xml
new file mode 100644
index 00000000..c666ff84
--- /dev/null
+++ b/maths/build.xml
@@ -0,0 +1,292 @@
+<!-- =========================================================================
+ Copyright 2006-2012 Daniel W. Dyer
+
+ 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 name="uncommons-maths"
+ default="dist"
+ basedir="."
+ xmlns:uncommons="antlib:org.uncommons.antlib">
+ <description>Ant build file for Uncommons Maths library.</description>
+
+<!-- ==================================================================
+ GLOBAL BUILD PROPERTIES
+=================================================================== -->
+
+ <!-- Project-global locations. -->
+ <property name="conf.dir" value="etc" />
+ <property name="lib.dir" value="lib" />
+ <property name="lib.compiletime" value="${lib.dir}/compiletime" />
+ <property name="lib.runtime" value="${lib.dir}/runtime" />
+ <property name="dist.dir" value="./dist" />
+ <property name="docs.dir" value="./docs" />
+ <property name="coverage.dir" value="${docs.dir}/coverage" />
+ <property name="test-results.dir" value="${docs.dir}/test-results" />
+ <property name="release.dir" value="release" />
+ <property name="web.dir" value="website" />
+ <property name="temp.dir" value="temp" />
+
+ <!-- Classpath for compilation and tests. -->
+ <path id="base.path">
+ <fileset dir="${lib.dir}">
+ <include name="**/*.jar" />
+ </fileset>
+ </path>
+
+ <property name="version" value="1.2.3"/>
+ <property name="artifact.identifier" value="uncommons-maths-${version}"/>
+
+ <!-- This is the minimum coverage percentage (for both lines and
+ branches) that will be tolerated. This is used to prevent
+ regressions in coverage. The threshold will be raised as
+ test coverage improves. -->
+ <property name="minimum.coverage" value="95" />
+
+ <taskdef uri="antlib:org.uncommons.antlib"
+ resource="org/uncommons/antlib/antlib.xml"
+ classpathref="base.path"/>
+
+
+ <!-- ==================================================================
+ MACROS
+ =================================================================== -->
+
+ <macrodef name="diehard">
+ <attribute name="rng.class"/>
+ <attribute name="results.file"/>
+ <sequential>
+ <mkdir dir="${temp.dir}" />
+ <delete file="${temp.dir}/random.dat" />
+ <java classname="org.uncommons.maths.random.DiehardInputGenerator" classpath="core/build/classes/main">
+ <arg value="@{rng.class}"/>
+ <arg value="${temp.dir}/random.dat"/>
+ </java>
+ <exec dir="${lib.compiletime}/diehard"
+ executable="${lib.compiletime}/diehard/diehard"
+ output="@{results.file}"
+ input="${lib.compiletime}/diehard/input.txt"/>
+ </sequential>
+ </macrodef>
+
+
+<!-- ==================================================================
+ TARGETS FOR BUILDING THE SOFTWARE
+=================================================================== -->
+
+ <!-- Builds everything from scratch. -->
+ <target name="all"
+ depends="clean, dist, test, docs"
+ description="Builds everything, excluding docs, from scratch."/>
+
+
+ <!-- Deletes all directories and files created by the build process. -->
+ <target name="clean"
+ description="Remove all files created by the build process." >
+ <uncommons:clean module="core" />
+ <uncommons:clean module="demo" />
+ <delete dir="${docs.dir}" />
+ <delete dir="${dist.dir}" />
+ <delete dir="${release.dir}" />
+ <delete dir="${temp.dir}" />
+ <delete file="velocity.log" />
+ </target>
+
+
+ <target name="core"
+ description="Builds Uncommons Maths module.">
+ <uncommons:compile module="core" />
+ <uncommons:jar module="core" jarfile="${artifact.identifier}-temp.jar"/>
+ <typedef resource="aQute/bnd/ant/taskdef.properties" classpathref="base.path" />
+ <bnd classpath="core/${build.dir}/${artifact.identifier}-temp.jar"
+ eclipse="false"
+ failok="false"
+ exceptions="true"
+ files="uncommons-maths.bnd"
+ output="core/${build.dir}/${artifact.identifier}.jar"/>
+ <!-- Only need one JAR, so delete the non-OSGi version. -->
+ <delete file="core/${build.dir}/${artifact.identifier}-temp.jar" />
+ </target>
+
+
+ <target name="demo"
+ depends="core"
+ description="Builds the demo module.">
+ <uncommons:compile module="demo" />
+ <uncommons:jar module="demo"
+ jarfile="uncommons-maths-demo-${version}.jar"
+ classpath="${artifact.identifier}.jar jfreechart-1.0.8.jar jcommon-1.0.12.jar"
+ mainclass="org.uncommons.maths.demo.RandomDemo" />
+ </target>
+
+
+ <!-- Copy all necessary files to distribution directory. -->
+ <target name="dist"
+ depends="core, demo"
+ description="Generate the project distribution." >
+ <uncommons:dist />
+
+ <mkdir dir="${dist.dir}/src" />
+ <copy todir="${dist.dir}/src" flatten="true">
+ <fileset dir="." includes="**/${build.dir}/*-src.jar"/>
+ </copy>
+ </target>
+
+
+ <!-- Build source JAR files for inclusion in the release. -->
+ <target name="source" description="Build source JARs.">
+ <uncommons:source module="core" jarfile="${artifact.identifier}-src.jar" />
+ </target>
+
+
+ <!-- Create the release artifacts. -->
+ <target name="release"
+ depends="clean, source, dist, test, docs"
+ description="Creates the release archives.">
+ <uncommons:release name="${artifact.identifier}" />
+ </target>
+
+
+ <target name="release-maven"
+ depends="clean, dist"
+ description="Deploys the core Maths module to the Java.net Maven repository.">
+ <uncommons:maven-deploy module="core"
+ version="${version}"
+ username="${maven.user}"
+ password="${maven.password}"/>
+ </target>
+
+<!-- ==================================================================
+ TARGETS FOR GENERATING TEST REPORTS & DOCUMENTATION
+ =================================================================== -->
+
+ <!-- Runs unit tests for all modules. -->
+ <target name="test"
+ depends="dist"
+ description="Run the unit test suite.">
+ <mkdir dir="${temp.dir}" />
+
+ <!-- Bytecode instrumentation to enable collection of test coverage data. -->
+ <taskdef resource="tasks.properties" classpathref="base.path" />
+ <cobertura-instrument todir="${temp.dir}"
+ datafile="${temp.dir}/cobertura.ser">
+ <fileset dir="${dist.dir}" includes="${artifact.identifier}.jar"/>
+ </cobertura-instrument>
+
+ <!-- Run the unit tests on the instrumented classes. -->
+ <taskdef resource="testngtasks" classpathref="base.path"/>
+ <path id="test.path">
+ <dirset dir=".">
+ <include name="core/${classes.dir}/test" />
+ </dirset>
+ <fileset dir="${temp.dir}" includes="*.jar"/>
+ <path refid="base.path" />
+ </path>
+ <mkdir dir="${test-results.dir}" />
+ <testng classpathref="test.path"
+ outputdir="${test-results.dir}"
+ haltonfailure="false"
+ useDefaultListeners="false"
+ listeners="org.uncommons.reportng.HTMLReporter,
+ org.uncommons.reportng.JUnitXMLReporter">
+ <xmlfileset dir="${conf.dir}" includes="testng.xml"/>
+ <sysproperty key="org.uncommons.maths.random.debug"
+ value="true" />
+ <sysproperty key="net.sourceforge.cobertura.datafile"
+ file="${temp.dir}/cobertura.ser" />
+ <sysproperty key="org.uncommons.reportng.title"
+ value="Uncommons Maths Unit Test Report" />
+ <sysproperty key="org.uncommons.reportng.coverage-report"
+ value="../../coverage/index.html" />
+ </testng>
+
+ <!-- Generate the HTML coverage report. -->
+ <mkdir dir="${coverage.dir}" />
+ <cobertura-report format="html"
+ destdir="${coverage.dir}"
+ datafile="${temp.dir}/cobertura.ser">
+ <fileset dir="core/${java.dir}/main">
+ <include name="**/*.java" />
+ </fileset>
+ </cobertura-report>
+ <!-- Generate an XML report for Hudson. -->
+ <cobertura-report format="xml"
+ destdir="${coverage.dir}"
+ datafile="${temp.dir}/cobertura.ser">
+ <fileset dir="core/${java.dir}/main">
+ <include name="**/*.java" />
+ </fileset>
+ </cobertura-report>
+
+ <!-- If the coverage is poor, fail. -->
+ <cobertura-check totallinerate="${minimum.coverage}"
+ totalbranchrate="${minimum.coverage}"
+ datafile="${temp.dir}/cobertura.ser"/>
+
+ <!-- Clean up afterwards. -->
+ <delete dir="${temp.dir}" />
+ <delete file="velocity.log" />
+ </target>
+
+
+ <target name="diehard"
+ description="Run DIEHARD test suite against each RNG."
+ depends="core">
+ <delete dir="${docs.dir}/diehard" />
+ <mkdir dir="${docs.dir}/diehard" />
+ <diehard rng.class="org.uncommons.maths.random.AESCounterRNG"
+ results.file="${docs.dir}/diehard/aes.txt" />
+ <diehard rng.class="org.uncommons.maths.random.CellularAutomatonRNG"
+ results.file="${docs.dir}/diehard/automaton.txt" />
+ <diehard rng.class="org.uncommons.maths.random.CMWC4096RNG"
+ results.file="${docs.dir}/diehard/cmwc.txt" />
+ <diehard rng.class="org.uncommons.maths.random.MersenneTwisterRNG"
+ results.file="${docs.dir}/diehard/mersenne.txt" />
+ <diehard rng.class="org.uncommons.maths.random.XORShiftRNG"
+ results.file="${docs.dir}/diehard/xor.txt" />
+ <!-- Test java.util.Random for comparison. -->
+ <diehard rng.class="org.uncommons.maths.random.JavaRNG"
+ results.file="${docs.dir}/diehard/java.txt" />
+ </target>
+
+
+ <!-- Generates API documentation for all modules. -->
+ <target name="docs"
+ description="Generates Javadoc API documentation.">
+ <uncommons:javadoc title="Uncommons Maths API"
+ version="${version}"
+ excludes="demo/**/*.java" />
+ </target>
+
+
+<!-- ==================================================================
+ TARGETS FOR UPDATING THE PROJECT WEBSITE
+ =================================================================== -->
+
+ <!-- Refresh the API documentation tree for the project website. -->
+ <target name="website-docs"
+ description="Re-builds the website Javadocs."
+ depends="dist">
+ <!-- Delete all existing HTML files and then regenerate the docs over the top. -->
+ <delete>
+ <fileset dir="${web.dir}/api">
+ <include name="**/*.html" />
+ </fileset>
+ </delete>
+ <uncommons:javadoc dir="${web.dir}/api"
+ title="Uncommons Maths API"
+ version="${version}"
+ excludes="demo/**/*.java" />
+ <copy todir="${web.dir}" file="./CHANGELOG.txt" />
+ </target>
+
+</project>