• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<project name="annotation-tools" default="all"
2         xmlns:if="ant:if" xmlns:unless="ant:unless">
3
4  <property file="${user.home}/.annotations-tools.properties" />
5  <property file="build.properties" />
6
7  <!-- default location of projects, has effect only if not previously set -->
8  <property name="asmx" location="asmx"/>
9  <property name="scene-lib" location="scene-lib"/>
10  <property name="afu" location="annotation-file-utilities"/>
11
12  <target name="prep" description="Create required directories/files">
13    <!-- Ant's copy task does not retain file permissions,
14         so use <exec executable="cp"> instead.
15    <copy file="bin-devel/git.pre-commit" tofile="../.git/hooks/pre-commit" preservelastmodified="true" />
16    -->
17<!-- TODO
18    <exec executable="cp">
19      <arg value="-p"/>
20      <arg value=".git.pre-commit"/>
21      <arg value=".git/hooks/pre-commit"/>
22    </exec>
23-->
24  </target>
25
26  <target name="all" description="Compile, run Javadoc, and run tests"
27      depends="prep,compile,javadoc,test"/>
28
29  <target name="compile" description="Compile all annotation tools"
30      depends="compile-all"/>
31
32  <target name="test" description="Test all the tools"
33      depends="test-all"/>
34
35  <target name="clean" depends="clean-all"/>
36
37  <target name="compile-asmx">
38      <ant dir="${asmx}" target="compile">
39	  <property name="product.noshrink" value="true"/>
40      </ant>
41  </target>
42
43  <!-- TODO: Get this working -->
44  <!-- Known to fail -->
45  <target name="test-asmx">
46      <ant dir="${asmx}" target="test"/>
47  </target>
48
49  <target name="compile-scene-lib">
50      <ant dir="${scene-lib}" target="bin"/>
51  </target>
52
53  <target name="javadoc-scene-lib">
54      <ant dir="${scene-lib}" target="javadoc"/>
55  </target>
56
57  <target name="test-scene-lib">
58      <ant dir="${scene-lib}" target="test"/>
59  </target>
60
61  <target name="compile-afu">
62      <ant dir="${afu}" target="jarfile"/>
63  </target>
64
65  <target name="javadoc-afu">
66      <ant dir="${afu}" target="javadoc"/>
67  </target>
68
69  <target name="test-afu">
70      <ant dir="${afu}" target="run-tests"/>
71  </target>
72
73  <target name="compile-all"
74	 depends="compile-asmx,compile-scene-lib,compile-afu"/>
75  <!-- TODO: Add asmx tests when they work -->
76  <target name="test-all"
77	 depends="test-scene-lib,test-afu"/>
78  <target name="clean-all">
79    <ant dir="${asmx}" target="clean"/>
80    <ant dir="${scene-lib}" target="clean"/>
81    <ant dir="${afu}" target="clean"/>
82  </target>
83
84  <target name="javadoc" depends="javadoc-scene-lib,javadoc-afu">
85  </target>
86
87  <target name="tags-scene-lib">
88      <ant dir="${scene-lib}" target="tags"/>
89  </target>
90
91  <target name="tags-afu">
92      <ant dir="${afu}" target="tags"/>
93  </target>
94
95  <target name="tags" depends="tags-scene-lib,tags-afu">
96    <exec executable="etags" failonerror="true">
97      <arg value="-i"/>
98      <arg value="${scene-lib}/TAGS"/>
99      <arg value="-i"/>
100      <arg value="${afu}/TAGS"/>
101    </exec>
102  </target>
103
104  <target name="html-validate"
105	  description="Validate that HTML files are well-formed; only works with JDK 8"
106	  depends="prep">
107    <exec executable="html5validator">
108      <arg value="--ignore"/>
109      <arg value="/api/"/>
110      <arg value="/build/"/>
111      <arg value="/javadoc/"/>
112      <arg value="/annotation-file-utilities/annotation-file-format.html"/>
113      <arg value="/scene-lib/javadoc/"/>
114    </exec>
115  </target>
116
117  <property name="style.args1" value="-r -n -e"/>
118  <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' ."/>
119
120  <target name="check-style"
121	  description="Check basic style guidelines"
122	  depends="prep">
123    <!-- There should be a way to templatize the following. -->
124    <exec executable="grep" outputproperty="trailingwhitespace" failonerror="false">
125      <arg line="${style.args1}"/>
126      <arg value=" $"/>
127      <arg line="${style.args2}"/>
128    </exec>
129    <fail message="Trailing whitespace:${line.separator}${trailingwhitespace}">
130      <condition>
131	<not>
132	  <equals arg1="${trailingwhitespace}" arg2=""/>
133	</not>
134      </condition>
135    </fail>
136    <exec executable="grep" outputproperty="missingspace" failonerror="false">
137      <arg line="${style.args1}"/>
138      <arg value="[^\\]\b\(else\|finally\|try\){\|}\(catch\|else\|finally\)\b\|){\($\|[^0-9]\)\|\b\(catch\|for\|if\|while\)("/>
139      <arg line="${style.args2}"/>
140      <arg line="--exclude=build.xml"/>
141    </exec>
142    <fail message="Missing space:${line.separator}${missingspace}">
143      <condition>
144	<not>
145	  <equals arg1="${missingspace}" arg2=""/>
146	</not>
147      </condition>
148    </fail>
149  </target>
150
151  <fileset id="formatted.java.files" dir="." includes="**/*.java" excludes="**/asmx/"/>
152
153  <condition property="isMac">
154    <os family="mac" />
155  </condition>
156
157  <!-- Avoids "Argument list too long" message.  You can also set
158       this property in file local.properties. -->
159  <condition property="maxparallel" value="1000" else="-1">
160    <isset property="isMac"/>
161  </condition>
162
163  <target name="-run-google-java-format.check">
164    <condition property="run-google-java-format.exists">
165      <available file=".run-google-java-format" type="dir"/>
166    </condition>
167  </target>
168
169  <target name="-get-run-google-java-format"
170          description="Obtain the run-google-java-format project"
171          depends="-run-google-java-format.check"
172          unless="run-google-java-format.exists">
173    <exec executable="git"
174          dir=".">
175      <arg value="clone"/>
176      <arg value="-q"/>
177      <arg value="https://github.com/plume-lib/run-google-java-format.git"/>
178      <arg value=".run-google-java-format"/>
179    </exec>
180  </target>
181
182  <target name="-update-run-google-java-format"
183          description="Update the run-google-java-format project"
184          depends="-get-run-google-java-format">
185    <exec executable="git"
186          dir=".run-google-java-format">
187      <arg value="pull"/>
188      <arg value="-q"/>
189    </exec>
190  </target>
191
192<!-- TEMPORARY: Do not run this until branches have been merged. -->
193  <target name="reformat" depends="-update-run-google-java-format"
194          description="Reformat Java code">
195    <apply executable="python" parallel="true" maxparallel="${maxparallel}" failonerror="true">
196      <arg value="./.run-google-java-format/run-google-java-format.py"/>
197      <fileset refid="formatted.java.files"/>
198    </apply>
199  </target>
200
201  <target name="check-format" depends="-update-run-google-java-format"
202          description="Check Java code formatting">
203    <apply executable="python" parallel="true" maxparallel="${maxparallel}"
204       failonerror="false" resultproperty="check.format.result"
205       outputproperty="check.format.stdout" errorproperty="check.format.stderr">
206      <arg value="./.run-google-java-format/check-google-java-format.py"/>
207      <fileset refid="formatted.java.files"/>
208    </apply>
209    <echo unless:blank="${check.format.stdout}">${check.format.stdout}</echo>
210    <echo unless:blank="${check.format.stderr}">${check.format.stderr}</echo>
211    <echo unless:blank="${check.format.stderr}">Fix syntax errors, then re-run:  ant check-format</echo>
212    <echo unless:blank="${check.format.stdout}" if:blank="${check.format.stderr}">Try running:  ant reformat</echo>
213    <fail>
214      <condition>
215        <not>
216          <equals arg1="0" arg2="${check.format.result}"/>
217        </not>
218      </condition>
219    </fail>
220  </target>
221
222</project>
223