| <?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> |