source: branches/dev-mj-1626/Compiler/build-base.xml @ 13095

Last change on this file since 13095 was 13095, checked in by tgutzmann, 5 months ago

Merge from trunk

File size: 62.8 KB
Line 
1<!--
2    Copyright (C) 2014 Modelon AB
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation, version 3 of the License.
7
8    This program is distributed in the hope that it will be useful,
9    but WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11    GNU General Public License for more details.
12
13    You should have received a copy of the GNU General Public License
14    along with this program.  If not, see <http://www.gnu.org/licenses/>.
15-->
16
17<!-- Targets for working from terminal window:
18       build (default) - generates java files and compiles them
19       test            - runs junit test cases
20       clean           - removes all generated files and class files
21     Targets for working from Eclipse:
22       gen             - generates java files
23       gen-test        - generates junit test cases from test files
24       cleanGen        - removes all generated files and their class files
25 -->
26
27<project name="base">
28
29    <dirname property="base.dir" file="${ant.file.base}"/>
30
31    <property name="java_version" value="1.7"/>
32    <property name="java_compiler" value="javac${java_version}"/>
33
34    <fail unless="target" message="Property 'target' not set. Should point to build directory where this ant file will generate intermediate files and build outputs. For builds in eclipse we normally use ${workspace_loc:&lt;project&gt;/tools/eclipse/antbuild}."/>
35    <echo>build-base.xml: running in ${target}</echo>
36
37    <property name="compiler_build" value="${target}/src/build" />
38   
39    <!-- Temporary work directory with generated java files for either Modelica or Optimica configuration -->
40    <property name="java_output_intermediate" value="${compiler_build}/${sub_package}/java-generated-intermediate" />
41   
42    <!-- Temporary work directory with generated java files common for both Modelica and Optimica configuration -->
43    <property name="java_output_intermediate_common" value="${compiler_build}/src/${sub_package}/java-generated-intermediate-common" />
44   
45    <!-- Final output directory with generated java files for either Modelica or Optimica configuration -->
46    <property name="java_output_final" value="${target}/src/generated/${sub_package}/java" />
47   
48    <!-- Final output directory with generated java files common for both Modelica and Optimica configuration -->
49    <property name="java_output_final_common" value="${target}/src/generated/java" />
50   
51    <!-- Temporary work directory for updating static java files -->
52    <property name="java_temp" value="${target}/src/java-generated-temporary" />
53   
54    <property name="resources_temp" value="${target}/src/resources-temporary" />
55    <property name="junit_output" value="${target}/src/generated/${sub_package}/junit" />
56    <property name="test_output" value="${target}/doc/junit-reports" />
57    <property name="class_output" value="${target}/bin" />
58    <property name="build_class_output" value="${compiler_build}/bin" />
59    <property name="jar_output" value="${target}/bin" />
60
61    <property name="jastadd_dir" value="${base.dir}/../ThirdParty/JastAdd" />
62    <property name="junit_dir" value="${base.dir}/../ThirdParty/Junit" />
63    <property name="junit_jar" value="${junit_dir}/junit-4.10.jar" />
64    <property name="jflex_dir" value="${base.dir}/../ThirdParty/JFlex/jflex-1.4.3" />
65    <property name="beaver_dir" value="${base.dir}/../ThirdParty/Beaver/beaver-0.9.6.1" />
66    <property name="beaver_jar" value="${beaver_dir}/lib/beaver.jar"/>
67    <property name="beaver-rt_jar" value="${beaver_dir}/lib/beaver-rt.jar"/>
68    <property name="ant-contrib_dir" value="${base.dir}/../ThirdParty/Ant-Contrib/ant-contrib-1.0b3" />
69
70    <property name="extra_modules" value="" />
71
72    <property name="timestamp_format" value="yyyyDDDHHmmssSSS"/>
73
74    <!-- for ant-contrib (foreach, etc) -->
75    <taskdef resource="net/sf/antcontrib/antlib.xml">
76        <classpath path="${ant-contrib_dir}/target/ant-contrib.jar" />
77    </taskdef>
78    <!-- "jflex" is an ant task class for the scanner generator in JFlex.jar -->
79    <taskdef name="jflex" classname="JFlex.anttask.JFlexTask" classpath="${jflex_dir}/lib/JFlex.jar" />
80    <!-- "beaver" is an ant task class for the parser generator in beaver.jar -->
81    <taskdef name="beaver" classname="beaver.comp.run.AntTask" classpath="${beaver_jar}" />
82   
83    <!-- calculate directories for java files -->
84    <property name="jm_package" value="org.jmodelica" />
85    <if>
86        <isset property="base_package"/>
87        <else> <property name="base_package" value="${jm_package}.${sub_package}" /> </else>
88    </if>
89    <if>
90        <isset property="ast_package"/>
91        <else> <property name="ast_package" value="${base_package}.compiler" /> </else>
92    </if>
93    <property name="test_class_output" value="${target}/bin-test/${ast_package}" />
94    <if>
95        <isset property="parser_package"/>
96        <else> <property name="parser_package" value="${base_package}.parser" /> </else>
97    </if>
98    <if>
99        <isset property="test_package"/>
100        <else> <property name="test_package" value="org.jmodelica.test.${sub_package}.junitgenerated" /> </else>
101    </if>
102    <propertyregex property="ast_package_dir" input="${ast_package}" defaultValue="${ast_package}" regexp="\." replace="/" global="true" />
103    <property name="ast_output" value="${java_output_intermediate}/${ast_package_dir}" />
104    <propertyregex property="parser_package_dir" input="${parser_package}" defaultValue="${parser_package}" regexp="\." replace="/" global="true" />
105    <property name="parsers.output" value="${java_output_intermediate}/${parser_package_dir}" />
106    <property name="parsers.builddir" value="${compiler_build}/${sub_package}/parsers" />
107    <property name="scanners.output" value="${java_output_intermediate}" />
108    <property name="scanners.builddir" value="${compiler_build}/${sub_package}/scanners" />
109    <propertyregex property="test_package_dir" input="${test_package}" defaultValue="${test_package}" regexp="\." replace="/" global="true" />
110    <property name="test_package_output" value="${junit_output}/${test_package_dir}" />
111    <property name="test_class_name" value="Tests" />
112    <property name="test_file" value="${test_package_output}/${test_class_name}.java" />
113    <property name="test_file_module_separator" value=", ${line.separator}              " />
114
115    <!-- If javadoc.packages is set, make sure javadoc.path is as well -->
116    <if>
117        <and>
118            <isset property="javadoc.packages"/>
119            <not><isset property="javadoc.path"/></not>
120        </and>
121        <then>
122            <property name="javadoc.path" value="doc/javadoc"/>
123        </then>
124    </if>
125    <property name="javadoc_output" value="${target}/${javadoc.path}" />
126
127    <!-- inject any extra packages into set -->
128
129    <!-- calculate module list -->
130    <var name="modules_temp" value=""/>
131    <for list="${sets}" param="set">
132        <sequential>
133            <if>
134                <isset property="@{set}.found" />
135                <else>
136                    <property name="@{set}.found" value="1"/>
137                    <for list="${@{set}.modules}" param="module">
138                        <sequential>
139                            <property name="@{module}.path" value="${@{set}.base}/@{module}"/>
140                        </sequential>
141                    </for>
142                    <var name="modules_temp" value="${modules_temp},${@{set}.modules}"/>
143                </else>
144            </if>
145        </sequential>
146    </for>
147    <!-- add any extra modules specified on command line -->
148    <for list="${extra_modules}" param="extra">
149        <sequential>
150            <propertyregex property="extra_mod" input="@{extra}" regexp="^[^:]+:" replace="" global="true" />
151            <propertyregex property="extra_set" input="@{extra}" regexp=":[^:]+$" replace="" global="true" />
152            <for list="${extra_set}" param="set">
153                <sequential>
154                    <if>
155                        <isset property="@{set}.found" />
156                        <then>
157                            <property name="${extra_mod}.path" value="${@{set}.base}/${extra_mod}"/>
158                            <var name="modules_temp" value="${modules_temp},${extra_mod}"/>
159                        </then>
160                    </if>
161                </sequential>
162            </for>
163        </sequential>
164    </for>
165    <propertyregex property="modules" input="${modules_temp}" regexp="(^)[,]*|[,]+($|,)" replace="\1" global="true" />
166   
167    <!-- import module build files -->
168    <for list="${modules}" param="module">
169        <sequential>
170            <if>
171                <available file="${@{module}.path}/build-module.xml" />
172                <then>
173                    <include file="${@{module}.path}/build-module.xml"/>
174                </then>
175            </if>
176        </sequential>
177    </for>
178
179    <!-- build list of module directories to use in temp file -->
180    <var name="module_dirs_temp" value=""/>
181    <for list="${modules}" param="module">
182        <sequential>
183            <var name="module_dirs_temp" value="${module_dirs_temp}${test_file_module_separator}&quot;${@{module}.path}&quot;" />
184        </sequential>
185    </for>
186    <propertyregex property="module_dirs_temp2" input="${module_dirs_temp}" regexp="^${test_file_module_separator}" replace="" />
187    <propertyregex property="module_dirs" input="${module_dirs_temp2}" regexp="\\" replace="/" defaultValue="${module_dirs_temp2}" />
188
189    <!-- calculate set of jastadd files to use -->
190    <var name="jastadd_files_temp" value=""/>
191    <var name="jastadd_file_list_temp" value=""/>
192    <for list="${modules}" param="module">
193        <sequential>
194            <if>
195                <and>
196                    <available file="${@{module}.path}/src/jastadd" type="dir" />
197                </and>
198                <then>
199                    <fileset dir="${@{module}.path}" id="jastadd_files_temp_set">
200                        <include name="src/jastadd/**/*.ast" />
201                        <include name="src/jastadd/**/*.jadd" />
202                        <include name="src/jastadd/**/*.jrag" />
203                    </fileset>
204                    <for list="${toString:jastadd_files_temp_set}" delimiter=";:" param="file">
205                        <sequential>
206                            <var name="jastadd_files_temp" value="${jastadd_files_temp} &quot;${@{module}.path}/@{file}&quot;" />
207                            <var name="jastadd_file_list_temp" value="${jastadd_file_list_temp},${@{module}.path}/@{file}" />
208                        </sequential>
209                    </for>
210                </then>
211            </if>
212        </sequential>
213    </for>
214    <property name="jastadd_files" value="${jastadd_files_temp}" />
215    <propertyregex property="jastadd_file_list" input="${jastadd_file_list_temp}" regexp="^," replace="" />
216   
217    <!-- calculate set of java source file dirs to use -->
218    <var name="java_dirs_temp" value=""/>
219    <for list="${modules}" param="module">
220        <sequential>
221            <condition property="@{module}.disable_java_copy" else="false">
222                <isset property="@{module}.disable_java_copy" />
223            </condition>
224            <var name="has_java_replace_temp" value="false"/>
225            <var name="has_java_rename_package_temp" value="false"/>
226            <if>
227                <isset property="@{module}.java_replace" />
228                <then>
229                    <for list="${@{module}.java_replace}" param="replace">
230                        <sequential>
231                            <if>
232                                <and>
233                                    <isset property="@{module}.java_replace.@{replace}.from" />
234                                    <isset property="@{module}.java_replace.@{replace}.to" />
235                                    <not><equals arg1="${@{module}.java_replace.@{replace}.from}" arg2="${@{module}.java_replace.@{replace}.to}" /></not>
236                                </and>
237                                <then>
238                                    <var name="has_java_replace_temp" value="true"/>
239                                </then>
240                                <else>
241                                    <property name="@{module}.java_replace.@{replace}.skip" value="true" />
242                                </else>
243                            </if>
244                        </sequential>
245                    </for>
246                </then>
247            </if>
248            <if>
249                <isset property="@{module}.java_rename_package" />
250                <then>
251                    <for list="${@{module}.java_rename_package}" param="rename">
252                        <sequential>
253                            <if>
254                                <and>
255                                    <isset property="@{module}.java_rename_package.@{rename}.from" />
256                                    <isset property="@{module}.java_rename_package.@{rename}.to" />
257                                    <not><equals arg1="${@{module}.java_rename_package.@{rename}.from}" arg2="${@{module}.java_rename_package.@{rename}.to}" /></not>
258                                </and>
259                                <then>
260                                    <var name="has_java_rename_package_temp" value="true"/>
261                                    <propertyregex property="@{module}.java_rename_dir.@{rename}.from" input="${@{module}.java_rename_package.@{rename}.from}" 
262                                        regexp="\." replace="/" defaultValue="${@{module}.java_rename_package.@{rename}.from}" override="true" global="true" />
263                                    <propertyregex property="@{module}.java_rename_dir.@{rename}.to" input="${@{module}.java_rename_package.@{rename}.to}" 
264                                        regexp="\." replace="/" defaultValue="${@{module}.java_rename_package.@{rename}.to}" override="true" global="true" />
265                                </then>
266                                <else>
267                                    <property name="@{module}.java_rename_package.@{rename}.skip" value="true" />
268                                </else>
269                            </if>
270                        </sequential>
271                    </for>
272                </then>
273            </if>
274            <property name="@{module}.has_java_replace" value="${has_java_replace_temp}" />
275            <property name="@{module}.has_java_rename_package" value="${has_java_rename_package_temp}" />
276            <condition property="@{module}.need_patch_java" else="false">
277                <or>
278                    <istrue value="${@{module}.has_java_replace}" />
279                    <istrue value="${@{module}.has_java_rename_package}" />
280                </or>
281            </condition>
282            <property name="@{module}.java_path" value="${@{module}.path}/src/java"/>
283            <if>
284                <and>
285                    <available file="${@{module}.java_path}" />
286                    <not>
287                        <and>
288                            <istrue value="${@{module}.need_patch_java}" />
289                            <isfalse value="${@{module}.disable_java_copy}" />
290                        </and>
291                    </not>
292                </and>
293                <then>
294                    <var name="java_dirs_temp" value="${java_dirs_temp}:${@{module}.java_path}" />
295                </then>
296            </if>
297            <if>
298                <isset property="@{module}.pre_generated" />
299                <then>
300                    <for list="${@{module}.pre_generated}" param="pregenerated">
301                        <sequential>
302                            <propertyregex property="java_dir_pre_temp" input="@{pregenerated}" regexp="\." replace="/" 
303                                    defaultValue="@{pregenerated}" override="true" global="true" />
304                            <var name="java_dirs_temp" value="${java_dirs_temp}:${java_output_final}/${java_dir_pre_temp}" />
305                        </sequential>
306                    </for>
307                </then>
308            </if>
309        </sequential>
310    </for>
311    <propertyregex property="java_dirs" input="${java_dirs_temp}" regexp="^:" replace="" defaultvalue="" />
312
313    <macrodef name="extra-calc-macro">
314        <attribute name="generate"  default="NOT SET"/>
315        <attribute name="gen-extra" default="NOT SET"/>
316        <attribute name="generated" default="NOT SET"/>
317        <sequential>
318            <for list="${modules}" param="module">
319                <sequential>
320                    <if>
321                        <isset property="@{module}.@{generate}"/>
322                        <then>
323                            <propertyregex property="@{module}.@{gen-extra}.javafile" 
324                                input="${@{module}.@{generate}}" defaultValue="${@{module}.@{generate}}" 
325                                regexp="\." replace="/" override="true" global="true" />
326                            <property name="@{module}.@{gen-extra}.java_file_path" value="${@{module}.java_path}/${@{module}.@{gen-extra}.javafile}.java"/>
327                            <propertyregex property="@{module}.@{gen-extra}.gen_path.tmp" 
328                                input="${@{module}.package.@{generated}}" defaultValue="${@{module}.package.@{generated}}" 
329                                regexp="\." replace="/" global="true" />
330                            <if>
331                                <matches pattern=".*${sub_package}.*" string="${@{module}.package.@{generated}}"/>
332                                <then>
333                                    <property name="@{module}.@{gen-extra}.gen_path" value="${java_output_intermediate}/${@{module}.@{gen-extra}.gen_path.tmp}"/>
334                                </then>
335                                <else>
336                                    <property name="@{module}.@{gen-extra}.gen_path" value="${java_output_intermediate_common}/${@{module}.@{gen-extra}.gen_path.tmp}"/>
337                                </else>
338                            </if>
339                        </then>
340                    </if>
341                </sequential>
342            </for>
343        </sequential>
344    </macrodef>
345
346    <!-- calculate extra java file generators -->
347    <extra-calc-macro generate="generate"     gen-extra="gen-extra"     generated="generated"/>
348
349    <!-- calculate set of junit source file dirs to use -->
350    <var name="junit_dirs_temp" value=""/>
351    <for list="${modules}" param="module">
352        <sequential>
353            <if>
354                <available file="${@{module}.path}/test/junit" />
355                <then>
356                    <property name="@{module}.junit_path" value="${@{module}.path}/test/junit" />
357                    <if>
358                        <isfalse value="${@{module}.need_patch_java}" />
359                        <then>
360                            <var name="junit_dirs_temp" value="${junit_dirs_temp}:${@{module}.junit_path}" />
361                        </then>
362                    </if>
363                </then>
364            </if>
365        </sequential>
366    </for>
367    <propertyregex property="junit_dirs" input="${junit_dirs_temp}" regexp="^:" replace="" defaultvalue="" />
368   
369    <!-- calculate set of resource dirs to use -->
370    <var name="test_resource_dirs_temp" value=""/>
371    <var name="resource_dirs_temp" value=""/>
372    <for list="${modules}" param="module">
373        <sequential>
374            <if>
375                <available file="${@{module}.path}/test/resources" />
376                <then>
377                    <var name="test_resource_dirs_temp" value="${test_resource_dirs_temp}:${@{module}.path}/test/resources" />
378                </then>
379            </if>
380            <if>
381                <available file="${@{module}.path}/src/resources" />
382                <then>
383                    <var name="resource_dirs_temp" value="${resource_dirs_temp}:${@{module}.path}/src/resources" />
384                </then>
385            </if>
386        </sequential>
387    </for>
388    <propertyregex property="test_resource_dirs" input="${test_resource_dirs_temp}" regexp="^:" replace="" defaultvalue="" />
389    <propertyregex property="resource_dirs" input="${resource_dirs_temp}" regexp="^:" replace="" defaultvalue="" />
390   
391    <!-- calculate set of test helpers to use -->
392    <var name="test_helper_java_patterns_temp" value=""/>
393    <var name="test_helper_class_patterns_temp" value=""/>
394    <var name="test_helper_packages_temp" value=""/>
395    <var name="test_helper_dirs_temp" value=""/>
396    <for list="${modules}" param="module">
397        <sequential>
398            <if>
399                <isset property="@{module}.test_helpers"/>
400                <then>
401                    <propertyregex property="test_helper_dir_temp" input="${@{module}.test_helpers}" regexp="\." replace="/" 
402                            defaultValue="${@{module}.test_helpers}" override="true" global="true" />
403                    <var name="test_helper_java_patterns_temp" value="${test_helper_java_patterns_temp},${test_helper_dir_temp}/*.java"/>
404                    <var name="test_helper_class_patterns_temp" value="${test_helper_class_patterns_temp},${test_helper_dir_temp}/*.class"/>
405                    <var name="test_helper_packages_temp" value="${test_helper_packages_temp},${@{module}.test_helpers}"/>
406                    <var name="test_helper_dirs_temp" value="${test_helper_dirs_temp}:${@{module}.java_path}/${test_helper_dir_temp}"/>
407                </then>
408            </if>
409        </sequential>
410    </for>
411    <propertyregex property="test_helper_java_patterns" input="${test_helper_java_patterns_temp}" regexp="^," replace="" defaultvalue="" />
412    <propertyregex property="test_helper_class_patterns" input="${test_helper_class_patterns_temp}" regexp="^," replace="" defaultvalue="" />
413    <propertyregex property="test_helper_packages" input="${test_helper_packages_temp}" regexp="^," replace="" defaultvalue="" />
414    <propertyregex property="test_helper_dirs" input="${test_helper_dirs_temp}" regexp="^:" replace="" defaultvalue="" />
415   
416    <!-- calculate sets of jar files, and set of java files to compile for them -->
417    <var name="compiler_jars_temp" value="${beaver-rt_jar}" />
418    <var name="compile_java_patterns_temp" value="" />
419    <for list="${jars}" param="jar">
420        <sequential>
421            <var name="compiler_jars_temp" value="${compiler_jars_temp}:${jar_output}/@{jar}.jar" />
422            <var name="compile_java_patterns_temp" value="${compile_java_patterns_temp}${@{jar}.jar.packages}," />
423        </sequential>
424    </for>
425    <property name="compiler_jars" value="${compiler_jars_temp}" />
426    <property name="test_jars" value="${compiler_jars}:${junit_jar}" />
427    <propertyregex property="compile_java_patterns_temp2" input="${compile_java_patterns_temp}" regexp="\." replace="/" defaultvalue="${compile_java_patterns_temp}" />
428    <propertyregex property="compile_java_patterns_temp3" input="${compile_java_patterns_temp2}" regexp="," replace="/**/*.java," defaultvalue="${compile_java_patterns_temp2}" />
429    <propertyregex property="compile_java_patterns" input="${compile_java_patterns_temp3}" regexp=",$" replace="" defaultvalue="" />
430   
431   
432    <!-- Build compiler jars. -->
433    <target name="build" depends="compile-ast" description="Build all jars needed by compiler.">
434        <mkdir dir="${jar_output}" />
435        <for list="${jars}" param="jar">
436            <sequential>
437                <var name="build_file_patterns_temp" value="" />
438                <for list="${@{jar}.jar.packages}" param="package">
439                    <sequential>
440                        <propertyregex property="build_class_dir" input="@{package}" defaultValue="@{package}" regexp="\." replace="/" override="true" />
441                        <var name="build_file_patterns_temp" value="${build_file_patterns_temp},${build_class_dir}/**/*.class" />
442                    </sequential>
443                </for>
444                <propertyregex property="build_file_patterns" input="${build_file_patterns_temp}" regexp="^," replace="" override="true" />
445                <if>
446                    <istrue value="${@{jar}.jar.include_resources}" />
447                    <then>
448                        <mkdir dir="${resources_temp}" />
449                        <for list="${modules}" param="module">
450                            <sequential>
451                                <if>
452                                    <available file="${@{module}.path}/src/resources" />
453                                    <then>
454                                        <echo message="Using resources from @{module} in @{jar}.jar" />
455                                        <copy todir="${resources_temp}">
456                                            <fileset dir="${@{module}.path}/src/resources" />
457                                        </copy>
458                                    </then>
459                                </if>
460                            </sequential>
461                        </for>
462                        <jar destfile="${jar_output}/@{jar}.jar">
463                            <fileset dir="${class_output}" includes="${build_file_patterns}" />
464                            <fileset dir="${resources_temp}" />
465                        </jar>
466                        <delete dir="${resources_temp}" />
467                    </then>
468                    <else>
469                        <jar destfile="${jar_output}/@{jar}.jar">
470                            <fileset dir="${class_output}" includes="${build_file_patterns}" />
471                        </jar>
472                    </else>
473                </if>
474            </sequential>
475        </for>
476    </target>
477
478    <macrodef name="sync-macro">
479        <attribute name="fromdir"  default="NOT SET"/>
480        <attribute name="todir" default="NOT SET"/>
481        <!--
482            Mirror the intermediate directory with the final one (that's used in
483            subsequent steps), copying files that differ and removing files that
484            do not exist anymore. Then remove the intermediate directory.
485        -->
486        <sequential>
487            <mkdir dir="@{todir}" />
488            <!-- Build list of files to exclude from deletion -->
489            <var name="excludes" value="" />
490            <for list="${modules}" param="module">
491                <sequential>
492                    <if>
493                        <isset property="@{module}.pre_generated" />
494                        <then>
495                            <for list="${@{module}.pre_generated}" param="pregenerated">
496                                <sequential>
497                                    <propertyregex property="java_dir_pre_temp" input="@{pregenerated}" regexp="\." replace="/" 
498                                            defaultValue="@{pregenerated}" override="true" global="true" />
499                                    <var name="excludes" value="${excludes} ${java_dir_pre_temp}/**/*" />
500                                </sequential>
501                            </for>
502                        </then>
503                    </if>
504                </sequential>
505            </for>
506            <delete>
507                <!--
508                    In addition to removing files that do not exist in intermediate anymore
509                    this also wipes any changed files, to make sure we don't get any problems
510                    with file name case on windows.
511                -->
512                <fileset dir="@{todir}" includes="**/*" excludes="${excludes}">
513                    <different targetdir="@{fromdir}"/>
514                </fileset>
515            </delete>
516            <copy overwrite="true" todir="@{todir}">
517                <fileset dir="@{fromdir}" includes="**/*">
518                    <different targetdir="@{todir}"/>
519                </fileset>
520            </copy>
521            <delete dir="@{fromdir}" />
522        </sequential>
523    </macrodef>
524       
525    <!-- Meta target for generating all java files. -->
526    <target name="gen" depends="patch,parser,scanner,gen-test,gen-extra,patch-test" description="Generate all Java files.">
527        <sync-macro fromdir="${java_output_intermediate_common}" todir="${java_output_final_common}" />
528        <sync-macro fromdir="${java_output_intermediate}"        todir="${java_output_final}" />
529    </target>
530
531    <!-- Compile class used in patch target. -->
532    <target name="compile-patcher">
533        <mkdir dir="${class_output}" />
534        <for list="${modules}" param="module">
535            <sequential>
536                <if>
537                    <isset property="@{module}.patch"/>
538                    <then>
539                        <propertyregex property="compile-patcher.javafile" input="${@{module}.patch}" defaultValue="${@{module}.patch}" regexp="\." replace="/" override="true" global="true" />
540                        <javac compiler="${java_compiler}" source="${java_version}" target="${java_version}" 
541                                fork="true" encoding="UTF8" debug="false" destdir="${class_output}" includeantruntime="false">
542                            <src path="${@{module}.java_path}" />
543                            <include name="${compile-patcher.javafile}.java" />
544                        </javac>
545                    </then>
546                </if>
547            </sequential>
548        </for>
549    </target>
550
551    <macrodef name="compile-gen-extra-macro">
552        <attribute name="generate"  default="NOT SET"/>
553        <attribute name="gen-extra" default="NOT SET"/>
554        <sequential>
555            <mkdir dir="${build_class_output}" />
556            <for list="${modules}" param="module">
557                <sequential>
558                    <if>
559                        <isset property="@{module}.@{generate}"/>
560                        <then>
561                            <javac  classpath="${beaver-rt_jar}" 
562                                    srcdir="${java_dirs}:${@{module}.java_path}" 
563                                    compiler="${java_compiler}" 
564                                    source="${java_version}" 
565                                    target="${java_version}" 
566                                    fork="true" 
567                                    encoding="UTF8" 
568                                    debug="false" 
569                                    destdir="${build_class_output}" 
570                                    includeantruntime="false"
571                                    excludes="${test_helper_java_patterns}" >
572                                <include name="${@{module}.@{gen-extra}.javafile}.java" />
573                            </javac>
574                        </then>
575                    </if>
576                </sequential>
577            </for>
578        </sequential>
579    </macrodef>
580
581    <!-- Compile class used in gen-extra target. -->
582    <target name="compile-gen-extra">
583        <compile-gen-extra-macro generate="generate"     gen-extra="gen-extra" />
584    </target>
585
586    <!-- Compile all java files required by compiler (generated and static). -->
587    <target name="compile-ast" depends="gen">
588        <mkdir dir="${class_output}" />
589        <javac 
590            classpath="${beaver-rt_jar}" 
591            compiler="${java_compiler}" 
592            source="${java_version}" 
593            target="${java_version}" 
594            fork="true" 
595            encoding="UTF8" 
596            debug="false" 
597            destdir="${class_output}" 
598            includeantruntime="false"
599            srcdir="${java_output_final_common}:${java_output_final}:${java_dirs}" 
600            includes="${compile_java_patterns}" 
601            excludes="${test_helper_java_patterns}" />
602    </target>
603   
604    <!-- Generate JavaDoc. -->
605    <target name="artifacts" depends="build,doc" description="Generates artifacts, i.e. all jars and JavaDoc." />
606   
607    <!-- Generate JavaDoc. -->
608    <target name="doc" depends="gen" description="Generate JavaDoc.">
609        <if>
610            <isset property="javadoc.packages"/>
611            <then>
612                <!-- The javadoc directory is sometimes unusable, unclear why.
613                     It is recreated by the javadoc task. -->
614                <delete dir="${javadoc_output}" />
615                <javadoc 
616                    access="public" 
617                    sourcepath="${java_output_final_common}:${java_output_final}:${java_dirs}" 
618                    destdir="${javadoc_output}" 
619                    packagenames="${javadoc.packages}" 
620                    excludepackagenames="${test_helper_packages}" 
621                    classpath="${beaver-rt_jar}" />
622            </then>
623        </if>
624    </target>
625
626    <!-- generates ast files with JastAdd -->
627    <target name="ast">
628        <var name="ast_uptodate_temp" value="true" />
629        <for list="${modules}" param="module" >
630            <sequential>
631                <if>
632                    <available file="${@{module}.path}/src/jastadd" type="dir" />
633                    <then>
634                        <uptodate property="@{module}.ast_uptodate" targetfile="${ast_output}/ASTNode.java">
635                            <srcfiles dir="${@{module}.path}/src/jastadd">
636                                <include name="**/*.ast" />
637                                <include name="**/*.jadd" />
638                                <include name="**/*.jrag" />
639                            </srcfiles>
640                        </uptodate>
641                        <if>
642                            <not><isset property="@{module}.ast_uptodate" /></not>
643                            <then><var name="ast_uptodate_temp" value="false" /></then>
644                        </if>
645                    </then>
646                </if>
647            </sequential>
648        </for>
649        <if>
650            <equals arg1="${ast_uptodate_temp}" arg2="true" />
651            <then><property name="ast_uptodate" value="true" /></then>
652        </if>
653        <if>
654            <not><isset property="ast_uptodate" /></not>
655            <then>
656                <!-- get current time -->
657                <tstamp>
658                    <format property="ast_creation_time" pattern="${timestamp_format}" />
659                </tstamp>
660                <!-- create a directory for the generated files -->
661                <mkdir dir="${java_output_intermediate}" />
662                <!-- run jastadd to generate AST files -->
663                <java classname="org.jastadd.JastAdd" classpath="${jastadd_dir}/jastadd2.jar" failonerror="true">
664                    <arg value="--package=${ast_package}" />
665                    <arg value="--o=${java_output_intermediate}" />
666                    <arg value="--beaver" />
667                    <arg value="--rewrite" />
668                    <arg value="--cacheCycle" />
669                    <arg value="--visitCheck=false" />
670                    <arg value="--lazyMaps" />
671                    <arg value="--emptyContainerSingletons" />
672                    <arg value="--indent=4space" />
673                    <arg value="--inhEqCheck=false" />
674                    <arg line="${jastadd_files}" />
675                </java>
676                <!-- delete stale java files created in earlier runs -->
677                <delete verbose="true">
678                    <fileset dir="${ast_output}">
679                        <date datetime="${ast_creation_time}" when="before" pattern="${timestamp_format}" />
680                    </fileset>
681                </delete>
682            </then>
683        </if>
684    </target>
685
686    <!-- adds changes that need to be patched into the generated files -->
687    <target name="patch" depends="ast,compile-patcher">
688        <for list="${modules}" param="module">
689            <sequential>
690                <if>
691                    <isset property="@{module}.patch"/>
692                    <then>
693                        <propertyregex property="@{module}.patch.path" input="${@{module}.patch}" defaultValue="${@{module}.patch}" regexp="\." replace="/" global="true" />
694                        <uptodate property="@{module}.patch.uptodate" targetfile="${ast_output}/ASTNode.java" 
695                                srcfile="${@{module}.java_path}/${@{module}.patch.path}.java" />
696                        <if>
697                            <not><and>
698                                <isset property="ast_uptodate" />
699                                <isset property="@{module}.patch.uptodate" />
700                            </and></not>
701                            <then>
702                                <java classpath="${class_output}:${beaver-rt_jar}" 
703                                        classname="${@{module}.patch}" failonerror="true">
704                                    <arg line="${ast_output}" />
705                                </java>
706                            </then>
707                        </if>
708                    </then>
709                </if>
710            </sequential>
711        </for>
712    </target>
713
714    <macrodef name="gen-extra-macro">
715        <attribute name="generate"  default="NOT SET"/>
716        <attribute name="gen-extra" default="NOT SET"/>
717        <attribute name="generated" default="NOT SET"/>
718        <sequential>
719            <for list="${modules}" param="module">
720                <sequential>
721                    <if>
722                        <isset property="@{module}.@{generate}"/>
723                        <then>
724                            <!-- TODO: only generate when needed
725                            <uptodate property="@{module}.@{gen-extra}.uptodate" targetfile="${@{module}.@{gen-extra}.gen_path}">
726                                <srcresources>
727                                    <fileset file="${@{module}.@{gen-extra}.java_file_path}" />
728                                </srcresources>
729                            </uptodate>
730                            -->
731                            <mkdir dir="${@{module}.@{gen-extra}.gen_path}" />
732                            <java classpath="${build_class_output}:${beaver-rt_jar}" 
733                                    classname="${@{module}.@{generate}}" failonerror="true">
734                                <arg value="${@{module}.@{gen-extra}.gen_path}" />
735                                <arg value="${@{module}.package.@{generated}}" />
736                                <arg value="${@{module}.path}" />
737                                <arg value="${module_dirs}" />
738                            </java>
739                        </then>
740                    </if>
741                </sequential>
742            </for>
743        </sequential>
744    </macrodef>
745
746    <!--
747        Generates any additional java files specified in modules.
748        Performed after ast target since we might generate files into
749        the same directory where the ast target remove. Should not have
750        any other dependencies on the ast target.
751    -->
752    <target name="gen-extra" depends="patch-java,compile-gen-extra">
753        <gen-extra-macro generate="generate"     gen-extra="gen-extra"     generated="generated"/>
754    </target>
755
756    <!-- adds changes that need to be patched into the static java files -->
757    <target name="patch-java" depends="ast">
758        <!-- currently this uses a simple search-replace, but could be expanded to use the same patch tool as above -->
759        <for list="${modules}" param="module"> <sequential>
760            <if>
761                <istrue value="${@{module}.need_patch_java}" />
762                <then>
763                    <echo message="Doing patch-java for @{module}" />
764                    <uptodate property="@{module}.patch-java.uptodate">
765                        <srcfiles dir= "${@{module}.java_path}" includes="**/*.java"/>
766                        <srcfiles dir= "${@{module}.junit_path}" includes="**/*.java"/>
767                        <globmapper from="*" to="${java_output_intermediate}/*" />
768                    </uptodate>
769                    <if>
770                        <not><isset property="${@{module}.patch-java.uptodate}" /></not>
771                        <then>
772                            <mkdir dir="${java_temp}" />
773                            <if>
774                                <isfalse value="${@{module}.disable_java_copy}" />
775                                <then>
776                                    <copy todir="${java_temp}">
777                                        <fileset dir="${@{module}.java_path}" includes="**/*.java" />
778                                    </copy>
779                                </then>
780                            </if>
781                            <!-- Perform any java_replace -->
782                            <if>
783                                <istrue value="${@{module}.has_java_replace}" />
784                                <then>
785                                    <for list="${@{module}.java_replace}" param="replace"> <sequential>
786                                        <if>
787                                            <isfalse value="${@{module}.java_replace.@{replace}.skip}"/>
788                                            <then>
789                                                <replace dir="${java_temp}" includes="**/*.java" 
790                                                    token="${@{module}.java_replace.@{replace}.from}" value="${@{module}.java_replace.@{replace}.to}" />
791                                                <replace dir="${ast_output}" includes="**/*.java" 
792                                                    token="${@{module}.java_replace.@{replace}.from}" value="${@{module}.java_replace.@{replace}.to}" />
793                                            </then>
794                                        </if>
795                                    </sequential> </for>
796                                </then>
797                            </if>
798                            <!-- Perform replace of accesses for any java_rename_package -->
799                            <if>
800                                <istrue value="${@{module}.has_java_rename_package}" />
801                                <then>
802                                    <for list="${@{module}.java_rename_package}" param="rename"> <sequential>
803                                        <if>
804                                            <isfalse value="${@{module}.java_rename.@{rename}.skip}"/>
805                                            <then>
806                                                <!-- Rename package -->
807                                                <if>
808                                                    <not><available file="${@{module}.junit_path}/${@{module}.java_rename_dir.@{rename}.from}" /></not>
809                                                    <then>
810                                                        <move file="${java_temp}/${@{module}.java_rename_dir.@{rename}.from}" tofile="${java_temp}/${@{module}.java_rename_dir.@{rename}.to}" />
811                                                        <replace dir="${java_temp}/${@{module}.java_rename_dir.@{rename}.to}" includes="**/*.java" 
812                                                            token="package ${@{module}.java_rename_package.@{rename}.from};" value="package ${@{module}.java_rename_package.@{rename}.to};" />
813                                                        <replace dir="${java_temp}" includes="**/*.java" 
814                                                            token="${@{module}.java_rename_package.@{rename}.from}." value="${@{module}.java_rename_package.@{rename}.to}." />
815                                                    </then>
816                                                </if>
817                                             </then>
818                                        </if>
819                                    </sequential> </for>
820                                </then>
821                            </if>
822                             <copy todir="${java_output_intermediate}">
823                                <fileset dir="${java_temp}" includes="**/*.java" />
824                            </copy>
825                            <delete dir="${java_temp}"/>
826                            <!-- Perform remainder of any java_rename_package -->
827                            <if>
828                                <istrue value="${@{module}.has_java_rename_package}" />
829                                <then>
830                                    <for list="${@{module}.java_rename_package}" param="rename"> <sequential>
831                                        <if>
832                                            <isfalse value="${@{module}.java_rename.@{rename}.skip}"/>
833                                            <then>
834                                                <!-- Update any accesses in generated files -->
835                                                <replace dir="${ast_output}" includes="**/*.java" 
836                                                     token="${@{module}.java_rename_package.@{rename}.from}." value="${@{module}.java_rename_package.@{rename}.to}." />
837                                            </then>
838                                        </if>
839                                    </sequential> </for>
840                                </then>
841                            </if>
842                        </then>
843                    </if>
844                </then>
845            </if>
846        </sequential> </for>
847    </target>
848   
849    <!-- generate all parsers -->
850    <target name="parser-build">
851        <for list="${modules}" param="module">
852            <sequential>
853                <if>
854                    <isset property="@{module}.parsers"/>
855                    <then>
856                        <for list="${@{module}.parsers}" param="parser">
857                            <sequential>
858                                <!-- find paths of files to use -->
859                                <if>
860                                    <isset property="@{module}.@{parser}.extend" />
861                                    <then>
862                                        <propertyregex property="parser_extend_module" input="${@{module}.@{parser}.extend}" regexp="\..*$$" replace="" override="true" />
863                                        <propertycopy name="parser_extend_path" from="${parser_extend_module}.path" override="true" />
864                                        <propertycopy name="parser_extend_main" from="${@{module}.@{parser}.extend}.main" override="true" />
865                                        <propertycopy name="parser_extend_header" from="${@{module}.@{parser}.extend}.header" override="true" />
866                                        <var name="parser_main_path" value="${parser_extend_path}/src/parser/${parser_extend_main}" />
867                                        <var name="parser_header_path" value="${parser_extend_path}/src/parser/${parser_extend_header}" />
868                                        <var name="parser_tail_path" value="${@{module}.path}/src/parser/${@{module}.@{parser}.tail}" />
869                                    </then>
870                                    <else>
871                                        <var name="parser_main_path" value="${@{module}.path}/src/parser/${@{module}.@{parser}.main}" />
872                                        <var name="parser_header_path" value="${@{module}.path}/src/parser/${@{module}.@{parser}.header}" />
873                                        <var name="parser_tail_path" value="${parser_header_path}" /> <!-- dummy var to simplify up-to-date check -->
874                                    </else>
875                                </if>
876                                <!-- check if files are up to date -->
877                                <uptodate property="@{module}.@{parser}.uptodate" targetfile="${parsers.builddir}/@{parser}.java">
878                                    <srcresources>
879                                        <fileset file="${parser_main_path}" />
880                                        <fileset file="${parser_header_path}" />
881                                        <fileset file="${parser_tail_path}" />
882                                    </srcresources>
883                                </uptodate>
884                                <if>
885                                    <not><isset property="@{module}.@{parser}.uptodate" /></not>
886                                    <then>
887                                        <!-- copy/concat main part to target dir -->
888                                        <if>
889                                            <isset property="@{module}.@{parser}.extend" />
890                                            <then>
891                                                <concat destfile="${parsers.builddir}/@{parser}.parser">
892                                                    <fileset file="${parser_main_path}" />
893                                                    <fileset file="${parser_tail_path}" />
894                                                </concat>
895                                            </then>
896                                            <else>
897                                                <copy file="${parser_main_path}" tofile="${parsers.builddir}/@{parser}.parser" overwrite="true" />
898                                            </else>
899                                        </if>
900                                        <!-- write package names into parser specification -->
901                                        <replace file="${parsers.builddir}/@{parser}.parser">
902                                            <replacefilter token="$PARSER_PACKAGE$" value="${parser_package}" />
903                                            <replacefilter token="$AST_PACKAGE$" value="${ast_package}" />
904                                        </replace>
905                                        <!-- translate to beaver syntax -->
906                                        <java classpath="${jastadd_dir}/JastAddParser.jar:${beaver-rt_jar}" classname="Main">
907                                            <arg value="${parsers.builddir}/@{parser}.parser"/>
908                                            <arg value="${parsers.builddir}/@{parser}.raw.beaver"/>
909                                        </java>
910                                        <!-- add extra beaver code and generate parser -->
911                                        <concat destfile="${parsers.builddir}/@{parser}.beaver">
912                                            <fileset file="${parser_header_path}" />
913                                            <fileset file="${parsers.builddir}/@{parser}.raw.beaver" />
914                                        </concat>
915                                        <beaver file="${parsers.builddir}/@{parser}.beaver" terminalNames="yes" compress="no" useSwitch="yes" />
916                                    </then>
917                                </if>
918                            </sequential>
919                        </for>
920                    </then>
921                </if>
922            </sequential>
923        </for>
924    </target>
925
926    <target name="parser" depends="parser-build">
927        <for list="${modules}" param="module">
928            <sequential>
929                <if>
930                    <isset property="@{module}.parsers"/>
931                    <then>
932                        <for list="${@{module}.parsers}" param="parser">
933                            <sequential>
934                                <copy file="${parsers.builddir}/@{parser}.java" tofile="${parsers.output}/@{parser}.java" overwrite="true" />
935                            </sequential>
936                        </for>
937                    </then>
938                </if>
939            </sequential>
940        </for>
941    </target>
942
943    <!-- generate all scanners -->
944    <target name="scanner-build">
945        <mkdir dir="${java_output_intermediate}" />
946        <mkdir dir="${java_output_intermediate_common}" />
947        <for list="${modules}" param="module">
948            <sequential>
949                <if>
950                    <isset property="@{module}.scanners"/>
951                    <then>
952                        <for list="${@{module}.scanners}" param="scanner">
953                            <sequential>
954                                <uptodate property="@{module}.@{scanner}.uptodate" 
955                                        srcfile="${@{module}.path}/src/parser/${@{module}.@{scanner}}" 
956                                        targetfile="${scanners.builddir}/@{scanner}.java" />
957                                <if>
958                                    <not><isset property="@{module}.@{scanner}.package" /></not>
959                                    <then>
960                                        <var name="@{module}.@{scanner}.package" value="${parser_package}" />
961                                    </then>
962                                </if>
963                                <propertyregex property="scanners.package_dir" input="${@{module}.@{scanner}.package}" defaultValue="${@{module}.@{scanner}.package}" regexp="\." replace="/" global="true" override="true" />
964                                <if>
965                                        <matches pattern=".*${sub_package}.*" string="${scanners.package_dir}"/>
966                                        <then>
967                                                <var name="@{module}.@{scanner}.output" value="${java_output_intermediate}/${scanners.package_dir}" />
968                                                </then>
969                                        <else>
970                                                <var name="@{module}.@{scanner}.output" value="${java_output_intermediate_common}/${scanners.package_dir}" />
971                                        </else>
972                                       
973                                </if>
974                                <var name="scanners.file" value="${scanners.builddir}/@{scanner}.flex" />
975                                <if>
976                                    <not><isset property="@{module}.@{scanner}.uptodate" /></not>
977                                    <then>
978                                        <copy file="${@{module}.path}/src/parser/${@{module}.@{scanner}}" tofile="${scanners.file}" overwrite="true" />
979                                        <replace file="${scanners.file}">
980                                            <replacefilter token="$PARSER_PACKAGE$" value="${@{module}.@{scanner}.package}" />
981                                            <replacefilter token="$AST_PACKAGE$" value="${ast_package}" />
982                                        </replace>
983                                        <jflex file="${scanners.file}" nobak="yes" />
984                                    </then>
985                                </if>
986                            </sequential>
987                        </for>
988                    </then>
989                </if>
990            </sequential>
991        </for>
992    </target>
993
994    <target name="scanner" depends="scanner-build">
995        <for list="${modules}" param="module">
996            <sequential>
997                <if>
998                    <isset property="@{module}.scanners"/>
999                    <then>
1000                        <for list="${@{module}.scanners}" param="scanner">
1001                            <sequential>
1002                                <copy file="${scanners.builddir}/@{scanner}.java" tofile="${@{module}.@{scanner}.output}/@{scanner}.java" overwrite="true" />
1003                            </sequential>
1004                        </for>
1005                    </then>
1006                </if>
1007            </sequential>
1008        </for>
1009    </target>
1010
1011    <!-- Generate JUnit test class. -->
1012    <target name="gen-test" description="Generate JUnit test class.">
1013        <!-- This property allows us to insert extra code into the test class -->
1014        <property name="test_class_extra_defs" value="" />
1015        <mkdir dir="${test_package_output}" />
1016        <echo file="${test_file}">package ${test_package};
1017
1018import org.junit.runner.RunWith;
1019
1020@RunWith(org.jmodelica.junit.TreeJModelicaRunner.class)
1021public class ${test_class_name} extends ${ast_package}.TestSpecification {
1022
1023${test_class_extra_defs}
1024
1025    public ${test_class_name}() {
1026        super(${module_dirs});
1027    }
1028
1029    protected ${jm_package}.util.test.Assert createAssert() {
1030        return new ${jm_package}.junit.JUnitAssert();
1031    }
1032
1033}
1034</echo>
1035    </target>
1036
1037    <!-- Generate JUnit test class. -->
1038    <target name="patch-test" depends="gen-test">
1039        <mkdir dir="${junit_output}" />
1040        <for list="${modules}" param="module"> <sequential>
1041            <if>
1042                <and>
1043                    <istrue value="${@{module}.need_patch_java}" />
1044                    <isset property="@{module}.junit_path" />
1045                </and>
1046                <then>
1047                    <copy todir="${junit_output}">
1048                        <fileset dir="${@{module}.junit_path}" includes="**/*.java" />
1049                    </copy>
1050                </then>
1051            </if>
1052        </sequential> </for>
1053        <for list="${modules}" param="module"> <sequential>
1054            <!-- Perform any java_replace -->
1055            <if>
1056                <istrue value="${@{module}.has_java_replace}" />
1057                <then>
1058                    <for list="${@{module}.java_replace}" param="replace"> <sequential>
1059                        <if>
1060                            <isfalse value="${@{module}.java_replace.@{replace}.skip}"/>
1061                            <then>
1062                                <replace dir="${junit_output}" includes="**/*.java" 
1063                                    token="${@{module}.java_replace.@{replace}.from}" value="${@{module}.java_replace.@{replace}.to}" />
1064                            </then>
1065                        </if>
1066                    </sequential> </for>
1067                </then>
1068            </if>
1069            <!-- Rename any junit packages in java_rename_package -->
1070            <if>
1071                <istrue value="${@{module}.has_java_rename_package}" />
1072                <then>
1073                    <for list="${@{module}.java_rename_package}" param="rename"> <sequential>
1074                        <if>
1075                            <isfalse value="${@{module}.java_rename.@{rename}.skip}"/>
1076                            <then>
1077                                <!-- Rename package -->
1078                                <if>
1079                                    <available file="${@{module}.junit_path}/${@{module}.java_rename_dir.@{rename}.from}" />
1080                                    <then>
1081                                        <move file="${junit_output}/${@{module}.java_rename_dir.@{rename}.from}" tofile="${junit_output}/${@{module}.java_rename_dir.@{rename}.to}" />
1082                                        <replace dir="${junit_output}/${@{module}.java_rename_dir.@{rename}.to}" includes="**/*.java" 
1083                                            token="package ${@{module}.java_rename_package.@{rename}.from};" value="package ${@{module}.java_rename_package.@{rename}.to};" />
1084                                    </then>
1085                                </if>
1086                             </then>
1087                        </if>
1088                    </sequential> </for>
1089                </then>
1090            </if>
1091            <!-- Perform replace of accesses for any java_rename_package -->
1092            <if>
1093                <istrue value="${@{module}.has_java_rename_package}" />
1094                <then>
1095                    <for list="${@{module}.java_rename_package}" param="rename"> <sequential>
1096                        <if>
1097                            <isfalse value="${@{module}.java_rename_package.@{rename}.skip}"/>
1098                            <then>
1099                                <replace dir="${junit_output}" includes="**/*.java" 
1100                                    token="${@{module}.java_rename_package.@{rename}.from}." value="${@{module}.java_rename_package.@{rename}.to}." />
1101                            </then>
1102                        </if>
1103                    </sequential> </for>
1104                </then>
1105            </if>
1106        </sequential> </for>
1107    </target>
1108   
1109    <!-- Build a jar file from generated tests. -->
1110    <target name="build-test" depends="build">
1111        <mkdir dir="${test_class_output}" />
1112        <javac compiler="${java_compiler}" source="${java_version}" target="${java_version}" fork="true" encoding="UTF8" debug="false" 
1113                destdir="${test_class_output}" classpath="${compiler_jars}:${junit_jar}" includeantruntime="false"
1114                srcdir="${junit_output}:${test_helper_dirs}:${junit_dirs}"/>
1115    </target>
1116
1117    <!-- Run all generated JUnit tests. -->
1118    <target name="test" depends="build-test" description="Run all generated JUnit tests.">
1119        <mkdir dir="${test_output}" />
1120        <junit printsummary="yes" fork="true" maxmemory="1G">
1121            <classpath path="${test_jars}:${test_class_output}:${junit_dirs}:${test_resource_dirs}:${resource_dirs}" />
1122            <formatter type="xml" />
1123            <batchtest fork="yes" todir="${test_output}" skipNonTests="true">
1124                <fileset dir="${test_class_output}" excludes="${test_helper_class_patterns}" />
1125            </batchtest>
1126        </junit>
1127        <junitreport todir="${test_output}">
1128            <fileset dir="${test_output}" includes="TEST-*.xml" />
1129            <report todir="${test_output}" />
1130        </junitreport>
1131    </target>
1132
1133    <!-- cleans all files -->
1134    <target name="clean" depends="clean-gen,clean-bin" description="Deletes all generated files."/>
1135
1136    <!-- cleans all binary files -->
1137    <target name="clean-bin" description="Deletes all binary files.">
1138        <delete dir="${class_output}" />
1139        <delete dir="${build_class_output}" />
1140        <delete dir="${test_class_output}" />
1141        <delete dir="${jar_output}" />
1142    </target>
1143
1144    <!-- cleans all generated java files -->
1145    <target name="clean-gen" depends="clean-ast,clean-test,clean-extra" description="Deletes all generated Java files." >
1146        <delete dir="${compiler_build}" />
1147    </target>
1148
1149    <!-- cleans all generated java files in the compiler -->
1150    <target name="clean-ast">
1151        <delete dir="${java_output_intermediate}" />
1152        <delete dir="${java_output_intermediate_common}" />
1153        <delete><fileset dir="${java_output_final}"/></delete>
1154        <delete><fileset dir="${java_output_final_common}"/></delete>
1155    </target>
1156
1157    <!-- cleans all extra generated java files -->
1158    <target name="clean-extra">
1159        <for list="${modules}" param="module">
1160            <sequential>
1161                <if>
1162                    <isset property="@{module}.generate"/>
1163                    <then>
1164                        <delete dir="${@{module}.gen-extra.gen_path}" />
1165                    </then>
1166                </if>
1167            </sequential>
1168        </for>
1169    </target>
1170
1171    <!-- cleans all generated junit files -->
1172    <target name="clean-test" depends="clean-test-report">
1173        <delete><fileset dir="${junit_output}"/></delete>
1174    </target>
1175
1176    <!-- cleans all generated test report -->
1177    <target name="clean-test-report">
1178        <delete dir="${test_output}" />
1179    </target>
1180
1181</project>
Note: See TracBrowser for help on using the repository browser.