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