root/trunk/ProjectFortress/build.xml @ 3292

Revision 3292, 45.0 KB (checked in by EricAllen, 11 months ago)

Added a type normalizer to improve presentation of types in error messages.
Got the type checker working over more of our first 20 compiled programs.
Added corresponding tests to CompilerJUTests.

Line 
1<?xml version="1.0" ?>
2
3<!--
4Copyright 2008 Sun Microsystems, Inc.,
54150 Network Circle, Santa Clara, California 95054, U.S.A.
6All rights reserved.
7
8U.S. Government Rights - Commercial software.
9Government users are subject to the Sun Microsystems, Inc. standard
10license agreement and applicable provisions of the FAR and its supplements.
11
12Use is subject to license terms.
13
14This distribution may include materials developed by third parties.
15
16Sun, Sun Microsystems, the Sun logo and Java are trademarks or registered
17trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
18-->
19
20<!--
21This is the main Ant build file for the Fortress reference
22implementation. Declarations are separated by type (e.g., taskdefs,
23properties, targets, etc.). To add a new declaration, please find the
24appropriate place in the file. For the sake of readability, please
25maintain proper indentation.
26-->
27
28<project name="Fortress" default="help">
29  <description>
30    A reference implementation of the Fortress programming language.
31  </description>
32
33
34  <!--
35       Properties
36  -->
37
38  <!-- Global properties for this build. -->
39  <property name="packagePrefix" value="com/sun/fortress"/>
40  <property name="package.prefix" value="com.sun.fortress"/>
41  <property name="interpreterPrefix" value="com/sun/fortress/interpreter"/>
42  <property name="interpreter.prefix" value="com.sun.fortress.interpreter"/>
43  <property name="blahblahblah" value="com/sun/fortress"/>
44
45  <!-- Directories in the ${basedir} directory -->
46  <property name="cache0" location="${basedir}/../default_repository/caches"/>
47  <property name="cache1" location="${basedir}/../.fortress_cache"/>
48  <property name="cache2" location="${basedir}/../.interpreter_cache"/>
49  <property name="cache3" location="${basedir}/.interpreter_cache"/>
50  <property name="cache4" location="${basedir}/../.syntax_cache"/>
51  <property name="cache5" location="${basedir}/.syntax_cache"/>
52  <property name="cache6" location="${basedir}/../.analyzed_cache"/>
53  <property name="cache7" location="${basedir}/.analyzed_cache"/>
54  <property name="cache8" location="${basedir}/../.presyntax_cache"/>
55  <property name="cache9" location="${basedir}/.presyntax_cache"/>
56  <property name="cache10" location="${basedir}/../.bytecode_cache"/>
57  <property name="cache11" location="${basedir}/.bytecode_cache"/>
58  <property name="cache12" location="${basedir}/../local_repository/caches"/>
59  <property name="astgen.src" location="${basedir}/astgen"/>
60  <property name="build" location="${basedir}/build"/>
61  <property name="docs" location="${basedir}/docs"/>
62  <property name="src" location="${basedir}/src"/>
63  <property name="library" location="${basedir}/../Library"/>
64  <property name="astgen.generators.src"
65            location="${src}/${packagePrefix}/astgen"/>
66
67  <!-- Third party jar files -->
68  <property name="asm" location="${basedir}/third_party/asm"/>
69  <property name="astgen.third" location="${basedir}/third_party/astgen"/>
70  <property name="jsr166y" location="${basedir}/third_party/jsr166y"/>
71  <property name="junit" location="${basedir}/third_party/junit"/>
72  <property name="plt" location="${basedir}/third_party/plt"/>
73  <property name="unicode.third" location="${basedir}/third_party/unicode"/>
74  <property name="xtc" location="${basedir}/third_party/xtc"/>
75  <property name="unsigned" location="${basedir}/third_party/unsigned"/>
76
77  <!-- Scala jar files -->
78  <property name="scala-compiler.jar"
79            value="${basedir}/third_party/scala/scala-compiler-2.7.3.jar"/>
80  <property name="scala-library.jar"
81            value="${basedir}/third_party/scala/scala-library-2.7.3.jar"/>
82
83  <!-- ASTGen -->
84  <property name="generate-sourcefile" value="${astgen.src}/Fortress.ast" />
85
86  <!-- Package nodes -->
87  <property name="nodesPackage" value="${packagePrefix}/nodes"/>
88  <property name="scala.nodes.package" value="${packagePrefix}/scala_src/nodes"/>
89  <property name="nodes"  location="${src}/${nodesPackage}"/>
90  <property name="scala.nodes"  location="${src}/${scala.nodes.package}"/>
91  <property name="nodesBuild" location="${build}/${nodesPackage}"/>
92
93  <!-- Package nodes_util -->
94  <property name="nodesUtil"  location="${src}/${packagePrefix}/nodes_util"/>
95
96  <!-- Parser packages -->
97  <property name="parser"  location="${src}/${packagePrefix}/parser"/>
98  <property name="preparser" location="${src}/${packagePrefix}/parser/preparser"/>
99  <property name="templateparser"
100            location="${src}/${packagePrefix}/parser/templateparser"/>
101  <property name="parserUtil"  location="${src}/${packagePrefix}/parser_util"/>
102  <property name="precedence" location="${parserUtil}/precedence"/>
103  <property name="precedenceResolver"
104            location="${parserUtil}/precedence_resolver"/>
105
106  <!-- Unicode packages -->
107  <property name="unicodePackage" value="${packagePrefix}/unicode"/>
108  <property name="unicode" location="${src}/${packagePrefix}/unicode"/>
109  <property name="unicodeBuild" location="${build}/${unicodePackage}"/>
110
111  <!-- Package useful -->
112  <property name="usefulPackage" value="${packagePrefix}/useful"/>
113
114  <!-- For fortress installation -->
115  <property name="testFortress" location=".TEST_FORTRESS"/>
116  <property name="installerDir" location=".installer"/>
117  <property name="protofortress" location="${basedir}/fortress/FORTRESS"/>
118  <property name="protofortress.lib" location="${protofortress}/lib"/>
119
120  <!-- Instrumentation -->
121  <property name="instrumentation.package"
122            value="${package.prefix}.parser_util.instrumentation"/>
123  <property name="instrumentationPackage"
124            value="${packagePrefix}/parser_util/instrumentation"/>
125  <property name="instrumentation.outfile"
126            location="${parserUtil}/instrumentation/coverage-report.txt"/>
127  <property name="instrumentation.transient"
128            location="${parserUtil}/instrumentation/transient.txt"/>
129
130  <!-- For tests -->
131  <property name="test.results" location="${basedir}/TEST-RESULTS"/>
132
133  <!-- Other settings -->
134  <property name="junitMem" value="768m"/>
135  <property name="junit.dir" value="junit-results"/>
136  <property environment="env"/>
137  <condition property="correct.environment">
138    <and>
139      <equals arg1="${ant.java.version}" arg2="1.5"/>
140      <equals arg1="${env.ANT_CALLED_FROM_SCRIPT}" arg2='yes'/>
141    </and>
142  </condition>
143
144
145  <!--
146       Paths
147  -->
148  <path id="scala.classpath">
149    <pathelement location="${scala-compiler.jar}"/>
150    <pathelement location="${scala-library.jar}"/>
151  </path>
152
153  <path id="astgen.path">
154    <path refid="scala.classpath"/>
155    <pathelement location="${astgen.third}/astgen.jar" />
156    <pathelement location="${build}" />
157  </path>
158
159  <path id="astgen.classpath">
160    <path refid="scala.classpath"/>
161    <pathelement location="${build}"/>
162    <pathelement location="${astgen.third}/astgen.jar"/>
163  </path>
164
165  <path id="instrumentedparser.classpath">
166    <path refid="scala.classpath"/>
167    <pathelement location="${build}"/>
168    <pathelement location="${xtc}/xtc.jar"/>
169    <pathelement location="${plt}/plt.jar"/>
170  </path>
171
172  <path id="compile.classpath">
173    <path refid="scala.classpath"/>
174    <pathelement location="${build}"/>
175    <pathelement location="${asm}/asm-3.1.jar"/>
176    <pathelement location="${xtc}/xtc.jar"/>
177    <pathelement location ="${unsigned}/unsigned.jar"/>
178    <pathelement location="${jsr166y}/jsr166y.jar"/>
179    <pathelement location="${plt}/plt.jar"/>
180    <pathelement location="${astgen.third}/astgen.jar" />
181    <pathelement location="${junit}/junit.jar"/>
182    <pathelement location="${ant.home}/lib/ant.jar"/>
183    <pathelement location="${java.home}/../lib/tools.jar"/>
184  </path>
185
186  <!--
187       Taskdefs
188  -->
189  <taskdef resource="scala/tools/ant/antlib.xml">
190    <classpath refid="scala.classpath"/>
191  </taskdef>
192
193
194  <!--
195       Targets
196  -->
197  <target name="help">
198    <echo message="ant checkEnv, checkNodesUptodate, checkOperatorsUptodate,
199                   checkParserUptodate, clean, cleanCache, compile,
200                   compileCommon, compileCommonLint, compileLint, doc,
201                   grammarCoverage, help, init, interpreter-jar,
202                   makeAST, operatorsGen, fortressparser, preparser,
203                   parser, reportNotPassing, systemProperties, test,
204                   testAll, testDemos, testSystem, testOnly
205                   -DtestPattern='some pattern', testCruiseControl"/>
206    <echo message="If you are building Fortress, you want ant compile or ant test."/>
207  </target>
208
209  <target name="systemProperties">
210    <echo message="Environment variables set correctly? ${correct.environment}"/>
211    <echo message="basedir: ${basedir}"/>
212    <echo message="Ant Java version: ${ant.java.version}"/>
213    <echo message="Ant called from script? ${env.ANT_CALLED_FROM_SCRIPT}"/>
214    <echo message="ANT_ARGS: ${env.ANT_ARGS}"/>
215    <echo message="ANT_OPTS: ${env.ANT_OPTS}"/>
216    <echo message="Java Runtime Environment
217                   version: ${java.version}"/>
218    <echo message="Java Runtime Environment
219                   vendor: ${java.vendor}"/>
220    <echo message="Java Runtime Environment
221                   vendor URL: ${java.vendor.url}"/>
222    <echo message="Java installation
223                   directory: ${java.home}"/>
224    <echo message="Java Virtual Machine
225                   specification version:
226                   ${java.vm.specification.version}"/>
227    <echo message="Java Virtual Machine
228                   specification vendor:
229                   ${java.vm.specification.vendor}"/>
230    <echo message="Java Virtual Machine
231                   specification name:
232                   ${java.vm.specification.name}"/>
233    <echo message="Java Virtual Machine
234                   implementation version:
235                   ${java.vm.version}"/>
236    <echo message="Java Virtual Machine
237                   implementation vendor:
238                   ${java.vm.vendor}"/>
239    <echo message="Java Virtual Machine
240                   implementation name: ${java.vm.name}"/>
241    <echo message="Java Runtime Environment
242                   specification version:
243                   ${java.specification.version}"/>
244    <echo message="Java Runtime Environment
245                   specification vendor:
246                   ${java.specification.vendor}"/>
247    <echo message="Java Runtime Environment
248                   specification name:
249                   ${java.specification.name}"/>
250    <echo message="Java class format version
251                   number: ${java.class.version}"/>
252    <echo message="Java class path:
253                   ${java.class.path}"/>
254    <echo message="List of paths to search when
255                   loading libraries: ${java.library.path}"/>
256    <echo message="Path of extension directory
257                   or directories: ${java.ext.dirs}"/>
258    <echo message="Default temp file path:
259                   ${java.io.tmpdir}"/>
260    <echo message="Operating system name:
261                   ${os.name}"/>
262    <echo message="Operating system
263                   architecture: ${os.arch}"/>
264    <echo message="Operating system version:
265                   ${os.version}"/>
266  </target>
267
268  <target name="checkEnv">
269    <echo message="Environment variables set correctly? ${correct.environment}"/>
270    <fail unless="correct.environment"
271          message="ERROR: This build script requires specific command-line arguments to Ant. Please call it using the script provided at ${basedir}/ant."/>
272  </target>
273
274  <target name="init">
275    <echo message="basedir: ${basedir}"/>
276    <!-- Create the time stamp. -->
277    <tstamp/>
278    <!-- Create the build directory structure used by compile. -->
279    <mkdir dir="${build}"/>
280    <mkdir dir="${junit.dir}"/>
281  </target>
282
283  <target name="clean" depends="cleanCache"
284          description="Delete the ${build} directory tree and generated files.">
285    <delete dir="${build}"/>
286    <delete dir="${nodes}"/>
287    <delete dir="${junit.dir}"/>
288
289    <!-- No longer needed, but eases the upgrade-->
290    <delete file="${nodesUtil}/BaseNodeMaker.java"/>
291    <!-- No longer needed, but eases the upgrade-->
292    <delete file="${nodesUtil}/InterfaceMaker.java"/>
293    <delete file="${parser}/Fortress.java"/>
294    <delete file="${parser}/FortressInstrumented.java"/>
295    <delete file="${preparser}/PreFortress.java"/>
296    <delete file="${templateparser}/TemplateParser.java"/>
297    <delete file="${precedenceResolver}/Operators.java"/>
298    <!-- No longer needed, but eases the upgrade-->
299    <delete file="${src}/com/sun/fortress/parser/precedence/resolver/Operators.java"/>
300    <delete file="${instrumentation.outfile}"/>
301    <delete file="${library}/FortressAst.fsi" />
302    <delete file="${library}/FortressAst.fss" />
303    <delete file="${astgen.src}/FortressAst.scala" />
304    <delete file="FortressLibrary.ast"/>
305    <delete file="FortressLibrary.tfs"/>
306    <delete file="${basedir}/tests/printing/test_output.txt" />
307    <delete file="testFile.txt"/>
308    <delete file="${src}/com/sun/fortress/scala_src/nodes/FortressAst.scala" />
309    <delete dir="${src}/com/sun/fortress/scalasrc" />
310    <delete dir="${basedir}/test-tmp" />
311    <delete>
312      <fileset dir="src" includes="**/*.class" />
313    </delete>
314  </target>
315
316  <target name="cleanCache"
317          description="Delete any cached Fortress ASTs in the development tree">
318    <delete dir="${cache0}"/>
319    <delete dir="${cache1}"/>
320    <delete dir="${cache2}"/>
321    <delete dir="${cache3}"/>
322    <delete dir="${cache4}"/>
323    <delete dir="${cache5}"/>
324    <delete dir="${cache6}"/>
325    <delete dir="${cache7}"/>
326    <delete dir="${cache8}"/>
327    <delete dir="${cache9}"/>
328    <delete dir="${cache10}"/>
329    <delete dir="${cache11}"/>
330    <delete dir="${cache12}"/>
331  </target>
332
333  <!-- Generation of Operators.java depends only on the files listed below.
334       Note that there are class files it depends on; if these class files are
335       not up to date with respect to their sources, they are themselves
336       recompiled by the compileCommon target.-->
337  <target name="checkOperatorsUptodate" depends="init, compileCommon">
338    <condition property="operators.uptodate">
339      <and>
340        <uptodate srcfile="${unicode.third}/UnicodeData.500.txt"
341                  targetfile="${precedenceResolver}/Operators.java"/>
342        <uptodate srcfile="${precedenceResolver}/operators.txt"
343                  targetfile="${precedenceResolver}/Operators.java"/>
344        <uptodate srcfile="${unicodeBuild}/OperatorStuffGenerator.class"
345                  targetfile="${precedenceResolver}/Operators.java"/>
346        <uptodate srcfile="${unicodeBuild}/Element.class"
347                  targetfile="${precedenceResolver}/Operators.java"/>
348      </and>
349    </condition>
350    <echo message="Operators up to date? ${operators.uptodate}"/>
351  </target>
352
353  <target name="operatorsGen"  unless="operators.uptodate"
354          depends="init, compileCommon, checkOperatorsUptodate"
355          description="Automatically generate visitors for AST nodes.">
356    <echo message="Regenerating operators"/>
357    <java classname="${package.prefix}.unicode.OperatorStuffGenerator"
358          fork="true">
359      <classpath>
360        <pathelement location="${build}"/>
361        <pathelement location="${basedir}/third_party/plt/plt.jar"/>
362      </classpath>
363    </java>
364  </target>
365
366  <target name="DumpProperties"
367          description="Dump properties as seen by a Java program.">
368    <java classname="${package.prefix}.repository.DumpProperties"
369          fork="true">
370      <sysproperty key="DEBUG" value="true"/>
371      <classpath>
372        <pathelement location="${build}"/>
373      </classpath>
374    </java>
375  </target>
376
377  <target name="checkAstgen">
378    <condition property="astgenerators.uptodate">
379      <uptodate targetfile="${basedir}/build/com/sun/fortress/astgen/FortressAstGenerator.class">
380        <srcfiles dir="${basedir}/src/com/sun/fortress/astgen/" includes="*.java"/>
381      </uptodate>
382    </condition>
383  </target>
384
385  <target name="astGenerators"
386          unless="astgenerators.uptodate"
387          depends="init,checkAstgen"
388          description="Compile all ASTGen custom generators.">
389    <depend srcdir="${astgen.generators.src}"
390            destdir="${build}"
391            closure="yes"
392            cache="${basedir}/.dependencies"/>
393    <javac
394        srcdir="${astgen.generators.src}"
395        destdir="${build}"
396        source="1.5"
397        debug="true"
398        includeantruntime="false"
399        fork="true"
400        memorymaximumsize="${junitMem}">
401      <!-- Uncomment the following line to print unchecked warnings
402           (here and in the 'compileCommon' target. -->
403      <!-- <compilerarg value="-Xlint:unchecked"/> -->
404      <classpath refid="astgen.classpath"/>
405      <include name="**/*.java"/>
406      <exclude name="${usefulPackage}/*.java"/>
407      <exclude name="${unicodePackage}/*.java"/>
408    </javac>
409    <scalac
410        srcdir="${astgen.generators.src}"
411        destdir="${build}"
412        classpathref="astgen.classpath"
413        addparams="">
414      <include name="**/*.scala"/>
415      <exclude name="${usefulPackage}/*.scala"/>
416      <exclude name="${unicodePackage}/*.scala"/>
417    </scalac>
418  </target>
419
420  <target name="checkNodesUptodate" depends="astGenerators">
421    <condition property="nodes.uptodate">
422      <and>
423        <available file="${nodes}/AbstractNode.java"/>
424        <uptodate srcfile="${astgen.src}/Fortress.ast"
425                  targetfile="${nodes}/AbstractNode.java"/>
426        <available file="${library}/FortressAst.fsi" />
427        <uptodate srcfile="${astgen.src}/Fortress.ast"
428                  targetfile="${library}/FortressAst.fsi" />
429        <available file="${library}/FortressAst.fss" />
430        <uptodate srcfile="${astgen.src}/Fortress.ast"
431                  targetfile="${library}/FortressAst.fss" />
432        <uptodate targetfile="${library}/FortressAst.fsi">
433          <srcfiles dir="${basedir}/src/com/sun/fortress/astgen/" includes="**/*.java"/>
434        </uptodate>
435      </and>
436    </condition>
437    <echo message="Nodes up to date? ${nodes.uptodate}"/>
438  </target>
439
440  <taskdef name="astgen" classpath="${astgen.third}/astgen.jar;${build}"
441           classname="edu.rice.cs.astgen.AntTask"/>
442
443  <target name="makeAST" unless="nodes.uptodate" depends="checkNodesUptodate"
444          description="Automatically generate AST nodes.">
445    <echo message="Processing ${generate-sourcefile}" />
446    <astgen file="${generate-sourcefile}" />
447    <move todir="${nodes}">
448      <fileset dir="${astgen.src}">
449        <include name="**/*.java"/>
450        <exclude name="**/Fortress.ast"/>
451      </fileset>
452    </move>
453    <move todir="${library}">
454      <fileset dir="${astgen.src}">
455        <include name="FortressAst.fss" />
456        <include name="FortressAst.fsi" />
457      </fileset>
458    </move>
459    <move todir="${scala.nodes}">
460      <fileset dir="${astgen.src}">
461        <include name="FortressAst.scala" />
462      </fileset>
463    </move>
464  </target>
465
466  <target name="compile" depends="compileCommon, makeAST, parser, operatorsGen"
467          description="Compile all Fortress code written in Java (Scala code is ignored).">
468    <depend srcdir="${src}"
469            destdir="${build}"
470            closure="yes"
471            cache="${basedir}/.dependencies"/>
472    <javac
473        srcdir="${src}"
474        destdir="${build}"
475        source="1.5"
476        debug="true"
477        includeantruntime="false"
478        fork="true"
479        memorymaximumsize="${junitMem}">
480      <!-- Uncomment the following line to print unchecked warnings
481           (here and in the 'compileCommon' target. -->
482      <!-- <compilerarg value="-Xlint:unchecked"/> -->
483      <classpath refid="compile.classpath"/>
484      <include name="**/*.java"/>
485      <exclude name="${usefulPackage}/*.java"/>
486      <exclude name="${unicodePackage}/*.java"/>
487    </javac>
488  </target>
489
490  <target name="compileAll" depends="clean, compileCommon, makeAST, parser, operatorsGen"
491          description="Compile all Fortress code.">
492    <javac
493        srcdir="${src}"
494        destdir="${build}"
495        source="1.5"
496        debug="true"
497        includeantruntime="false"
498        fork="true"
499        memorymaximumsize="${junitMem}">
500      <!-- Uncomment the following line to print unchecked warnings
501           (here and in the 'compileCommon' target. -->
502      <!-- <compilerarg value="-Xlint:unchecked"/> -->
503      <classpath refid="compile.classpath"/>
504      <include name="**/*.java"/>
505      <exclude name="${usefulPackage}/*.java"/>
506      <exclude name="${unicodePackage}/*.java"/>
507    </javac>
508    <scalac
509        srcdir="${src}"
510        destdir="${build}"
511        classpathref="compile.classpath"
512        addparams="">
513      <include name="**/*.scala"/>
514    </scalac>
515  </target>
516
517  <target name="check.blas" depends="init">
518    <javac destdir="${build}" srcdir="${src}/com/sun/fortress/numerics">
519      <classpath refid="compile.classpath"/>
520    </javac>
521
522    <java failonerror="true"
523          classname="com.sun.fortress.numerics.CheckBlasEnvironment">
524      <classpath refid="compile.classpath"/>
525    </java>
526  </target>
527
528  <target name="check.linux">
529    <condition property="blas.islinux">
530      <equals arg1="${os.name}" arg2="Linux" />
531    </condition>
532  </target>
533
534  <target name="blas.linux" depends="check.linux" if="blas.islinux">
535    <echo message="Generating C header and stub files." />
536    <javah class="com.sun.fortress.numerics.Blas"
537           destdir="c"
538           classpath="build"
539           />
540    <echo message="Now compiling C stubs for blas on arch linux."/>
541    <exec executable="gcc" failonerror="true">
542      <arg value="-fPIC" />
543      <arg value="-Ic" />
544      <arg value="-I${env.BLAS_INCLUDE}" />
545      <arg value="-L${env.BLAS_LIB}" />
546      <arg value="-I${env.JAVA_HOME}/include" />
547      <arg value="-I${env.JAVA_HOME}/include/linux" />
548      <arg value="c/blas.c" />
549      <arg value="-lcblas" />
550      <arg value="-lblas" />
551      <arg value="-shared" />
552      <arg value="-olibblas.so" />
553    </exec>
554  </target>
555
556  <target name="check.osx">
557    <condition property="blas.is.osx">
558      <equals arg1="${os.name}" arg2="Mac OS X" />
559    </condition>
560  </target>
561
562  <target name="blas.osx" depends="check.osx" if="blas.is.osx">
563    <echo message="Generating C header and stub files." />
564    <javah class="com.sun.fortress.numerics.Blas"
565           destdir="c"
566           classpath="build"
567           />
568    <echo message="Now compiling C stubs for blas on arch OS X."/>
569    <exec executable="gcc" failonerror="true">
570      <arg line="-D OSX" />
571      <arg value="-fPIC" />
572      <arg value="-Ic" />
573      <arg line="-framework Accelerate" />
574      <arg value="-I${env.JAVA_LIB}/Headers" />
575      <arg value="c/blas.c" />
576      <arg value="-lcblas" />
577      <arg value="-lblas" />
578      <arg value="-shared" />
579      <arg value="-bundle" />
580      <arg line="-o libblas.dylib" />
581    </exec>
582  </target>
583
584  <target name="check.sunos">
585    <condition property="blas.is.sunos">
586      <equals arg1="${os.name}" arg2="SunOS" />
587    </condition>
588  </target>
589
590  <target name="blas.sunos" depends="check.sunos" if="blas.is.sunos">
591    <echo message="Generating C header and stub files." />
592    <javah class="com.sun.fortress.numerics.Blas"
593           destdir="c"
594           classpath="build"
595           />
596    <echo message="Now compiling C stubs for blas on arch SunOS."/>
597    <exec executable="cc" failonerror="true">
598      <arg line="-D SUNOS" />
599      <arg value="-fPIC" />
600      <arg value="-Ic" />
601      <arg value="-I${env.JAVA_HOME}/include" />
602      <arg value="-I${env.JAVA_HOME}/include/solaris" />
603      <arg value="c/sunperf_blas.c" />
604      <arg value="-shared" />
605      <arg value="-dalign" />
606      <arg value="-xlic_lib=sunperf" />
607      <arg value="-olibblas.so" />
608    </exec>
609  </target>
610
611  <target name="blas" depends="check.blas,blas.linux,blas.osx,blas.sunos"></target>
612
613  <target name="compileLint"
614          depends="compileCommonLint, makeAST, parser, operatorsGen"
615          description="Compile all interpreter code.">
616    <depend srcdir="${src}"
617            destdir="${build}"
618            closure="yes"
619            cache="${basedir}/.dependencies"/>
620    <javac
621        srcdir="${src}"
622        destdir="${build}"
623        source="1.5"
624        debug="true"
625        includeantruntime="false"
626        fork="true"
627        memorymaximumsize="${junitMem}">
628      <!-- Uncomment the following line to print unchecked warnings. -->
629      <classpath refid="compile.classpath"/>
630      <compilerarg value="-Xlint:unchecked"/>
631      <include name="**/*.java"/>
632      <exclude name="${usefulPackage}/*.java"/>
633      <exclude name="${unicodePackage}/*.java"/>
634    </javac>
635  </target>
636
637  <target name="compileCommon" depends="init"
638          description="Compile interpreter-indepedent code.">
639    <depend srcdir="${src}"
640            destdir="${build}"
641            closure="yes"
642            cache="${basedir}/.dependencies"/>
643    <javac
644        srcdir="${src}"
645        destdir="${build}"
646        source="1.5"
647        debug="true"
648        includeantruntime="false"
649        fork="true">
650      <!-- Uncomment the following line to print unchecked warnings. -->
651      <!-- <compilerarg value="-Xlint:unchecked"/>  -->
652      <classpath refid="compile.classpath"/>
653      <include name="${blahblahblah}/useful/*.java"/>
654      <include name="${blahblahblah}/unicode/*.java"/>
655    </javac>
656  </target>
657
658  <target name="compileCommonLint" depends="init"
659          description="Compile interpreter-indepedent code.">
660    <depend srcdir="${src}"
661            destdir="${build}"
662            closure="yes"
663            cache="${basedir}/.dependencies"/>
664    <javac
665        srcdir="${src}"
666        destdir="${build}"
667        source="1.5"
668        debug="true"
669        includeantruntime="false"
670        fork="true">
671      <classpath refid="compile.classpath"/>
672      <!-- Uncomment the following line to print unchecked warnings. -->
673      <compilerarg value="-Xlint:unchecked"/>
674      <include name="${usefulPackage}/*.java"/>
675      <include name="${unicodePackage}/*.java"/>
676    </javac>
677  </target>
678
679
680  <target name="interpreter-jar" depends="compile"
681          description="Package up the interpreter in a jar.">
682    <jar
683        destfile="../bin/interpreter.jar"
684        basedir="${build}"
685        includes="**/*"/>
686  </target>
687
688  <target name="testOnly" depends="compile"
689          description="Run specific tests (use -DtestPattern=...).">
690    <mkdir dir="${test.results}"/>
691    <mkdir dir="${basedir}/test-tmp" />
692    <junit printsummary="off"
693           haltonerror="off"
694           haltonfailure="off"
695           showoutput="yes"
696           fork="true"
697           maxmemory="${junitMem}"
698           errorProperty="tests.failed"
699           failureProperty="tests.failed">
700      <classpath refid="compile.classpath"/>
701      <jvmarg value="-Djava.io.tmpdir=${basedir}/test-tmp" />
702      <formatter type="plain" usefile="false"/>
703      <syspropertyset>
704        <propertyref prefix="plt." />
705      </syspropertyset>
706      <batchtest fork="true" todir="${test.results}">
707        <fileset dir="${build}">
708          <and>
709            <filename name="**/*${testPattern}*/**" />
710            <or>
711              <filename name="**/*JUTest.class" />
712              <filename name="**/*JxTest.class" />
713            </or>
714          </and>
715          <exclude name="**/*$*.class"/>
716        </fileset>
717      </batchtest>
718    </junit>
719    <delete dir="${basedir}/test-tmp" />
720    <fail message="Tests expected to pass are failing!" if="tests.failed"/>
721  </target>
722
723  <target name="test" depends="compileAll, testFast"
724          description="Clean, compile everything, and run all unit and system tests.">
725  </target>
726
727  <target name="testFast"
728          description="Run all unit and system tests expected to pass.">
729    <mkdir dir="${test.results}"/>
730    <mkdir dir="${basedir}/test-tmp" />
731    <junit printsummary="on"
732           haltonerror="off"
733           haltonfailure="off"
734           showoutput="yes"
735           fork="true"
736           maxmemory="${junitMem}"
737           errorProperty="tests.failed"
738           failureProperty="tests.failed">
739      <classpath refid="compile.classpath"/>
740      <jvmarg value="-Djava.io.tmpdir=${basedir}/test-tmp" />
741      <formatter type="plain" usefile="true"/>
742      <batchtest fork="true" todir="${test.results}">
743        <fileset dir="${build}">
744          <include name="**/*JUTest.class"/>
745          <include name="**/*JUTests.class"/>
746          <exclude name="**/*$*.class"/>
747          <exclude name="**/SyntaxAbstractionJUTestAll.class"/>
748          <exclude name="**/tools/AstJUTest.class"/>
749        </fileset>
750      </batchtest>
751    </junit>
752    <delete dir="${basedir}/test-tmp" />
753    <fail message="Tests expected to pass are failing!" if="tests.failed"/>
754  </target>
755
756  <target name="testCruiseControl" depends="compile"
757          description="Run all unit and system tests expected to pass.">
758    <mkdir dir="${test.results}"/>
759    <mkdir dir="${basedir}/test-tmp" />
760    <junit printsummary="on"
761           haltonerror="off"
762           haltonfailure="off"
763           showoutput="yes"
764           fork="true"
765           maxmemory="${junitMem}"
766           errorProperty="tests.failed"
767           failureProperty="tests.failed">
768      <classpath refid="compile.classpath"/>
769      <jvmarg value="-Djava.io.tmpdir=${basedir}/test-tmp" />
770      <formatter type="plain" usefile="true"/>
771      <batchtest fork="true" todir="${junit.dir}">
772        <formatter type="brief" usefile="false" />
773        <formatter type="xml" />
774        <fileset dir="${build}">
775          <include name="**/*JUTest.class"/>
776          <include name="**/*JUTests.class"/>
777          <exclude name="**/*$*.class"/>
778          <exclude name="**/SyntaxAbstractionJUTestAll.class"/>
779          <exclude name="**/tools/AstJUTest.class"/>
780        </fileset>
781      </batchtest>
782    </junit>
783    <delete dir="${basedir}/test-tmp" />
784    <fail message="Tests expected to pass are failing!" if="tests.failed"/>
785  </target>
786
787  <target name="testNotPassing" depends="compile"
788          description="Run system tests that aren't passing yet.">
789    <mkdir dir="${test.results}"/>
790    <mkdir dir="${basedir}/test-tmp" />
791    <junit printsummary="on"
792           haltonerror="off"
793           haltonfailure="off"
794           showoutput="yes"
795           fork="true"
796           maxmemory="${junitMem}"
797           errorProperty="tests.failed"
798           failureProperty="tests.failed">
799      <classpath refid="compile.classpath"/>
800      <jvmarg value="-Djava.io.tmpdir=${basedir}/test-tmp" />
801      <formatter type="brief" usefile="true"/>
802      <batchtest fork="true" todir="${test.results}">
803        <fileset dir="${build}">
804          <include name="**/*NotPassingYet.class"/>
805        </fileset>
806      </batchtest>
807    </junit>
808    <delete dir="${basedir}/test-tmp" />
809    <fail message="Tests expected to fail are failing!" if="tests.failed"/>
810  </target>
811
812  <target name="testSpecData" depends="compile"
813          description="Run SpecDataJUTests.">
814    <mkdir dir="${test.results}"/>
815    <mkdir dir="${basedir}/test-tmp" />
816    <junit printsummary="on"
817           haltonerror="off"
818           haltonfailure="off"
819           showoutput="yes"
820           fork="true"
821           maxmemory="${junitMem}"
822           errorProperty="tests.failed"
823           failureProperty="tests.failed">
824      <classpath refid="compile.classpath"/>
825      <jvmarg value="-Djava.io.tmpdir=${basedir}/test-tmp" />
826      <formatter type="plain" usefile="true"/>
827      <batchtest fork="true" todir="${test.results}">
828        <fileset dir="${build}">
829          <include name="**/SpecDataJUTest.class"/>
830        </fileset>
831      </batchtest>
832    </junit>
833    <delete dir="${basedir}/test-tmp" />
834    <fail message="Tests expected to pass are failing!" if="tests.failed"/>
835  </target>
836
837  <target name="testSystem" depends="compile"
838          description="Run SystemJUTests.">
839    <mkdir dir="${test.results}"/>
840    <mkdir dir="${basedir}/test-tmp" />
841    <junit printsummary="on"
842           haltonerror="off"
843           haltonfailure="off"
844           showoutput="yes"
845           fork="true"
846           maxmemory="${junitMem}"
847           errorProperty="tests.failed"
848           failureProperty="tests.failed">
849      <classpath refid="compile.classpath"/>
850      <jvmarg value="-Djava.io.tmpdir=${basedir}/test-tmp" />
851      <formatter type="plain" usefile="true"/>
852      <batchtest fork="true" todir="${test.results}">
853        <fileset dir="${build}">
854          <include name="**/SystemJUTest.class"/>
855        </fileset>
856      </batchtest>
857    </junit>
858    <delete dir="${basedir}/test-tmp" />
859    <fail message="Tests expected to pass are failing!" if="tests.failed"/>
860  </target>
861
862  <target name="testblas" depends="compile,blas" description="Test blas">
863    <mkdir dir="${basedir}/test-tmp" />
864    <junit printsummary="on"
865           haltonerror="off"
866           haltonfailure="off"
867           showoutput="yes"
868           fork="true"
869           maxmemory="${junitMem}"
870           errorProperty="tests.failed"
871           failureProperty="tests.failed">
872      <classpath refid="compile.classpath"/>
873      <jvmarg value="-Djava.io.tmpdir=${basedir}/test-tmp" />
874      <formatter type="plain" usefile="true"/>
875      <batchtest fork="true" todir="${test.results}">
876        <fileset dir="${build}">
877          <include name="**/BlasJxTest.class"/>
878        </fileset>
879      </batchtest>
880    </junit>
881    <delete dir="${basedir}/test-tmp" />
882    <fail message="Tests expected to pass are failing!" if="tests.failed"/>
883  </target>
884
885  <target name="testsyntax" depends="compile"
886          description="Run SyntaxAbstractionJUTests.">
887    <mkdir dir="${test.results}"/>
888    <mkdir dir="${basedir}/test-tmp" />
889    <junit printsummary="on"
890           haltonerror="off"
891           haltonfailure="off"
892           showoutput="yes"
893           fork="true"
894           maxmemory="${junitMem}"
895           errorProperty="tests.failed"
896           failureProperty="tests.failed">
897      <classpath refid="compile.classpath"/>
898      <jvmarg value="-Djava.io.tmpdir=${basedir}/test-tmp" />
899      <formatter type="plain" usefile="true"/>
900      <batchtest fork="true" todir="${test.results}">
901        <fileset dir="${build}">
902          <include name="**/SyntaxAbstractionJUTest.class"/>
903          <!--
904              <include name="**/SyntaxAbstractionJUTestAll.class"/>
905          -->
906        </fileset>
907      </batchtest>
908    </junit>
909    <delete dir="${basedir}/test-tmp" />
910    <fail message="Tests expected to pass are failing!" if="tests.failed"/>
911  </target>
912
913  <target name="testDemos" depends="compile"
914          description="Run demos in a test harness.">
915    <mkdir dir="${test.results}"/>
916    <mkdir dir="${basedir}/test-tmp" />
917    <junit printsummary="on"
918           haltonerror="off"
919           haltonfailure="off"
920           showoutput="yes"
921           fork="true"
922           maxmemory="${junitMem}"
923           errorProperty="tests.failed"
924           failureProperty="tests.failed">
925      <classpath refid="compile.classpath"/>
926      <jvmarg value="-Djava.io.tmpdir=${basedir}/test-tmp" />
927      <formatter type="brief" usefile="true"/>
928      <batchtest fork="true" todir="${test.results}">
929        <fileset dir="${build}">
930          <include name="**/DemoTests.class"/>
931        </fileset>
932      </batchtest>
933    </junit>
934    <delete dir="${basedir}/test-tmp" />
935    <fail message="Tests expected to pass are failing!" if="tests.failed"/>
936  </target>
937
938  <target name="testAll"
939          depends="test, testNotPassing, testDemos, reportNotPassing"
940          description="Run all tests, including those known not to pass yet.">
941  </target>
942
943  <target name="testNightly" depends="test, testDemos, testsyntax"
944          description="Run tests, demos, and syntax abstraction tests.">
945  </target>
946
947  <target name="reportNotPassing"
948          if="not.passing.yet"
949          depends="test,testNotPassing">
950    <echo message="Some tests expected to fail still aren't passing."/>
951  </target>
952
953  <!-- If the generated file Fortress.java is no older than all rats files
954       in the parser directory, then the parser must be up to date.
955       This is a conservative test; a more precise test would perform a
956       dependency analysis over Rats! code.-->
957  <target name="checkParserUptodate" depends="init">
958    <condition property="parser.uptodate">
959      <and>
960        <uptodate targetfile="${parser}/Fortress.java">
961          <srcfiles dir="${parser}" includes="**/*.rats"/>
962        </uptodate>
963        <uptodate targetfile="${preparser}/PreFortress.java">
964          <srcfiles dir="${parser}" includes="**/*.rats"/>
965          <srcfiles dir="${preparser}" includes="**/*.rats"/>
966        </uptodate>
967        <uptodate targetfile="${templateparser}/TemplateParser.java">
968          <srcfiles dir="${parser}" includes="**/*.rats"/>
969          <srcfiles dir="${templateparser}" includes="**/*.rats"/>
970        </uptodate>
971      </and>
972    </condition>
973    <echo>Parser up to date? ${parser.uptodate}</echo>
974  </target>
975
976  <target name="checkFortressParserUptodate" depends="init">
977    <uptodate property="fortressparser.uptodate"
978              targetfile="${parser}/Fortress.java">
979      <srcfiles dir="${parser}" includes="**/*.rats"/>
980    </uptodate>
981    <echo>Fortress parser up to date? ${parser.uptodate}</echo>
982  </target>
983
984  <target name="checkPreparserUptodate" depends="init">
985    <uptodate property="preparser.uptodate"
986              targetfile="${preparser}/PreFortress.java">
987      <srcfiles dir="${parser}" includes="**/*.rats"/>
988      <srcfiles dir="${preparser}" includes="**/*.rats"/>
989    </uptodate>
990    <echo>Preparser up to date? ${preparser.uptodate}</echo>
991  </target>
992
993  <target name="checkTemplateparserUptodate" depends="init">
994    <uptodate property="templateparser.uptodate"
995              targetfile="${templateparser}/TemplateParser.java">
996      <srcfiles dir="${parser}" includes="**/*.rats"/>
997      <srcfiles dir="${templateparser}" includes="**/*.rats"/>
998    </uptodate>
999    <echo>Templateparser up to date? ${templateparser.uptodate}</echo>
1000  </target>
1001
1002  <target name="checkInstrumentedParserUptodate" depends="init">
1003    <uptodate property="instrumentedparser.uptodate"
1004              targetfile="${parser}/FortressInstrumented.java">
1005      <srcfiles dir="${parser}" includes="**/*.rats"/>
1006      <srcfiles dir="${src}/${instrumentationPackage}"
1007                includes="*.java"/>
1008    </uptodate>
1009    <echo>Fortress parser up to date? ${parser.uptodate}</echo>
1010  </target>
1011
1012  <macrodef name="buildparser">
1013    <attribute name="name" />
1014    <attribute name="file" />
1015    <attribute name="dir" />
1016    <sequential>
1017      <echo message="Rebuilding @{name}..."/>
1018      <java fork="yes"
1019            failonerror="yes"
1020            dir="@{dir}"
1021            classname="xtc.parser.Rats"
1022            classpath="${xtc}/xtc.jar">
1023        <arg value="-in"/>
1024        <arg value="${src}"/>
1025        <arg value="@{file}"/>
1026      </java>
1027    </sequential>
1028  </macrodef>
1029
1030  <target name="fortressparser" unless="fortressparser.uptodate"
1031          depends="checkFortressParserUptodate"
1032          description="Fortress Parser">
1033    <buildparser name="Fortress" dir="${parser}" file="Fortress.rats" />
1034  </target>
1035
1036  <target name="preparser" unless="preparser.uptodate"
1037          depends="checkPreparserUptodate"
1038          description="Preparser">
1039    <buildparser name="preparser" dir="${preparser}" file="PreFortress.rats" />
1040  </target>
1041
1042  <target name="templateparser" unless="templateparser.uptodate"
1043          depends="checkTemplateparserUptodate"
1044          description="Templateparser">
1045    <buildparser name="template parser" dir="${templateparser}"
1046                 file="TemplateParser.rats" />
1047  </target>
1048
1049  <target name="instrumentedparser" unless="instrumentedparser.uptodate"
1050          depends="compile, checkInstrumentedParserUptodate"
1051          description="Instrumented Parser">
1052    <java fork="yes"
1053          maxmemory="512m"
1054          failonerror="yes"
1055          classname="${instrumentation.package}.InstrumentedParserGenerator">
1056      <classpath refid="instrumentedparser.classpath"/>
1057      <arg value="${parser}"/> <!-- input dir -->
1058      <arg value="${parser}"/> <!-- output dir for FortressInstrumented.java -->
1059    </java>
1060  </target>
1061
1062  <target name="optimizeParser"
1063          depends="compile"
1064          description="Optimized Parser">
1065    <java fork="yes"
1066          maxmemory="512m"
1067          failonerror="yes"
1068          classname="${instrumentation.package}.OptimizedParserGenerator">
1069      <classpath refid="instrumentedparser.classpath"/>
1070      <arg value="${parser}"/> <!-- input dir -->
1071      <arg value="${parser}"/> <!-- output dir for Fortress.java -->
1072      <arg value="${instrumentation.transient}"/>
1073    </java>
1074    <ant target="compile"/>
1075  </target>
1076
1077  <target name="parser" unless="parser.uptodate"
1078          depends="checkParserUptodate, operatorsGen"
1079          description="Fortress Parser">
1080    <ant target="fortressparser" />
1081    <ant target="preparser" />
1082    <ant target="templateparser" />
1083  </target>
1084
1085  <target name="compileGrammarCoverage" depends="compile, instrumentedparser">
1086    <depend srcdir="${src}"
1087            destdir="${build}"
1088            closure="yes"
1089            cache="${basedir}/.dependencies"/>
1090    <javac
1091        srcdir="${src}"
1092        destdir="${build}"
1093        source="1.5"
1094        debug="true"
1095        includeantruntime="false"
1096        fork="true"
1097        memorymaximumsize="${junitMem}">
1098      <!-- Uncomment the following line to print unchecked warnings
1099           (here and in the 'compileCommon' target. -->
1100      <!-- <compilerarg value="-Xlint:unchecked"/> -->
1101      <classpath refid="compile.classpath"/>
1102      <include name="${packagePrefix}/parser/FortressInstrumented.java"/>
1103    </javac>
1104  </target>
1105
1106  <target name="grammarCoverage" depends="compileGrammarCoverage">
1107    <java fork="yes"
1108          failonerror="yes"
1109          classname="${instrumentation.package}.Coverage"
1110          output="${instrumentation.outfile}">
1111      <classpath refid="compile.classpath"/>
1112    </java>
1113    <echo message="Wrote grammar coverage report to ${instrumentation.outfile}"/>
1114  </target>
1115
1116  <target name="doc" depends="compile">
1117    <javadoc overview="${src}/overview.html" destdir="${docs}" maxmemory="${junitMem}">
1118      <classpath refid="compile.classpath"/>
1119      <packageset dir="${src}">
1120        <include name="**/*"/>
1121      </packageset>
1122      <header><![CDATA[Fortress Interpreter]]></header>
1123      <doctitle><![CDATA[<h1>Fortress Interpreter Source Code</h1>]]></doctitle>
1124      <group title="Evaluator Packages"
1125             packages="com.sun.fortress.interpreter.evaluator.*"/>
1126      <link href="http://junit.org/junit/javadoc/3.8.1/"/>
1127      <link href="http://java.sun.com/j2se/1.5/docs/api/"/>
1128      <link href="http://drjava.org/javadoc/plt/"/>
1129    </javadoc>
1130  </target>
1131
1132  <target name="jar"
1133          depends="compile"
1134          description="Package up a Fortress distribution as a self-extracting jar.">
1135    <tstamp>
1136      <format
1137          property="jar.DSTAMP"
1138          timezone="GMT"
1139          pattern="yyyy_MMdd_hhmm"/>
1140    </tstamp>
1141
1142    <!-- Extract Ant jars into build directory to be packaged up.-->
1143    <unjar src="${protofortress}/lib/ant.jar" dest="${build}"/>
1144    <unjar src="${protofortress}/lib/ant-launcher.jar" dest="${build}"/>
1145
1146    <!-- Place anthooks.jar in the protofortress. -->
1147    <copy file="${src}/com/sun/fortress/shell/anthooks.xml"
1148          todir="${protofortress}/bin"/>
1149
1150    <!-- Package up class files as a new shell.jar,
1151         and place them in the protofortress. -->
1152    <jar
1153        destfile="fortress/FORTRESS/lib/shell.jar"
1154        basedir="${build}"
1155        includes="**/*"/>
1156
1157    <!-- Then package up the protofortress and place it
1158         in the build directory (so it can be extracted later). -->
1159    <jar
1160        destfile="${build}/com/sun/fortress/shell/fortress.jar"
1161        basedir="fortress"
1162        includes="**/*" />
1163
1164    <!-- Write timestamp of jar creation to a file for retrieval during
1165         extraction. -->
1166    <echo message="${jar.DSTAMP}" file="${build}/TIMESTAMP"/>
1167
1168    <!-- Finally, package up the build directory into a jar that
1169         extracts the protofortress at a destination site. -->
1170    <jar
1171        destfile="Fortress_${jar.DSTAMP}.jar"
1172        basedir="${build}"
1173        includes="**/*" >
1174      <manifest>
1175        <attribute name="Manifest-Version" value="${jar.DSTAMP}"/>
1176        <attribute name="Created-By" value="Sun Microsystems, Inc."/>
1177        <attribute name="Main-Class" value="com.sun.fortress.shell.Extractor"/>
1178        <section name="common/class1.class">
1179          <attribute name="Sealed" value="false"/>
1180        </section>
1181      </manifest>
1182    </jar>
1183  </target>
1184
1185  <target name="copy.anthooks" depends="init" unless="anthooks.uptodate">
1186    <copy file="${src}/com/sun/fortress/shell/anthooks.xml"
1187          todir="${build}/com/sun/fortress/shell"
1188          overwrite="false"/>
1189  </target>
1190
1191  <target name="installer" depends="compile"
1192          description="build a new installer as a jar">
1193    <delete dir="${installerDir}"/>
1194    <mkdir dir="${installerDir}/fortress"/>
1195    <copy todir="${installerDir}/fortress/FORTRESS">
1196      <fileset dir="FORTRESS"/>
1197    </copy>
1198    <copy todir="${installerDir}/fortress/bin">
1199      <fileset dir="bin"/>
1200    </copy>
1201    <copy file="docs/installer/README.txt" todir="${installerDir}/fortress"/>
1202    <tar
1203        destfile="fortress.tar.gz"
1204        basedir="${installerDir}"
1205        longfile="fail"
1206        compression="gzip"
1207        />
1208    <delete dir="${installerDir}"/>
1209  </target>
1210
1211  <target name="createNestedJarUpgrade"
1212          description="wrap up a jar for inclusion in a mock upgrade">
1213    <jar
1214        destfile="jars/fortress_mock_upgrade/java/mock_upgrade.jar"
1215        basedir="jars/nested_jar_upgrade"
1216        includes="**/*"
1217        />
1218  </target>
1219
1220  <target name="createMockUpgrade" depends="createNestedJarUpgrade"
1221          description="build a mock upgrade file for testing selfupgrade">
1222    <jar
1223        destfile="FORTRESS/test/fortress_mock_upgrade.jar"
1224        basedir="jars/fortress_mock_upgrade"
1225        includes="**/*"
1226        />
1227  </target>
1228</project>
Note: See TracBrowser for help on using the browser.