| <project name="macro-imports"> |
| |
| <taskdef resource="net/sf/antcontrib/antcontrib.properties"> |
| <classpath> |
| <pathelement location="../../tests/ant-contrib-1.0b3.jar"/> |
| </classpath> |
| </taskdef> |
| |
| <property environment="env"/> |
| |
| <!-- |
| Macro for calling the JSR 308 Java compiler with a checker |
| for the demo code. |
| --> |
| <macrodef name="run-demo"> |
| <attribute name="srcpath"/> |
| <attribute name="files"/> |
| <attribute name="checker"/> |
| <attribute name="lint" default="none"/> |
| <attribute name="custom.lib" default=""/> |
| <sequential> |
| <java fork="true" failonerror="true" |
| classpath="${checker.lib}" |
| classname="org.checkerframework.framework.util.CheckerMain" |
| taskname="javac-cf"> |
| <!-- <arg value="-version"/> --> |
| <arg value="-g"/> |
| <arg value="-classpath"/> |
| <arg value="${checker.lib}:@{custom.lib}"/> |
| <arg value="-sourcepath"/> |
| <arg value="@{srcpath}"/> |
| <arg value="-processor"/> |
| <arg value="@{checker}"/> |
| <arg value="-implicit:none"/> |
| <arg value="-source"/> |
| <arg value="1.8"/> |
| <arg value="-encoding"/> |
| <arg value="utf-8"/> |
| <arg value="-Xprefer:newer"/> |
| <arg line="@{files}"/> |
| <arg value="-Alint=@{lint}"/> |
| <arg value="-ApermitMissingJdk"/> |
| <arg value="-AsuppressWarnings=purity"/> |
| </java> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="run-demo-basic"> |
| <attribute name="srcpath"/> |
| <attribute name="files"/> |
| <attribute name="checker" default="org.checkerframework.common.subtyping.SubtypingChecker"/> |
| <attribute name="lint" default="none"/> |
| <attribute name="quals" default=""/> |
| <attribute name="custom.lib" default=""/> |
| <sequential> |
| <java fork="true" failonerror="true" |
| classpath="${checker.lib}" |
| classname="org.checkerframework.framework.util.CheckerMain" |
| taskname="javac-cf"> |
| <!-- <arg value="-version"/> --> |
| <arg value="-g"/> |
| <arg value="-classpath"/> |
| <arg value="@{custom.lib}"/> |
| <arg value="-sourcepath"/> |
| <arg value="@{srcpath}"/> |
| <arg value="-processor"/> |
| <arg value="@{checker}"/> |
| <arg value="-implicit:none"/> |
| <arg value="-source"/> |
| <arg value="1.8"/> |
| <arg value="-encoding"/> |
| <arg value="utf-8"/> |
| <arg value="-Xprefer:newer"/> |
| <arg line="@{files}"/> |
| <arg value="-Alint=@{lint}"/> |
| <arg value="-Aquals=@{quals}"/> |
| </java> |
| </sequential> |
| </macrodef> |
| |
| <!-- Pass arguments in the order: expected, actual. --> |
| <macrodef name="my-diff"> |
| <attribute name="file1"/> |
| <attribute name="file2"/> |
| <attribute name="ignore-matching-lines"/> |
| <sequential> |
| <exec executable="diff" outputproperty="diff-output" resultproperty="diff-result"> <!-- not failonerror="true because that prevents user-friendly error message below --> |
| <!-- <arg value="-q"/> --> |
| <arg value="-I"/> |
| <arg value="@{ignore-matching-lines}"/> |
| <!-- ignore lint results --> |
| <arg value="-I"/> |
| <arg value="Note:"/> |
| <!-- ignore ant headers and empty lines --> |
| <arg value="-I"/> |
| <arg value="^ *$"/> |
| <arg value="-I"/> |
| <arg value="^[^ ]*:$"/> |
| |
| <!-- ignore version of Checker Framework javac --> |
| <arg value="-I"/> |
| <arg value="^javac "/> |
| |
| <!-- ignore paths --> |
| <arg value="-I"/> |
| <arg value=".java"/> |
| <arg value="-I"/> |
| <arg value=".xml"/> |
| <arg value="-I"/> |
| <arg value="Deleting directory"/> |
| <arg value="-I"/> |
| <arg value="Created dir:"/> |
| <arg value="-I"/> |
| <arg value="Compiling 2 source files to"/> |
| |
| <!-- the files to compare --> |
| <arg line="@{file1}"/> |
| <arg line="@{file2}"/> |
| </exec> |
| |
| <if> |
| <isfailure code="${diff-result}" /> |
| <then> |
| <loadfile property="results.expected" srcFile="@{file1}"/> |
| <loadfile property="results.actual" srcFile="@{file2}"/> |
| <fail message="Error in the demo.${line.separator} |
| ${line.separator}Expected: |
| ${line.separator}===================================================================== |
| ${line.separator}${results.expected} |
| ${line.separator}===================================================================== |
| ${line.separator} |
| ${line.separator}but found: |
| ${line.separator}===================================================================== |
| ${line.separator}${results.actual} |
| ${line.separator}===================================================================== |
| ${line.separator} |
| ${line.separator}Diff output is: |
| ${line.separator}===================================================================== |
| ${line.separator}${diff-output} |
| ${line.separator}===================================================================== |
| ${line.separator} |
| ${line.separator}NOTE: Did you run 'ant touch-files'?"/> |
| </then> |
| </if> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="my-ant"> |
| <attribute name="task" default=""/> |
| <attribute name="logfile" default=""/> |
| <sequential> |
| <exec executable="ant" failonerror="false" |
| resultproperty="property.ignore"> |
| <arg value="-e"/> |
| <arg value="-l"/> |
| <arg value="@{logfile}"/> |
| <arg value="@{task}"/> |
| </exec> |
| <sleep milliseconds="100"/> <!--sometimes output gets truncated --> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="check-demo"> |
| <attribute name="patchfile"/> |
| <attribute name="task"/> |
| <attribute name="expected"/> |
| <sequential> |
| <!-- Apply the patch --> |
| <patch patchfile="@{patchfile}" quiet="yes" strip="0" failonerror="true"/> |
| <my-ant task="@{task}" logfile="output.tmp"/> |
| <my-diff file1="@{expected}" file2="output.tmp" |
| ignore-matching-lines="Total time"/> |
| <delete file="output.tmp"/> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="check-demo-common"> |
| <attribute name="target"/> |
| <attribute name="step"/> |
| <attribute name="dir" default="testdemo"/> |
| <sequential> |
| <echo message="Checking demo target=@{target} step=@{step}"/> |
| <check-demo |
| task="@{target}" |
| patchfile="@{dir}/@{target}.@{step}.patch" |
| expected="@{dir}/@{target}.@{step}.expected"/> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="revert-demo"> |
| <attribute name="target"/> |
| <attribute name="step"/> |
| <attribute name="dir" default="testdemo"/> |
| <sequential> |
| <patch patchfile="@{dir}/@{target}.@{step}.patch" quiet="yes" reverse="yes" strip="0" failonerror="true"/> |
| </sequential> |
| </macrodef> |
| </project> |