| <project name="datafu" basedir="." default="all" |
| xmlns:ivy="antlib:org.apache.ivy.ant"> |
| <property file="build.properties" /> |
| |
| <property name="name" value="datafu" /> |
| <property name="display.name" value="DataFu" /> |
| <property name="author" value="Matthew Hayes, Sam Shah" /> |
| <property environment="env" /> |
| |
| <property name="ivy.jar.dir" value="${basedir}/ivy" /> |
| <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy-2.2.0.jar" /> |
| |
| <target name="all" depends="clean, jar, srcjar, docs, coverage" description="Build all artifacts." /> |
| |
| <!-- TODO need a release target --> |
| |
| <target name="install-ivy" description="install ivy"> |
| <path id="ivy.lib.path"> |
| <pathelement location="${ivy.jar.file}"/> |
| </path> |
| <taskdef resource="org/apache/ivy/ant/antlib.xml" |
| uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/> |
| </target> |
| |
| <target name="ivy-resolve" depends="install-ivy" description="retreive dependencies with ivy"> |
| <ivy:retrieve/> |
| </target> |
| |
| <target name="check-licenses" description="checks that source files have license header"> |
| <exec executable="./check-license-headers.sh" failonerror="true"/> |
| </target> |
| |
| <target name="clean-cache" depends="install-ivy" description="clean the ivy cache"> |
| <ivy:cleancache /> |
| </target> |
| |
| <path id="main-classpath"> |
| <fileset dir="${lib.dir}"> |
| <include name="*.jar" /> |
| </fileset> |
| <pathelement path="${classes.dir}" /> |
| </path> |
| |
| <path id="cobertura.classpath"> |
| <fileset dir="${cobertura.dir}"> |
| <include name="cobertura.jar" /> |
| <include name="lib/**/*.jar" /> |
| </fileset> |
| </path> |
| |
| <taskdef classpathref="cobertura.classpath" resource="tasks.properties" /> |
| |
| <path id="base-test-classpath"> |
| <fileset dir="${lib.dir}"> |
| <include name="*.jar" /> |
| </fileset> |
| <fileset dir="${basedir}/otherlibs"> |
| <include name="*.jar" /> |
| </fileset> |
| <pathelement path="${pigtestclasses.dir}" /> |
| <pathelement path="${unittestclasses.dir}" /> |
| </path> |
| |
| <path id="test-classpath"> |
| <path refid="base-test-classpath" /> |
| <!-- Use non-instrumented JARs for normal testing, otherwise it is 15% slower to run the tests --> |
| <fileset dir="${dist.dir}"> |
| <include name="*.jar" /> |
| </fileset> |
| </path> |
| |
| <path id="instrumented-test-classpath"> |
| <path refid="base-test-classpath" /> |
| <path refid="cobertura.classpath" /> |
| <!-- Use instrumented JARs --> |
| <fileset dir="${instrumented.dir}"> |
| <include name="*.jar" /> |
| </fileset> |
| </path> |
| |
| <macrodef name="replace-dir"> |
| <attribute name="dir" /> |
| <sequential> |
| <delete dir="@{dir}" /> |
| <mkdir dir="@{dir}" /> |
| </sequential> |
| </macrodef> |
| |
| <target name="clean" description="Delete generated files."> |
| <delete dir="${lib.dir}" /> |
| <delete dir="${dist.dir}" /> |
| <delete dir="${docs.dir}" /> |
| <delete dir="${report.dir}" /> |
| <delete dir="${coveragereport.dir}"/> |
| <delete dir="${instrumented.dir}"/> |
| <delete dir="test-output"/> |
| <delete file="cobertura.ser"/> |
| </target> |
| |
| <target name="build" depends="ivy-resolve" description="Compile main source tree java files"> |
| <replace-dir dir="${classes.dir}" /> |
| <javac destdir="${classes.dir}" target="1.5" debug="true" deprecation="false" failonerror="true" includeantruntime="false"> |
| <src path="${java.dir}" /> |
| <exclude name="datafu/linkedin/**"/> |
| <classpath refid="main-classpath" /> |
| </javac> |
| </target> |
| |
| <target name="build-unit-tests" depends="build" description="Compile unit test classes"> |
| <replace-dir dir="${unittestclasses.dir}" /> |
| <javac destdir="${unittestclasses.dir}" target="1.5" debug="true" deprecation="false" failonerror="true" includeantruntime="false"> |
| <src path="${unittestsrc.dir}" /> |
| <classpath refid="main-classpath" /> |
| </javac> |
| </target> |
| |
| <target name="build-pig-tests" depends="build, build-unit-tests" description="Compile pig test classes"> |
| <replace-dir dir="${pigtestclasses.dir}" /> |
| <copy todir="${pigtestclasses.dir}"> |
| <fileset dir="${pigtestsrc.dir}"> |
| <exclude name="**/*.java" /> |
| </fileset> |
| </copy> |
| <javac destdir="${pigtestclasses.dir}" target="1.5" debug="true" deprecation="false" failonerror="true" includeantruntime="false"> |
| <src path="${pigtestsrc.dir}" /> |
| <classpath refid="test-classpath" /> |
| </javac> |
| </target> |
| |
| <target name="jar-core" depends="build" description="Build the JAR file with the core code from the library"> |
| <delete file="${dist.dir}/${name}-${curr.release}.jar" /> |
| <jar destfile="${dist.dir}/${name}-${curr.release}.jar"> |
| <fileset dir="${classes.dir}"> |
| <include name="**/*.*" /> |
| </fileset> |
| </jar> |
| </target> |
| |
| <target name="jar-fastutil" depends="jar-core" description="Builds the JAR with fastutil included"> |
| <delete file="${dist.dir}/${name}-${curr.release}-orig.jar" /> |
| <move file="${dist.dir}/${name}-${curr.release}.jar" tofile="${dist.dir}/${name}-${curr.release}-orig.jar" /> |
| <java jar="${tools.dir}/autojar.jar" fork="true"> |
| <arg line="-baeq -o ${dist.dir}/${name}-${curr.release}.jar -c ${lib.dir}/fastutil-6.3.jar ${dist.dir}/${name}-${curr.release}-orig.jar" /> |
| </java> |
| <delete file="${dist.dir}/${name}-${curr.release}-orig.jar" /> |
| </target> |
| |
| <target name="jar" depends="jar-fastutil" description="Builds the final JAR"> |
| <delete file="${dist.dir}/${name}-${curr.release}-orig.jar" /> |
| <move file="${dist.dir}/${name}-${curr.release}.jar" tofile="${dist.dir}/${name}-${curr.release}-orig.jar" /> |
| <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="tools/jarjar-1.1.jar"/> |
| <jarjar jarfile="${dist.dir}/${name}-${curr.release}.jar"> |
| <zipfileset src="${dist.dir}/${name}-${curr.release}-orig.jar"/> |
| <rule pattern="it.unimi.dsi.fastutil.**" result="datafu.it.unimi.dsi.fastutil.@1"/> |
| </jarjar> |
| <delete file="${dist.dir}/${name}-${curr.release}-orig.jar" /> |
| </target> |
| |
| <target name="jar-instrumented" depends="jar" description="Build an instrumented jar"> |
| <delete file="cobertura.ser" /> |
| <replace-dir dir="${instrumented.dir}" /> |
| <cobertura-instrument todir="${instrumented.dir}"> |
| <includeClasses regex=".*datafu.*" /> |
| <excludeClasses regex=".*fastutil.*" /> |
| <excludeClasses regex=".*test.*" /> |
| <!-- Code coverage on LinkedIn specific code is not a priority right now --> |
| <excludeClasses regex=".*linkedin.*"/> |
| <instrumentationClasspath> |
| <pathelement location="${dist.dir}"/> |
| </instrumentationClasspath> |
| </cobertura-instrument> |
| <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="tools/jarjar-1.1.jar"/> |
| <delete file="${instrumented.dir}/${name}-${curr.release}.jar" /> |
| <!-- Classes are now instrumented, but we need to merge back with original JAR to get back what was lost, since |
| we don't instrument everything and therefore classes are missing form the instrumented directory. --> |
| <jarjar jarfile="${instrumented.dir}/${name}-${curr.release}.jar"> |
| <zipfileset src="${dist.dir}/${name}-${curr.release}.jar"/> |
| <!-- Classes in instrumented directory come last so they take precedence over the classes in the JAR. |
| We need to include the JAR so we get the fastutil classes. The fastutil classes are not instrumented (by design), |
| so they are not in the instrumented directory. --> |
| <fileset dir="${instrumented.dir}" /> |
| </jarjar> |
| </target> |
| |
| <target name="test-unit" depends="build-unit-tests, jar" description="Runs the unit tests"> |
| <taskdef resource="testngtasks" classpath="lib/testng-6.2.jar"/> |
| <testng classpathref="test-classpath" |
| outputDir="${report.unit.dir}" > |
| <sysproperty key="datafu.jar.dir" value="${dist.dir}" /> |
| <classfileset dir="${unittestclasses.dir}" includes="**/*.class" /> |
| </testng> |
| </target> |
| |
| <target name="test-pig" depends="build-pig-tests, jar" description="Runs the pig tests"> |
| <taskdef resource="testngtasks" classpath="lib/testng-6.2.jar"/> |
| <testng classpathref="test-classpath" |
| outputDir="${report.pig.dir}" verbose="2"> |
| <jvmarg value="-Xmx1G" /> |
| <sysproperty key="datafu.jar.dir" value="${dist.dir}" /> |
| <classfileset dir="${pigtestclasses.dir}" includes="**/*.class" /> |
| </testng> |
| </target> |
| |
| <target name="test-instrumented" depends="build-pig-tests, build-unit-tests, jar-instrumented" description="Runs the tests with instrumented JARs"> |
| <taskdef resource="testngtasks" classpath="lib/testng-6.2.jar"/> |
| <testng classpathref="instrumented-test-classpath" |
| outputDir="${report.unit.dir}" > |
| <jvmarg value="-Xmx1G" /> |
| <sysproperty key="datafu.jar.dir" value="${instrumented.dir}" /> |
| <classfileset dir="${pigtestclasses.dir}" includes="**/*.class" /> |
| <classfileset dir="${unittestclasses.dir}" includes="**/*.class" /> |
| </testng> |
| </target> |
| |
| <target name="coverage" depends="test-instrumented" description="Generates the code coverage report"> |
| <replace-dir dir="${coveragereport.dir}" /> |
| <cobertura-report format="html" destdir="${coveragereport.dir}"> |
| <fileset dir="${java.dir}"> |
| <include name="**/*.java" /> |
| </fileset> |
| </cobertura-report> |
| |
| <!-- Build a WAR containing the coverage report which can be deployed to tomcat --> |
| <mkdir dir="${dist.dir}" /> |
| <war destfile="${dist.dir}/${name}-coverage.war" needxmlfile="false"> |
| <fileset dir="${coveragereport.dir}" /> |
| </war> |
| </target> |
| |
| <target name="test" depends="test-unit, test-pig" description="Runs all tests"> |
| </target> |
| |
| <target name="srcjar" description="Build source jar file"> |
| <mkdir dir="${dist.dir}" /> |
| <jar destfile="${dist.dir}/${name}-${curr.release}-sources.jar"> |
| <fileset dir="${java.dir}"> |
| <include name="**/*.java" /> |
| </fileset> |
| </jar> |
| </target> |
| |
| <macrodef name="make-javadocs"> |
| <attribute name="dir" /> |
| <attribute name="packagenames" /> |
| <attribute name="javadir" /> |
| <sequential> |
| <replace-dir dir="@{dir}" /> |
| <javadoc sourcepath="@{javadir}" destdir="@{dir}" windowtitle="${display.name}" source="1.5" author="true" version="true" use="true" packagenames="@{packagenames}"> |
| <doctitle>${display.name}</doctitle> |
| <bottom>${author}</bottom> |
| <classpath refid="main-classpath" /> |
| </javadoc> |
| </sequential> |
| </macrodef> |
| |
| <target name="docs" description="Create complete Javadoc documentation"> |
| <delete dir="${javadoc.dir}" /> |
| <make-javadocs dir="${javadoc.dir}" packagenames="*" javadir="${java.dir}"/> |
| |
| <!-- Make javadoc JAR --> |
| <mkdir dir="${dist.dir}" /> |
| <jar destfile="${dist.dir}/${name}-${curr.release}-javadoc.jar"> |
| <fileset dir="${javadoc.dir}"> |
| <include name="**/*.*" /> |
| </fileset> |
| </jar> |
| |
| <!-- Make a WAR for the docs so can be deployed to tomcat --> |
| <mkdir dir="${dist.dir}" /> |
| <war destfile="${dist.dir}/${name}-docs.war" needxmlfile="false"> |
| <fileset dir="${javadoc.dir}" /> |
| </war> |
| </target> |
| |
| <macrodef name="create-release-artifacts"> |
| <attribute name="version" /> |
| <sequential> |
| <antcall target="all"/> |
| <zip destfile="${dist.dir}/${name}-@{version}.zip"> |
| <zipfileset dir="." prefix="${name}-@{version}" includes="**"> |
| <exclude name="${dist.dir}/classes/**"/> |
| <exclude name="${dist.dir}/pigtestclasses/**"/> |
| <exclude name="${dist.dir}/unittestclasses/**"/> |
| <exclude name=".git*/**"/> |
| <exclude name="input"/> |
| <exclude name="pigunit-input-overriden.txt"/> |
| </zipfileset> |
| </zip> |
| <tar destfile="${dist.dir}/${name}-@{version}.tar.gz" compression="gzip" longfile="gnu"> |
| <tarfileset dir="." prefix="${name}-@{version}" includes="**"> |
| <exclude name="${dist.dir}/classes/**"/> |
| <exclude name="${dist.dir}/pigtestclasses/**"/> |
| <exclude name="${dist.dir}/unittestclasses/**"/> |
| <exclude name="${dist.dir}/*.zip"/> |
| <exclude name=".git*/**"/> |
| <exclude name="input"/> |
| <exclude name="pigunit-input-overriden.txt"/> |
| </tarfileset> |
| </tar> |
| </sequential> |
| </macrodef> |
| |
| <target name="release" description="Create a release zip file with everything pre-built."> |
| <create-release-artifacts version="${curr.release}" /> |
| </target> |
| |
| </project> |