blob: 269b126dbd721d60bbafb2f38209e8a66f40532a [file] [log] [blame]
<?xml version="1.0" standalone='yes'?>
<project name="Jackson JSON parser" basedir="." default="readme">
<!-- Source directories -->
<property name="SrcDir" location="${basedir}/src" />
<property name="JavaSrcDir" location="${SrcDir}/java" />
<property name="TestSrcDir" location="${SrcDir}/test" />
<property name="RelNotesDir" location="${basedir}/release-notes" />
<!-- Libs -->
<property name="LibDir" location="${basedir}/lib" />
<!-- Build-related -->
<property name="BuildDir" location="${basedir}/build" />
<property name="BuildClassesDir" location="${BuildDir}/classes" />
<property name="EmmaBuildClassesDir" location="${BuildDir}/emma-classes" />
<!-- Documentation -->
<property name="DocDir" location="${basedir}/doc" />
<property name="JavaDocDir" location="${BuildDir}/javadoc" />
<!-- Test suite -->
<property name="TestDir" location="${basedir}/test" />
<property name="TestClassesDir" location="${TestDir}/classes" />
<property name="TestResultsDir" location="${TestDir}/results" />
<property name="TestXmlResultsDir" location="${TestResultsDir}/xml" />
<property name="StaxTestClassesDir" location="${TestDir}/staxtest-classes" />
<!-- Distribution -->
<property name="DistDir" location="${basedir}/dist" />
<!-- Version information -->
<!-- Version -->
<property name="JSON_TITLE" value="Json - JavaScript Object Notation" />
<property name="JSON_VERSION" value="1.0" />
<property name="JSON_VENDOR" value="http://www.ietf.org/rfc/rfc4627.txt" />
<property name="IMPL_TITLE" value="Jackson JSON parser" />
<property name="IMPL_VERSION" value="0.9.1" />
<property name="IMPL_VENDOR" value="http://www.cowtowncoder.com/" />
<!-- jars needed for compilation? None as of yet -->
<path id="compile-classpath">
</path>
<path id="junit-libs">
<fileset dir="${LibDir}">
<include name="junit/junit*.jar" />
</fileset>
</path>
<!-- Source files to include in source packages (tar, zip) -->
<patternset id="dist-src-files">
<include name="src/**/*.java" />
<include name="release-notes/*" />
<include name="build.xml" />
<include name="project.xml" />
<include name="src/maven/*.pom" />
<!-- need jars for auxiliary tasks (tests), although jackson
itself does not depend on any other packages, just JDK 1.5
-->
<include name="lib/**/*.jar" />
<include name="samples/**/*.jsn" />
</patternset>
<!-- Core Woodstox class files common to all license flavours: -->
<patternset id="dist-class-files">
<include name="org/codehaus/**/*.class" />
<include name="META-INF/services/javax.xml.stream.*" />
</patternset>
<!-- Support for Emma (http://emma.sourceforge.net) code
- coverage library
-->
<property name="emma.dir" value="${LibDir}/emma" />
<property name="emma.coverage.dir" value="${BuildDir}/coverage" />
<path id="emma.lib">
<pathelement location="${emma.dir}/emma.jar" />
<pathelement location="${emma.dir}/emma_ant.jar" />
</path>
<taskdef classpathref="emma.lib" resource="emma_ant.properties" />
<!-- Support for Cobertura code coverage tool -->
<property name="cobertura.coverage.dir" value="${BuildDir}/coverage" />
<path id="cobertura.lib">
<fileset dir="${LibDir}/cobertura" includes="*.jar" />
</path>
<taskdef classpathref="cobertura.lib" resource="tasks.properties" />
<!--*********************************************************************-->
<!-- The readme target shows a brief description of all targets -->
<!-- supported by this ant build file -->
<!--*********************************************************************-->
<target name="readme">
<echo message = "${ProjectName}'s Available Targets" />
<echo message = "---------------------------------------------------" />
<echo message = "1) readme - Displays this information (default target)." />
<echo message = "2) clean - Remove any generated files/directories." />
<echo message = "3) compile - Compile all non-test ${ProjectName} code." />
<echo message = "4) jars - Compile and create all jars for non-test ${ProjectName} code (see below for specific ones)." />
<echo message = "4b) jar.asl - Compile and create jar for non-test ${ProjectName} cod, under Apache (2.0) license." />
<echo message = "5) javadoc - Generate ${ProjectName} code documentation." />
<echo message = "6) test.compile - Compile ${ProjectName} code and test code" />
<echo message = " for JUnit tests." />
<echo message = "7) test - Run JUnit tests." />
<echo message = "8) dist - Create distribution directory and copy necessary files there" />
<echo message = "9) all - Run the clean, compile, javadoc," />
<echo message = " test and dist targets." />
<echo message = "" />
<echo message = "Available command-line arguments:" />
<echo message = "---------------------------------" />
<echo message = "none" />
</target>
<target name="prepare">
<!-- make build directories -->
<mkdir dir="${BuildDir}" />
<mkdir dir="${BuildClassesDir}" />
<!-- make docs directories -->
<mkdir dir="${DocDir}" />
<mkdir dir="${JavaDocDir}" />
<!-- make test output directories -->
<mkdir dir="${TestDir}" />
<mkdir dir="${TestClassesDir}" />
<mkdir dir="${TestResultsDir}" />
<mkdir dir="${TestXmlResultsDir}" />
<!-- and finally distribution dir -->
<mkdir dir="${DistDir}" />
</target>
<!-- ***********************************************
- supporting dummy tasks
- ***********************************************-->
<!-- ***********************************************
- clean - Removes all generated files/directories
- ***********************************************-->
<target name="clean">
<delete dir="${BuildDir}"/>
<delete dir="${DocDir}"/>
<delete dir="${TestDir}"/>
<delete dir="${DistDir}"/>
<delete file="coverage.ec" />
</target>
<target name="compile" depends="prepare">
<javac SrcDir="${JavaSrcDir}" destdir="${BuildClassesDir}"
debug="true"
>
<compilerarg value="-Xlint:unchecked" />
<include name="org/codehaus/**/*.java" />
<include name="test/**/*.java" />
<classpath refid="compile-classpath" />
</javac>
<!-- Let's also compile micro-benchmarks... -->
<javac SrcDir="${SrcDir}/perf" destdir="${BuildClassesDir}"
debug="false"
>
<classpath>
<fileset dir="${LibDir}/perf">
<include name="*.jar" />
</fileset>
</classpath>
<include name="**/*.java" />
</javac>
</target>
<!-- Dummy target that just includes all individual jars... -->
<target name="jars"
depends="jar.asl"
/>
<target name="jar.asl" depends="compile">
<jar jarfile="${BuildDir}/jackson-${IMPL_VERSION}.jar"
filesonly="true" >
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Specification-Title" value="${JSON_TITLE}"/>
<attribute name="Specification-Version" value="${JSON_VERSION}"/>
<attribute name="Specification-Vendor" value="${JSON_VENDOR}"/>
<attribute name="Implementation-Title" value="${IMPL_TITLE}"/>
<attribute name="Implementation-Version" value="${IMPL_VERSION}"/>
<attribute name="Implementation-Vendor" value="${IMPL_VENDOR}"/>
</manifest>
<fileset dir="${BuildClassesDir}">
<patternset refid="dist-class-files" />
</fileset>
<metainf dir="${RelNotesDir}">
<include name="LICENSE" />
<include name="NOTICE" />
<include name="ASL2.0" />
</metainf>
</jar>
</target>
<target name="javadoc" depends="prepare">
<!-- Build a dirpath that contains just the "source" tree -->
<javadoc windowtitle="${ProjectName}"
destdir="${JavaDocDir}"
author="true"
version="true">
<packageset dir="${JavaSrcDir}" defaultexcludes="yes">
<include name="org/codehaus/**" />
</packageset>
<classpath refid="compile-classpath" />
</javadoc>
</target>
<target name="dist" depends="compile,jars,javadoc"
>
<!-- First, let's copy the binary jars to dist -->
<copy todir="${DistDir}">
<fileset dir="${BuildDir}" includes="*.jar" />
</copy>
<!-- Then let's create the source distribution tar package
-->
<tar basedir="${basedir}" destfile="${DistDir}/jackson-src-${IMPL_VERSION}.tar">
<patternset refid="dist-src-files" />
</tar>
<gzip zipfile="${DistDir}/jackson-src-${IMPL_VERSION}.tar.gz" src="${DistDir}/jackson-src-${IMPL_VERSION}.tar" />
<delete file="${DistDir}/jackson-src-${IMPL_VERSION}.tar" />
<!-- as well as zip
-->
<zip basedir="${basedir}" destfile="${DistDir}/jackson-src-${IMPL_VERSION}.zip">
<patternset refid="dist-src-files" />
</zip>
<!-- Then copy javadocs -->
<copy todir="${DistDir}">
<fileset dir="${JavaDocDir}/.." includes="javadoc/**/*" />
</copy>
<!-- Plus, let's also just copy README and compatibility files, in
addition to being included in source package
-->
<copy todir="${DistDir}" >
<fileset dir="." includes="release-notes/*" />
<fileset dir="." includes="release-notes/asl/*" />
<fileset dir="." includes="release-notes/lgpl/*" />
</copy>
<!-- And also additional Maven stuff -->
<copy todir="${DistDir}">
<fileset dir="${SrcDir}/maven" includes="*.pom" />
<globmapper from="*.pom" to="*-${IMPL_VERSION}.pom" />
<filterset>
<filter token="VERSION" value="${IMPL_VERSION}" />
</filterset>
</copy>
</target>
<target name="all" depends="clean,javadoc,test,dist">
<!-- This target simply depends on others to do its job -->
</target>
<!--*********************************************************************-->
<!-- Tasks from here down are in support of junit tests. -->
<!--*********************************************************************-->
<target name="all-tests" depends="test" />
<!-- Compiling and running test cases
-->
<target name="test.compile" depends="compile">
<javac SrcDir="${TestSrcDir}" destdir="${TestClassesDir}"
debug="true"
>
<include name="**/*.java" />
<classpath refid="compile-classpath" />
<classpath>
<pathelement path="${BuildClassesDir}"/>
<path refid="junit-libs"/>
</classpath>
</javac>
</target>
<target name="test" depends="test.compile">
<!-- showoutput 'yes' to allow outputting debug msgs... -->
<junit fork="no" printsummary="yes" haltonfailure="no"
showoutput="yes">
<batchtest fork="no" todir="${TestXmlResultsDir}">
<fileset dir="${TestClassesDir}">
<!-- Need to exclude inner classes... -->
<exclude name="**/*$*.class"/>
<include name="**/Test*.class"/>
</fileset>
</batchtest>
<formatter type="xml" />
<classpath refid="compile-classpath" />
<classpath>
<pathelement path="${BuildClassesDir}" />
<pathelement location="${TestClassesDir}" />
<path refid="junit-libs"/>
</classpath>
</junit>
<junitreport todir="${TestResultsDir}">
<fileset dir="${TestXmlResultsDir}">
<include name="TEST-*.xml" />
</fileset>
<report todir="${TestResultsDir}" />
</junitreport>
</target>
<target name="test-emma" depends="test.compile">
<!-- First, need to instrument using Emma -->
<!-- This is silly, but apparently the only way to avoid
instrumenting and testing test/perf auxiliary classes
-->
<property name="emma.tmp.dir" value="${BuildDir}/emma-tmp" />
<path id="emma-classpath">
<pathelement location="${emma.tmp.dir}" />
</path>
<copy toDir="${emma.tmp.dir}">
<fileset dir="${BuildClassesDir}">
<include name="org/codehaus/**/*.class" />
</fileset>
</copy>
<emma enabled="true"> <!-- verbosity="verbose" -->
<instr instrpathref="emma-classpath"
destdir="${EmmaBuildClassesDir}"
metadatafile="${emma.coverage.dir}/metadata.emma"
merge="true"
mode="fullcopy"
/>
</emma>
<!-- Ok, so let's just nuke the stupid test classes...
- ... for which there are 2 possible locations...
-->
<delete dir="${EmmaBuildClassesDir}/classes/test"/>
<delete dir="${EmmaBuildClassesDir}/test"/>
<!-- Then run tests. Note: need to fork for Emma to work...? -->
<junit fork="once" printsummary="yes" haltonfailure="no"
showoutput="yes">
<batchtest fork="yes" todir="${TestXmlResultsDir}">
<fileset dir="${TestClassesDir}">
<exclude name="**/*$*.class"/>
<!-- Note: to speed up other tests, uncomment these slow ones:
-->
<!--
<exclude name="**/TestStringGeneration.class"/>
-->
<include name="**/Test*.class"/>
</fileset>
</batchtest>
<formatter type="xml" />
<!-- Emma jars: -->
<classpath>
<pathelement path="${EmmaBuildClassesDir}/classes" />
<pathelement location="${LibDir}/emma/emma.jar" />
<path refid="junit-libs"/>
</classpath>
<classpath path="${TestClassesDir}" />
</junit>
<!-- Then Emma coverage reporting... -->
<emma enabled="true"> <!-- verbosity="verbose" -->
<report sourcepath="${JavaSrcDir}" >
<fileset dir="${emma.coverage.dir}" >
<include name="*.emma" />
</fileset>
<fileset dir="${basedir}" >
<include name="coverage.ec" />
</fileset>
<txt outfile="${emma.coverage.dir}/coverage.txt" />
<html outfile="${emma.coverage.dir}/coverage.html" />
</report>
</emma>
<!-- Don't really need actual JUnit output do we? -->
<junitreport todir="${TestResultsDir}">
<fileset dir="${TestXmlResultsDir}">
<include name="TEST-*.xml" />
</fileset>
<report todir="${TestResultsDir}" />
</junitreport>
<!--
-->
</target>
<target name="test-cobertura" depends="test.compile">
<!-- First, need to instrument classes -->
<property name="cobertura.instr.dir" value="${BuildDir}/cobertura-instr" />
<cobertura-instrument todir="${cobertura.instr.dir}">
<fileset dir="${BuildClassesDir}">
<include name="**/*.class"/>
</fileset>
</cobertura-instrument>
<junit fork="once" printsummary="yes" haltonfailure="no" showoutput="yes"
maxmemory="300M"
>
<sysproperty key="net.sourceforge.cobertura.datafile" file="${basedir}/cobertura.ser" />
<batchtest fork="no" todir="${TestXmlResultsDir}">
<fileset dir="${TestClassesDir}">
<!-- Need to exclude inner classes... -->
<exclude name="**/*$*.class"/>
<!-- !!!! TEST -->
<exclude name="**/TestStringGeneration.class"/>
<include name="**/Test*.class"/>
</fileset>
</batchtest>
<formatter type="xml" />
<!-- Order is important: must first have instrumented classes -->
<classpath location="${cobertura.instr.dir}" />
<classpath refid="compile-classpath" />
<!-- Actual tests: -->
<classpath path="${TestClassesDir}" />
<!-- Cobertura support: -->
<classpath refid="cobertura.lib" />
<classpath>
<!-- Note: while this may seem superfluous, it is actually
needed because Cobertura does not instrument things
like interfaces. So some of the class files are
needed from non-instrumented location
-->
<pathelement path="${BuildClassesDir}" />
<path refid="junit-libs"/>
</classpath>
</junit>
<!-- and then reporting -->
<cobertura-report format="html" destdir="${cobertura.coverage.dir}" >
<fileset dir="${JavaSrcDir}">
<include name="**/*.java" />
</fileset>
</cobertura-report>
<!-- Let's also report junit results? (at least if they fail) -->
<!--
<junitreport todir="${TestResultsDir}">
<fileset dir="${TestXmlResultsDir}">
<include name="TEST-*.xml" />
</fileset>
<report todir="${TestResultsDir}" />
</junitreport>
-->
</target>
</project>