| <!-- ========================================================================= |
| 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> |