source: trunk/Compiler/build-base.xml @ 12981

Last change on this file since 12981 was 12981, checked in by Jonathan Kämpe, 6 months ago

#5763 Recommiting r12949,r12950

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}/JModelica/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    <!-- "jastadd" is an ant task class in jastadd2.jar -->
79    <taskdef classname="org.jastadd.JastAddTask" name="jastadd" classpath="${jastadd_dir}/jastadd2.jar" />
80    <!-- "jflex" is an ant task class for the scanner generator in JFlex.jar -->
81    <taskdef name="jflex" classname="JFlex.anttask.JFlexTask" classpath="${jflex_dir}/lib/JFlex.jar" />
82    <!-- "beaver" is an ant task class for the parser generator in beaver.jar -->
83    <taskdef name="beaver" classname="beaver.comp.run.AntTask" classpath="${beaver_jar}" />
84   
85    <!-- calculate directories for java files -->
86    <property name="jm_package" value="org.jmodelica" />
87    <if>
88        <isset property="base_package"/>
89        <else> <property name="base_package" value="${jm_package}.${sub_package}" /> </else>
90    </if>
91    <if>
92        <isset property="ast_package"/>
93        <else> <property name="ast_package" value="${base_package}.compiler" /> </else>
94    </if>
95    <property name="test_class_output" value="${target}/bin-test/${ast_package}" />
96    <if>
97        <isset property="parser_package"/>
98        <else> <property name="parser_package" value="${base_package}.parser" /> </else>
99    </if>
100    <if>
101        <isset property="test_package"/>
102        <else> <property name="test_package" value="org.jmodelica.test.${sub_package}.junitgenerated" /> </else>
103    </if>
104    <propertyregex property="ast_package_dir" input="${ast_package}" defaultValue="${ast_package}" regexp="\." replace="/" global="true" />
105    <property name="ast_output" value="${java_output_intermediate}/${ast_package_dir}" />
106    <propertyregex property="parser_package_dir" input="${parser_package}" defaultValue="${parser_package}" regexp="\." replace="/" global="true" />
107    <property name="parsers.output" value="${java_output_intermediate}/${parser_package_dir}" />
108    <property name="parsers.builddir" value="${compiler_build}/${sub_package}/parsers" />
109    <property name="scanners.output" value="${java_output_intermediate}" />
110    <property name="scanners.builddir" value="${compiler_build}/${sub_package}/scanners" />
111    <propertyregex property="test_package_dir" input="${test_package}" defaultValue="${test_package}" regexp="\." replace="/" global="true" />
112    <property name="test_package_output" value="${junit_output}/${test_package_dir}" />
113    <property name="test_class_name" value="Tests" />
114    <property name="test_file" value="${test_package_output}/${test_class_name}.java" />
115    <property name="test_file_module_separator" value=", ${line.separator}              " />
116
117    <!-- If javadoc.packages is set, make sure javadoc.path is as well -->
118    <if>
119        <and>
120            <isset property="javadoc.packages"/>
121            <not><isset property="javadoc.path"/></not>
122        </and>
123        <then>
124            <property name="javadoc.path" value="doc/javadoc"/>
125        </then>
126    </if>
127    <property name="javadoc_output" value="${target}/${javadoc.path}" />
128
129    <!-- inject any extra packages into set -->
130
131    <!-- calculate module list -->
132    <var name="modules_temp" value=""/>
133    <for list="${sets}" param="set">
134        <sequential>
135            <if>
136                <isset property="@{set}.found" />
137                <else>
138                    <property name="@{set}.found" value="1"/>
139                    <for list="${@{set}.modules}" param="module">
140                        <sequential>
141                            <property name="@{module}.path" value="${@{set}.base}/@{module}"/>
142                        </sequential>
143                    </for>
144                    <var name="modules_temp" value="${modules_temp},${@{set}.modules}"/>
145                </else>
146            </if>
147        </sequential>
148    </for>
149    <!-- add any extra modules specified on command line -->
150    <for list="${extra_modules}" param="extra">
151        <sequential>
152            <propertyregex property="extra_mod" input="@{extra}" regexp="^[^:]+:" replace="" global="true" />
153            <propertyregex property="extra_set" input="@{extra}" regexp=":[^:]+$" replace="" global="true" />
154            <for list="${extra_set}" param="set">
155                <sequential>
156                    <if>
157                        <isset property="@{set}.found" />
158                        <then>
159                            <property name="${extra_mod}.path" value="${@{set}.base}/${extra_mod}"/>
160                            <var name="modules_temp" value="${modules_temp},${extra_mod}"/>
161                        </then>
162                    </if>
163                </sequential>
164            </for>
165        </sequential>
166    </for>
167    <propertyregex property="modules" input="${modules_temp}" regexp="(^)[,]*|[,]+($|,)" replace="\1" global="true" />
168   
169    <!-- import module build files -->
170    <for list="${modules}" param="module">
171        <sequential>
172            <if>
173                <available file="${@{module}.path}/build-module.xml" />
174                <then>
175                    <include file="${@{module}.path}/build-module.xml"/>
176                </then>
177            </if>
178        </sequential>
179    </for>
180
181    <!-- build list of module directories to use in temp file -->
182    <var name="module_dirs_temp" value=""/>
183    <for list="${modules}" param="module">
184        <sequential>
185            <var name="module_dirs_temp" value="${module_dirs_temp}${test_file_module_separator}&quot;${@{module}.path}&quot;" />
186        </sequential>
187    </for>
188    <propertyregex property="module_dirs_temp2" input="${module_dirs_temp}" regexp="^${test_file_module_separator}" replace="" />
189    <propertyregex property="module_dirs" input="${module_dirs_temp2}" regexp="\\" replace="/" defaultValue="${module_dirs_temp2}" />
190
191    <!-- calculate set of jastadd files to use -->
192    <var name="jastadd_files_temp" value=""/>
193    <var name="jastadd_file_list_temp" value=""/>
194    <for list="${modules}" param="module">
195        <sequential>
196            <if>
197                <and>
198                    <available file="${@{module}.path}/src/jastadd" type="dir" />
199                </and>
200                <then>
201                    <fileset dir="${@{module}.path}" id="jastadd_files_temp_set">
202                        <include name="src/jastadd/**/*.ast" />
203                        <include name="src/jastadd/**/*.jadd" />
204                        <include name="src/jastadd/**/*.jrag" />
205                    </fileset>
206                    <for list="${toString:jastadd_files_temp_set}" delimiter=";:" param="file">
207                        <sequential>
208                            <var name="jastadd_files_temp" value="${jastadd_files_temp} &quot;${@{module}.path}/@{file}&quot;" />
209                            <var name="jastadd_file_list_temp" value="${jastadd_file_list_temp},${@{module}.path}/@{file}" />
210                        </sequential>
211                    </for>
212                </then>
213            </if>
214        </sequential>
215    </for>
216    <property name="jastadd_files" value="${jastadd_files_temp}" />
217    <propertyregex property="jastadd_file_list" input="${jastadd_file_list_temp}" regexp="^," replace="" />
218   
219    <!-- calculate set of java source file dirs to use -->
220    <var name="java_dirs_temp" value=""/>
221    <for list="${modules}" param="module">
222        <sequential>
223            <condition property="@{module}.disable_java_copy" else="false">
224                <isset property="@{module}.disable_java_copy" />
225            </condition>
226            <var name="has_java_replace_temp" value="false"/>
227            <var name="has_java_rename_package_temp" value="false"/>
228            <if>
229                <isset property="@{module}.java_replace" />
230                <then>
231                    <for list="${@{module}.java_replace}" param="replace">
232                        <sequential>
233                            <if>
234                                <and>
235                                    <isset property="@{module}.java_replace.@{replace}.from" />
236                                    <isset property="@{module}.java_replace.@{replace}.to" />
237                                    <not><equals arg1="${@{module}.java_replace.@{replace}.from}" arg2="${@{module}.java_replace.@{replace}.to}" /></not>
238                                </and>
239                                <then>
240                                    <var name="has_java_replace_temp" value="true"/>
241                                </then>
242                                <else>
243                                    <property name="@{module}.java_replace.@{replace}.skip" value="true" />
244                                </else>
245                            </if>
246                        </sequential>
247                    </for>
248                </then>
249            </if>
250            <if>
251                <isset property="@{module}.java_rename_package" />
252                <then>
253                    <for list="${@{module}.java_rename_package}" param="rename">
254                        <sequential>
255                            <if>
256                                <and>
257                                    <isset property="@{module}.java_rename_package.@{rename}.from" />
258                                    <isset property="@{module}.java_rename_package.@{rename}.to" />
259                                    <not><equals arg1="${@{module}.java_rename_package.@{rename}.from}" arg2="${@{module}.java_rename_package.@{rename}.to}" /></not>
260                                </and>
261                                <then>
262                                    <var name="has_java_rename_package_temp" value="true"/>
263                                    <propertyregex property="@{module}.java_rename_dir.@{rename}.from" input="${@{module}.java_rename_package.@{rename}.from}" 
264                                        regexp="\." replace="/" defaultValue="${@{module}.java_rename_package.@{rename}.from}" override="true" global="true" />
265                                    <propertyregex property="@{module}.java_rename_dir.@{rename}.to" input="${@{module}.java_rename_package.@{rename}.to}" 
266                                        regexp="\." replace="/" defaultValue="${@{module}.java_rename_package.@{rename}.to}" override="true" global="true" />
267                                </then>
268                                <else>
269                                    <property name="@{module}.java_rename_package.@{rename}.skip" value="true" />
270                                </else>
271                            </if>
272                        </sequential>
273                    </for>
274                </then>
275            </if>
276            <property name="@{module}.has_java_replace" value="${has_java_replace_temp}" />
277            <property name="@{module}.has_java_rename_package" value="${has_java_rename_package_temp}" />
278            <condition property="@{module}.need_patch_java" else="false">
279                <or>
280                    <istrue value="${@{module}.has_java_replace}" />
281                    <istrue value="${@{module}.has_java_rename_package}" />
282                </or>
283            </condition>
284            <property name="@{module}.java_path" value="${@{module}.path}/src/java"/>
285            <if>
286                <and>
287                    <available file="${@{module}.java_path}" />
288                    <not>
289                        <and>
290                            <istrue value="${@{module}.need_patch_java}" />
291                            <isfalse value="${@{module}.disable_java_copy}" />
292                        </and>
293                    </not>
294                </and>
295                <then>
296                    <var name="java_dirs_temp" value="${java_dirs_temp}:${@{module}.java_path}" />
297                </then>
298            </if>
299            <if>
300                <isset property="@{module}.pre_generated" />
301                <then>
302                    <for list="${@{module}.pre_generated}" param="pregenerated">
303                        <sequential>
304                            <propertyregex property="java_dir_pre_temp" input="@{pregenerated}" regexp="\." replace="/" 
305                                    defaultValue="@{pregenerated}" override="true" global="true" />
306                            <var name="java_dirs_temp" value="${java_dirs_temp}:${java_output_final}/${java_dir_pre_temp}" />
307                        </sequential>
308                    </for>
309                </then>
310            </if>
311        </sequential>
312    </for>
313    <propertyregex property="java_dirs" input="${java_dirs_temp}" regexp="^:" replace="" defaultvalue="" />
314
315    <macrodef name="extra-calc-macro">
316        <attribute name="generate"  default="NOT SET"/>
317        <attribute name="gen-extra" default="NOT SET"/>
318        <attribute name="generated" default="NOT SET"/>
319        <sequential>
320            <for list="${modules}" param="module">
321                <sequential>
322                    <if>
323                        <isset property="@{module}.@{generate}"/>
324                        <then>
325                            <propertyregex property="@{module}.@{gen-extra}.javafile" 
326                                input="${@{module}.@{generate}}" defaultValue="${@{module}.@{generate}}" 
327                                regexp="\." replace="/" override="true" global="true" />
328                            <property name="@{module}.@{gen-extra}.java_file_path" value="${@{module}.java_path}/${@{module}.@{gen-extra}.javafile}.java"/>
329                            <propertyregex property="@{module}.@{gen-extra}.gen_path.tmp" 
330                                input="${@{module}.package.@{generated}}" defaultValue="${@{module}.package.@{generated}}" 
331                                regexp="\." replace="/" global="true" />
332                            <if>
333                                <matches pattern=".*${sub_package}.*" string="${@{module}.package.@{generated}}"/>
334                                <then>
335                                    <property name="@{module}.@{gen-extra}.gen_path" value="${java_output_intermediate}/${@{module}.@{gen-extra}.gen_path.tmp}"/>
336                                </then>
337                                <else>
338                                    <property name="@{module}.@{gen-extra}.gen_path" value="${java_output_intermediate_common}/${@{module}.@{gen-extra}.gen_path.tmp}"/>
339                                </else>
340                            </if>
341                        </then>
342                    </if>
343                </sequential>
344            </for>
345        </sequential>
346    </macrodef>
347
348    <!-- calculate extra java file generators -->
349    <extra-calc-macro generate="generate"     gen-extra="gen-extra"     generated="generated"/>
350
351    <!-- calculate set of junit source file dirs to use -->
352    <var name="junit_dirs_temp" value=""/>
353    <for list="${modules}" param="module">
354        <sequential>
355            <if>
356                <available file="${@{module}.path}/test/junit" />
357                <then>
358                    <property name="@{module}.junit_path" value="${@{module}.path}/test/junit" />
359                    <if>
360                        <isfalse value="${@{module}.need_patch_java}" />
361                        <then>
362                            <var name="junit_dirs_temp" value="${junit_dirs_temp}:${@{module}.junit_path}" />
363                        </then>
364                    </if>
365                </then>
366            </if>
367        </sequential>
368    </for>
369    <propertyregex property="junit_dirs" input="${junit_dirs_temp}" regexp="^:" replace="" defaultvalue="" />
370   
371    <!-- calculate set of resource dirs to use -->
372    <var name="test_resource_dirs_temp" value=""/>
373    <var name="resource_dirs_temp" value=""/>
374    <for list="${modules}" param="module">
375        <sequential>
376            <if>
377                <available file="${@{module}.path}/test/resources" />
378                <then>
379                    <var name="test_resource_dirs_temp" value="${test_resource_dirs_temp}:${@{module}.path}/test/resources" />
380                </then>
381            </if>
382            <if>
383                <available file="${@{module}.path}/src/resources" />
384                <then>
385                    <var name="resource_dirs_temp" value="${resource_dirs_temp}:${@{module}.path}/src/resources" />
386                </then>
387            </if>
388        </sequential>
389    </for>
390    <propertyregex property="test_resource_dirs" input="${test_resource_dirs_temp}" regexp="^:" replace="" defaultvalue="" />
391    <propertyregex property="resource_dirs" input="${resource_dirs_temp}" regexp="^:" replace="" defaultvalue="" />
392   
393    <!-- calculate set of test helpers to use -->
394    <var name="test_helper_java_patterns_temp" value=""/>
395    <var name="test_helper_class_patterns_temp" value=""/>
396    <var name="test_helper_packages_temp" value=""/>
397    <var name="test_helper_dirs_temp" value=""/>
398    <for list="${modules}" param="module">
399        <sequential>
400            <if>
401                <isset property="@{module}.test_helpers"/>
402                <then>
403                    <propertyregex property="test_helper_dir_temp" input="${@{module}.test_helpers}" regexp="\." replace="/" 
404                            defaultValue="${@{module}.test_helpers}" override="true" global="true" />
405                    <var name="test_helper_java_patterns_temp" value="${test_helper_java_patterns_temp},${test_helper_dir_temp}/*.java"/>
406                    <var name="test_helper_class_patterns_temp" value="${test_helper_class_patterns_temp},${test_helper_dir_temp}/*.class"/>
407                    <var name="test_helper_packages_temp" value="${test_helper_packages_temp},${@{module}.test_helpers}"/>
408                    <var name="test_helper_dirs_temp" value="${test_helper_dirs_temp}:${@{module}.java_path}/${test_helper_dir_temp}"/>
409                </then>
410            </if>
411        </sequential>
412    </for>
413    <propertyregex property="test_helper_java_patterns" input="${test_helper_java_patterns_temp}" regexp="^," replace="" defaultvalue="" />
414    <propertyregex property="test_helper_class_patterns" input="${test_helper_class_patterns_temp}" regexp="^," replace="" defaultvalue="" />
415    <propertyregex property="test_helper_packages" input="${test_helper_packages_temp}" regexp="^," replace="" defaultvalue="" />
416    <propertyregex property="test_helper_dirs" input="${test_helper_dirs_temp}" regexp="^:" replace="" defaultvalue="" />
417   
418    <!-- calculate sets of jar files, and set of java files to compile for them -->
419    <var name="compiler_jars_temp" value="${beaver-rt_jar}" />
420    <var name="compile_java_patterns_temp" value="" />
421    <for list="${jars}" param="jar">
422        <sequential>
423            <var name="compiler_jars_temp" value="${compiler_jars_temp}:${jar_output}/@{jar}.jar" />
424            <var name="compile_java_patterns_temp" value="${compile_java_patterns_temp}${@{jar}.jar.packages}," />
425        </sequential>
426    </for>
427    <property name="compiler_jars" value="${compiler_jars_temp}" />
428    <property name="test_jars" value="${compiler_jars}:${junit_jar}" />
429    <propertyregex property="compile_java_patterns_temp2" input="${compile_java_patterns_temp}" regexp="\." replace="/" defaultvalue="${compile_java_patterns_temp}" />
430    <propertyregex property="compile_java_patterns_temp3" input="${compile_java_patterns_temp2}" regexp="," replace="/**/*.java," defaultvalue="${compile_java_patterns_temp2}" />
431    <propertyregex property="compile_java_patterns" input="${compile_java_patterns_temp3}" regexp=",$" replace="" defaultvalue="" />
432   
433   
434    <!-- Build compiler jars. -->
435    <target name="build" depends="compile-ast" description="Build all jars needed by compiler.">
436        <mkdir dir="${jar_output}" />
437        <for list="${jars}" param="jar">
438            <sequential>
439                <var name="build_file_patterns_temp" value="" />
440                <for list="${@{jar}.jar.packages}" param="package">
441                    <sequential>
442                        <propertyregex property="build_class_dir" input="@{package}" defaultValue="@{package}" regexp="\." replace="/" override="true" />
443                        <var name="build_file_patterns_temp" value="${build_file_patterns_temp},${build_class_dir}/**/*.class" />
444                    </sequential>
445                </for>
446                <propertyregex property="build_file_patterns" input="${build_file_patterns_temp}" regexp="^," replace="" override="true" />
447                <if>
448                    <istrue value="${@{jar}.jar.include_resources}" />
449                    <then>
450                        <mkdir dir="${resources_temp}" />
451                        <for list="${modules}" param="module">
452                            <sequential>
453                                <if>
454                                    <available file="${@{module}.path}/src/resources" />
455                                    <then>
456                                        <echo message="Using resources from @{module} in @{jar}.jar" />
457                                        <copy todir="${resources_temp}">
458                                            <fileset dir="${@{module}.path}/src/resources" />
459                                        </copy>
460                                    </then>
461                                </if>
462                            </sequential>
463                        </for>
464                        <jar destfile="${jar_output}/@{jar}.jar">
465                            <fileset dir="${class_output}" includes="${build_file_patterns}" />
466                            <fileset dir="${resources_temp}" />
467                        </jar>
468                        <delete dir="${resources_temp}" />
469                    </then>
470                    <else>
471                        <jar destfile="${jar_output}/@{jar}.jar">
472                            <fileset dir="${class_output}" includes="${build_file_patterns}" />
473                        </jar>
474                    </else>
475                </if>
476            </sequential>
477        </for>
478    </target>
479
480    <macrodef name="sync-macro">
481        <attribute name="fromdir"  default="NOT SET"/>
482        <attribute name="todir" default="NOT SET"/>
483        <!--
484            Mirror the intermediate directory with the final one (that's used in
485            subsequent steps), copying files that differ and removing files that
486            do not exist anymore. Then remove the intermediate directory.
487        -->
488        <sequential>
489            <mkdir dir="@{todir}" />
490            <!-- Build list of files to exclude from deletion -->
491            <var name="excludes" value="" />
492            <for list="${modules}" param="module">
493                <sequential>
494                    <if>
495                        <isset property="@{module}.pre_generated" />
496                        <then>
497                            <for list="${@{module}.pre_generated}" param="pregenerated">
498                                <sequential>
499                                    <propertyregex property="java_dir_pre_temp" input="@{pregenerated}" regexp="\." replace="/" 
500                                            defaultValue="@{pregenerated}" override="true" global="true" />
501                                    <var name="excludes" value="${excludes} ${java_dir_pre_temp}/**/*" />
502                                </sequential>
503                            </for>
504                        </then>
505                    </if>
506                </sequential>
507            </for>
508            <delete>
509                <!--
510                    In addition to removing files that do not exist in intermediate anymore
511                    this also wipes any changed files, to make sure we don't get any problems
512                    with file name case on windows.
513                -->
514                <fileset dir="@{todir}" includes="**/*" excludes="${excludes}">
515                    <different targetdir="@{fromdir}"/>
516                </fileset>
517            </delete>
518            <copy overwrite="true" todir="@{todir}">
519                <fileset dir="@{fromdir}" includes="**/*">
520                    <different targetdir="@{todir}"/>
521                </fileset>
522            </copy>
523            <delete dir="@{fromdir}" />
524        </sequential>
525    </macrodef>
526       
527    <!-- Meta target for generating all java files. -->
528    <target name="gen" depends="patch,parser,scanner,gen-test,gen-extra,patch-test" description="Generate all Java files.">
529        <sync-macro fromdir="${java_output_intermediate_common}" todir="${java_output_final_common}" />
530        <sync-macro fromdir="${java_output_intermediate}"        todir="${java_output_final}" />
531    </target>
532
533    <!-- Compile class used in patch target. -->
534    <target name="compile-patcher">
535        <mkdir dir="${class_output}" />
536        <for list="${modules}" param="module">
537            <sequential>
538                <if>
539                    <isset property="@{module}.patch"/>
540                    <then>
541                        <propertyregex property="compile-patcher.javafile" input="${@{module}.patch}" defaultValue="${@{module}.patch}" regexp="\." replace="/" override="true" global="true" />
542                        <javac compiler="${java_compiler}" source="${java_version}" target="${java_version}" 
543                                fork="true" encoding="UTF8" debug="false" destdir="${class_output}" includeantruntime="false">
544                            <src path="${@{module}.java_path}" />
545                            <include name="${compile-patcher.javafile}.java" />
546                        </javac>
547                    </then>
548                </if>
549            </sequential>
550        </for>
551    </target>
552
553    <macrodef name="compile-gen-extra-macro">
554        <attribute name="generate"  default="NOT SET"/>
555        <attribute name="gen-extra" default="NOT SET"/>
556        <sequential>
557            <mkdir dir="${build_class_output}" />
558            <for list="${modules}" param="module">
559                <sequential>
560                    <if>
561                        <isset property="@{module}.@{generate}"/>
562                        <then>
563                            <javac  classpath="${beaver-rt_jar}" 
564                                    srcdir="${java_dirs}:${@{module}.java_path}" 
565                                    compiler="${java_compiler}" 
566                                    source="${java_version}" 
567                                    target="${java_version}" 
568                                    fork="true" 
569                                    encoding="UTF8" 
570                                    debug="false" 
571                                    destdir="${build_class_output}" 
572                                    includeantruntime="false"
573                                    excludes="${test_helper_java_patterns}" >
574                                <include name="${@{module}.@{gen-extra}.javafile}.java" />
575                            </javac>
576                        </then>
577                    </if>
578                </sequential>
579            </for>
580        </sequential>
581    </macrodef>
582
583    <!-- Compile class used in gen-extra target. -->
584    <target name="compile-gen-extra">
585        <compile-gen-extra-macro generate="generate"     gen-extra="gen-extra" />
586    </target>
587
588    <!-- Compile all java files required by compiler (generated and static). -->
589    <target name="compile-ast" depends="gen">
590        <mkdir dir="${class_output}" />
591        <javac 
592            classpath="${beaver-rt_jar}" 
593            compiler="${java_compiler}" 
594            source="${java_version}" 
595            target="${java_version}" 
596            fork="true" 
597            encoding="UTF8" 
598            debug="false" 
599            destdir="${class_output}" 
600            includeantruntime="false"
601            srcdir="${java_output_final_common}:${java_output_final}:${java_dirs}" 
602            includes="${compile_java_patterns}" 
603            excludes="${test_helper_java_patterns}" />
604    </target>
605   
606    <!-- Generate JavaDoc. -->
607    <target name="artifacts" depends="build,doc" description="Generates artifacts, i.e. all jars and JavaDoc." />
608   
609    <!-- Generate JavaDoc. -->
610    <target name="doc" depends="gen" description="Generate JavaDoc.">
611        <if>
612            <isset property="javadoc.packages"/>
613            <then>
614                <mkdir 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.