<project name="annotation-tools" default="all"
xmlns:if="ant:if" xmlns:unless="ant:unless">
<property file="${user.home}/.annotations-tools.properties" />
<property file="build.properties" />
<!-- default location of projects, has effect only if not previously set -->
<property name="asmx" location="asmx"/>
<property name="scene-lib" location="scene-lib"/>
<property name="afu" location="annotation-file-utilities"/>
<target name="prep" description="Create required directories/files">
<!-- Ant's copy task does not retain file permissions,
so use <exec executable="cp"> instead.
<copy file="bin-devel/git.pre-commit" tofile="../.git/hooks/pre-commit" preservelastmodified="true" />
-->
<!-- TODO
<exec executable="cp">
<arg value="-p"/>
<arg value=".git.pre-commit"/>
<arg value=".git/hooks/pre-commit"/>
</exec>
-->
</target>
<target name="all" description="Compile, run Javadoc, and run tests"
depends="prep,compile,javadoc,test"/>
<target name="compile" description="Compile all annotation tools"
depends="compile-all"/>
<target name="test" description="Test all the tools"
depends="test-all"/>
<target name="clean" depends="clean-all"/>
<target name="compile-asmx">
<ant dir="${asmx}" target="compile">
<property name="product.noshrink" value="true"/>
</ant>
</target>
<!-- TODO: Get this working -->
<!-- Known to fail -->
<target name="test-asmx">
<ant dir="${asmx}" target="test"/>
</target>
<target name="compile-scene-lib">
<ant dir="${scene-lib}" target="bin"/>
</target>
<target name="javadoc-scene-lib">
<ant dir="${scene-lib}" target="javadoc"/>
</target>
<target name="test-scene-lib">
<ant dir="${scene-lib}" target="test"/>
</target>
<target name="compile-afu">
<ant dir="${afu}" target="jarfile"/>
</target>
<target name="javadoc-afu">
<ant dir="${afu}" target="javadoc"/>
</target>
<target name="test-afu">
<ant dir="${afu}" target="run-tests"/>
</target>
<target name="compile-all"
depends="compile-asmx,compile-scene-lib,compile-afu"/>
<!-- TODO: Add asmx tests when they work -->
<target name="test-all"
depends="test-scene-lib,test-afu"/>
<target name="clean-all">
<ant dir="${asmx}" target="clean"/>
<ant dir="${scene-lib}" target="clean"/>
<ant dir="${afu}" target="clean"/>
</target>
<target name="javadoc" depends="javadoc-scene-lib,javadoc-afu">
</target>
<target name="tags-scene-lib">
<ant dir="${scene-lib}" target="tags"/>
</target>
<target name="tags-afu">
<ant dir="${afu}" target="tags"/>
</target>
<target name="tags" depends="tags-scene-lib,tags-afu">
<exec executable="etags" failonerror="true">
<arg value="-i"/>
<arg value="${scene-lib}/TAGS"/>
<arg value="-i"/>
<arg value="${afu}/TAGS"/>
</exec>
</target>
<target name="html-validate"
description="Validate that HTML files are well-formed; only works with JDK 8"
depends="prep">
<exec executable="html5validator">
<arg value="--ignore"/>
<arg value="/api/"/>
<arg value="/build/"/>
<arg value="/javadoc/"/>
<arg value="/annotation-file-utilities/annotation-file-format.html"/>
<arg value="/scene-lib/javadoc/"/>
</exec>
</target>
<property name="style.args1" value="-r -n -e"/>
<property name="style.args2" value="--exclude-dir=.git --exclude-dir=api --exclude-dir=asmx --exclude-dir=javadoc --exclude='*.aux' --exclude='*.class' --exclude='*.dvi' --exclude='*.eps' --exclude='*.jaif' --exclude='*.jar' --exclude='*.jtr' --exclude='*.log' --exclude='*.patch' --exclude='*.pdf' --exclude='*.png' --exclude='*.sty' --exclude='*.zip' --exclude='*~' --exclude='CFLogo.ai' --exclude='logfile.log.rec.index' --exclude='annotation-file-format.html' ."/>
<target name="check-style"
description="Check basic style guidelines"
depends="prep">
<!-- There should be a way to templatize the following. -->
<exec executable="grep" outputproperty="trailingwhitespace" failonerror="false">
<arg line="${style.args1}"/>
<arg value=" $"/>
<arg line="${style.args2}"/>
</exec>
<fail message="Trailing whitespace:${line.separator}${trailingwhitespace}">
<condition>
<not>
<equals arg1="${trailingwhitespace}" arg2=""/>
</not>
</condition>
</fail>
<exec executable="grep" outputproperty="missingspace" failonerror="false">
<arg line="${style.args1}"/>
<arg value="[^\\]\b\(else\|finally\|try\){\|}\(catch\|else\|finally\)\b\|){\($\|[^0-9]\)\|\b\(catch\|for\|if\|while\)("/>
<arg line="${style.args2}"/>
<arg line="--exclude=build.xml"/>
</exec>
<fail message="Missing space:${line.separator}${missingspace}">
<condition>
<not>
<equals arg1="${missingspace}" arg2=""/>
</not>
</condition>
</fail>
</target>
<fileset id="formatted.java.files" dir="." includes="**/*.java" excludes="**/asmx/"/>
<condition property="isMac">
<os family="mac" />
</condition>
<!-- Avoids "Argument list too long" message. You can also set
this property in file local.properties. -->
<condition property="maxparallel" value="1000" else="-1">
<isset property="isMac"/>
</condition>
<target name="-run-google-java-format.check">
<condition property="run-google-java-format.exists">
<available file=".run-google-java-format" type="dir"/>
</condition>
</target>
<target name="-get-run-google-java-format"
description="Obtain the run-google-java-format project"
depends="-run-google-java-format.check"
unless="run-google-java-format.exists">
<exec executable="git"
dir=".">
<arg value="clone"/>
<arg value="-q"/>
<arg value="https://github.com/plume-lib/run-google-java-format.git"/>
<arg value=".run-google-java-format"/>
</exec>
</target>
<target name="-update-run-google-java-format"
description="Update the run-google-java-format project"
depends="-get-run-google-java-format">
<exec executable="git"
dir=".run-google-java-format">
<arg value="pull"/>
<arg value="-q"/>
</exec>
</target>
<!-- TEMPORARY: Do not run this until branches have been merged. -->
<target name="reformat" depends="-update-run-google-java-format"
description="Reformat Java code">
<apply executable="python" parallel="true" maxparallel="${maxparallel}" failonerror="true">
<arg value="./.run-google-java-format/run-google-java-format.py"/>
<fileset refid="formatted.java.files"/>
</apply>
</target>
<target name="check-format" depends="-update-run-google-java-format"
description="Check Java code formatting">
<apply executable="python" parallel="true" maxparallel="${maxparallel}"
failonerror="false" resultproperty="check.format.result"
outputproperty="check.format.stdout" errorproperty="check.format.stderr">
<arg value="./.run-google-java-format/check-google-java-format.py"/>
<fileset refid="formatted.java.files"/>
</apply>
<echo unless:blank="${check.format.stdout}">${check.format.stdout}</echo>
<echo unless:blank="${check.format.stderr}">${check.format.stderr}</echo>
<echo unless:blank="${check.format.stderr}">Fix syntax errors, then re-run: ant check-format</echo>
<echo unless:blank="${check.format.stdout}" if:blank="${check.format.stderr}">Try running: ant reformat</echo>
<fail>
<condition>
<not>
<equals arg1="0" arg2="${check.format.result}"/>
</not>
</condition>
</fail>
</target>
</project>