blob: 9b66b064a2fb2b5e92503320202dc3e24ada3b5f [file] [log] [blame]
<?xml version="1.0"?>
<project name="scene-lib" default="bin">
<property environment="env"/>
<macrodef name="echo-fileset">
<attribute name="filesetref" />
<sequential>
<pathconvert pathsep="
" property="@{filesetref}.echopath">
<path>
<fileset refid="@{filesetref}" />
</path>
</pathconvert>
<echo> ------- echoing fileset @{filesetref} -------</echo>
<echo>${@{filesetref}.echopath}</echo>
</sequential>
</macrodef>
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="ant-contrib.jar" />
</classpath>
</taskdef>
<target name="init-properties">
<condition property="exists.build.properties">
<available file="build.properties"/>
</condition>
<fail
unless="exists.build.properties"
message="Local build.properites file is missing."/>
<property file="build.properties"/>
<fail
unless="global.build.properties"
message="Local build.properties file did not define global buildfile in property global.build.properties"/>
<condition property="exists.global.build.properties">
<available file="${global.build.properties}"/>
</condition>
<fail
unless="exists.global.build.properties"
message="File ${global.build.properties} file not found."/>
<property file="${global.build.properties}"/>
<fail
unless="user.build.properties"
message="Local build.properties file did not define global buildfile in property user.build.properties"/>
<condition property="exists.user.build.properties">
<available file="${user.build.properties}"/>
</condition>
<fail
unless="exists.user.build.properties"
message="File ${user.build.properties} file not found."/>
<property file="${user.build.properties}"/>
</target>
<target name="init-dependencies"
depends="init-properties">
<!-- I should reinstate this after figuring out how to make
it remake only when necessary, not always. (I should
probably do that outside ASM rather than modifying ASM itself?)
And, supply -Dproduct.noshrink to asmx ant command, at least when
testing.
-->
<!--
<ant dir="${asmx}" inheritAll="false" target="bin"/>
-->
<!-- Next 2 lines only for repository version. -->
<!--
<ant dir="${annotations-compiler}" antfile="make/build.xml" inheritAll="false" target="build"/>
<ant dir="${checkers}" inheritAll="false" target="build"/>
-->
</target>
<target name="init-paths">
<path id="sourcepath">
<pathelement location="src"/>
</path>
<path id="testpath">
<pathelement location="test/annotations/tests/executable"/>
<pathelement location="test/annotations/tests/classfile/foo"/>
</path>
<fileset dir="." id="source.files.java">
<include name="src/**/*.java"/>
<exclude name="**/.svn"/>
<exclude name="**/package-info.java"/>
</fileset>
<fileset dir="." id="source.files.java.nopackageinfo">
<include name="src/**/*.java"/>
<exclude name="**/.svn"/>
<exclude name="**/package-info.java"/>
</fileset>
<fileset dir="." id="source.files.java.packageinfo">
<include name="**/package-info.java"/>
</fileset>
<fileset dir="." id="source.files.non-java">
<include name="src/**/*"/>
<exclude name="**/.svn"/>
<exclude name="**/*.java"/>
</fileset>
<path id="javadoc-sourcepath">
<pathelement location="src"/>
</path>
<path id="libpath">
<pathelement location="${asmx}/bin"/>
<pathelement location="${junit}"/>
<pathelement location="${annotation-tools}/annotation-file-utilities/lib/plume-core.jar"/>
<pathelement location="${annotation-tools}/annotation-file-utilities/lib/guava-20.0.jar"/>
<!-- remainder only for repository version -->
<pathelement location="${annotations-compiler}/dist/lib/javac.jar"/>
<pathelement location="${annotations-compiler}/dist/lib/javap.jar"/>
<pathelement location="bin"/>
</path>
</target>
<target name="init" depends="init-properties, init-dependencies, init-paths"/>
<target name="bin-clean">
<delete dir="bin"/>
</target>
<target name="bin-check-uptodate" depends="init">
<uptodate property="source.files.non-java.uptodate">
<srcfiles refid="source.files.non-java"/>
<mapper type="glob" from="src/*" to="bin/*"/>
</uptodate>
<uptodate property="source.files.java.nopackageinfo.uptodate">
<srcfiles refid="source.files.java.nopackageinfo"/>
<mapper type="glob" from="src/*.java" to="bin/*.class"/>
</uptodate>
<!-- I want to say that package-info.java does not force
recompilation if it is older than all source files in its own
package. -->
<uptodate property="source.files.java.packageinfo.uptodate" targetfile="bin">
<srcfiles refid="source.files.java.packageinfo"/>
</uptodate>
<condition property="bin.uptodate">
<and>
<isset property="source.files.non-java.uptodate"/>
<isset property="source.files.java.nopackageinfo.uptodate"/>
<isset property="source.files.java.packageinfo.uptodate"/>
</and>
</condition>
<!-- These print "true" if set and the property name in curly braces, such as "${source.files.java.nopackageinfo.uptodate}", if not set. -->
<echo message="source.files.non-java.uptodate: ${source.files.non-java.uptodate}"/>
<echo message="source.files.java.nopackageinfo.uptodate: ${source.files.java.nopackageinfo.uptodate}"/>
<echo message="source.files.java.packageinfo.uptodate: ${source.files.java.packageinfo.uptodate}"/>
<echo message="bin.uptodate: ${bin.uptodate}"/>
</target>
<target name="bin" depends="init, bin-check-uptodate" unless="bin.uptodate">
<echo message="Running bin"/>
<mkdir dir="bin"/>
<!-- Copy non-java files to bin. These are mostly .jaif files. -->
<copy todir="bin">
<fileset dir="src" excludes="**/*.java"/>
<fileset dir="test" excludes="**/*.java"/>
</copy>
<javac
destdir="bin"
debug="true"
classpathref="libpath"
classpath="${libpath}"
includeantruntime="false"
fork="true"
executable="${annotations-compiler}/dist/bin/javac">
<src refid="sourcepath"/>
<src refid="testpath"/>
<!-- To prevent a cyclic dependency with the Checker
Framework, ignore type annotations in comments here.
A separate target could be added to check the qualifiers
and have them in the generated code. -->
<compilerarg value="-XDTA:noannotationsincomments"/>
<compilerarg value="-Xlint:-options"/>
<compilerarg value="-Werror"/>
<compilerarg value="-version"/>
<!-- Make sure we only have Java 7 source code and generate Java 7 bytecode. -->
<compilerarg value="-source"/>
<compilerarg value="7"/>
<compilerarg value="-target"/>
<compilerarg value="7"/>
<classpath refid="libpath"/>
<!-- TODO: how can we include just these two files in testpath? -->
<compilerarg value="test/annotations/tests/classfile/AnnotationsTest.java"/>
<compilerarg value="test/annotations/tests/classfile/AnnotationVerifier.java"/>
</javac>
<!--
<pathconvert property="libpath" refid="libpath"/>
<pathconvert property="source.files.java.spaceseparated" refid="source.files.java" pathsep=" "/>
<exec executable="javac" failonerror="true">
<arg value="-version"/>
<arg value="-d"/>
<arg value="bin"/>
<arg value="-g"/>
<arg value="-cp"/>
<arg value="${libpath}"/>
<arg line="source.files.java.spaceseparated"/>
</exec>
-->
</target>
<target name="test-scene-lib" depends="init, bin">
<mkdir dir="reports"/>
<junit printsummary="withOutAndErr" showoutput="true" fork="yes" dir="." haltonerror="yes" haltonfailure="yes">
<classpath refid="libpath"/>
<formatter type="plain"/>
<test name="annotations.tests.executable.TestSceneLib" todir="reports"/>
<assertions>
<enable/>
</assertions>
</junit>
</target>
<target name="test-classfile" depends="init, bin">
<mkdir dir="reports"/>
<junit printsummary="withOutAndErr" showoutput="true" fork="yes" dir="." haltonerror="yes" haltonfailure="yes">
<classpath refid="libpath"/>
<formatter type="plain"/>
<test name="annotations.tests.classfile.AnnotationsTest" todir="reports"/>
<assertions>
<enable/>
</assertions>
</junit>
</target>
<target name="test-example" depends="init, bin">
<!-- Working directory is ignored when same JVM is used. That means
that the relative path for ${scene-lib} works only if this target
is invoked from the same directory as the build.xml file appears
in. We can fix the java task by adding this:
fork="true"
dir="${scene-lib}/src/annotations/tests"
but there are other uses of ${scene-lib} in this target.
-->
<java classname="annotations.tests.executable.Example"
output="${scene-lib}/test/annotations/tests/executable/example-stdout.jaif"
classpathref="libpath">
<arg value="${scene-lib}/test/annotations/tests/executable/example-input.jaif" />
<arg value="foo.Bar" />
<arg value="${scene-lib}/test/annotations/tests/executable/example-output.jaif" />
</java>
<condition property="example.output.matches">
<filesmatch file1="${scene-lib}/test/annotations/tests/executable/example-output.jaif.goal"
file2="${scene-lib}/test/annotations/tests/executable/example-output.jaif"/>
</condition>
<!-- Debugging output in case I don't have access to the filesystem. -->
<if>
<isfalse value="${example.output.matches}"/>
<then>
<exec executable="cat">
<arg value="${scene-lib}/test/annotations/tests/executable/example-output.jaif.goal"/>
<arg value="${scene-lib}/test/annotations/tests/executable/example-output.jaif"/>
</exec>
</then>
</if>
<fail unless="example.output.matches"
message="In ${scene-lib}/test/annotations/tests/executable/, file example-output.jaif does not match goal."/>
<condition property="example.stdout.matches">
<filesmatch file1="${scene-lib}/test/annotations/tests/executable/example-stdout.jaif.goal"
file2="${scene-lib}/test/annotations/tests/executable/example-stdout.jaif"/>
</condition>
<fail unless="example.stdout.matches"
message="In ${scene-lib}/test/annotations/tests/executable/, file example-stdout.jaif does not match goal."/>
</target>
<target name="test-clean">
<delete dir="reports"/>
</target>
<target name="test" depends="test-scene-lib, test-classfile, test-example"
description="Run tests"/>
<target name="clean" depends="bin-clean, javadoc-clean, test-clean"
description="Remove generated files"/>
<target name="javadoc-clean">
<delete dir="javadoc"/>
</target>
<target name="javadoc" depends="javadoc-clean, init"
description="Generate Javadoc API documentation">
<javadoc sourcepathref="javadoc-sourcepath"
classpathref="libpath"
packagenames="*"
excludepackagenames=""
Overview="overview.html"
destdir="javadoc"
access="public"
noqualifier="annotations:annotations.el:annotations.field:annotations.io:annotations.io.classfile:annotations.util:annotations.util.coll:java.lang"
failonerror="true"
/>
</target>
<target name="test-package" depends="bin">
<property name="test-package" value="scene-lib-test"/>
<mkdir dir="${test-package}"/>
<mkdir dir="${test-package}/src"/>
<copy todir="${test-package}/src">
<fileset dir="src" excludes="**/.svn"/>
</copy>
<jar destfile="${test-package}/deps.jar">
<fileset dir="${asmx}/bin" includes="org/**"/>
</jar>
<zip destfile="${test-package}.zip">
<zipfileset dir="${test-package}" prefix="${test-package}"/>
</zip>
<delete dir="${test-package}"/>
</target>
<!-- = = = = = = = = = = = = = = = = =
macrodef: echopath
Use as: <echopath pathid="mypath"/>
= = = = = = = = = = = = = = = = = -->
<macrodef name="echopath">
<attribute name="pathid"/>
<sequential>
<property name="line.pathprefix" value="| |-- "/>
<!-- get given path in a printable form -->
<pathconvert pathsep="${line.separator}${line.pathprefix}"
property="echo.@{pathid}"
refid="@{pathid}">
</pathconvert>
<echo>Path @{pathid}</echo>
<echo>${line.pathprefix}${echo.@{pathid}}</echo>
</sequential>
</macrodef>
<target name="etags" depends="tags">
</target>
<target name="tags" description="Create Emacs TAGS table">
<exec executable="/bin/sh" failonerror="true">
<arg value="-c"/>
<arg value="etags `find -name '*.java' | sort-directory-order`"/>
</exec>
</target>
</project>