root/releases/bedework-3.7/build/buildTools/deftasks.xml

Revision 3125 (checked in by douglm, 2 years ago)

Uptodate test was not working correctly. Fixed.

Line 
1 <!-- Define a number of tasks and macros
2      deftasks:  define someuseful build tasks
3      projectDefs: standard project definitions
4      xMsg: x=info,debug etc. For message output
5
6      Authors: Mike Douglass   douglm rpi.edu
7 -->
8
9 <project name="do.deftasks" basedir="." default="">
10   <macrodef name="deftasks">
11     <sequential>
12       <path id="build.cp">
13         <fileset dir="${build.dir}">
14           <include name="*.jar"/>
15         </fileset>
16       </path>
17  
18       <taskdef name="forEachApp"
19                classname="org.bedework.deployment.ForEachAppTask">
20         <classpath refid="build.cp"/>
21       </taskdef>
22
23       <taskdef name="resolveFile"
24                classname="org.bedework.deployment.ResolveFile">
25         <classpath refid="build.cp"/>
26       </taskdef>
27
28       <taskdef name="makeLangXsl"
29                classname="org.bedework.deployment.MakeLangXsl">
30         <classpath refid="build.cp"/>
31       </taskdef>
32
33       <taskdef name="applicationXml"
34                classname="org.bedework.deployment.ApplicationXmlTask">
35         <classpath refid="build.cp"/>
36       </taskdef>
37     </sequential>
38   </macrodef>
39  
40   <macrodef name="projectDefs">
41     <attribute name="name"/>
42     <attribute name="version"/>
43     <attribute name="deployment-name" default=""/>
44     <attribute name="no-default-libs" default="true"/>
45     <attribute name="subproject" default="false"/>
46     <sequential>
47       <property name="project.name" value="@{name}"/>
48      
49       <property name="project.version" value="@{version}"/>
50      
51       <property name="dist.home" location="${project.home}/dist"/>
52       <mkdir dir="${dist.home}" />
53
54       <property name="lib.dir" location="${project.home}/lib"/>
55
56       <property name="build.dir" location="${bedework.home}/build"/>
57
58       <property name="buildjar" location="${build.dir}/buildTools/buildjar.xml"/>
59       <property name="buildwar" location="${build.dir}/buildwar.xml"/>
60       <property name="buildsh" location="${build.dir}/buildsh.xml"/>
61
62       <property name="resources.dir" location="${project.home}/resources"/>
63
64       <property name="org.bedework.libcache.dir"
65                 location="${bedework.home}/libcache"/>
66      
67       <property name="org.bedework.temp.dir"
68                 location="${dist.home}/temp" />
69
70       <if>
71         <istrue value="@{subproject}" />
72         <then>
73           <property name="source.home" location="${project.home}/src"/>
74         </then>
75         <else>
76           <delete dir="${org.bedework.temp.dir}" />
77           <mkdir dir="${org.bedework.temp.dir}" />
78          
79           <property name="org.bedework.deployment.name"
80                     value="@{deployment-name}" />
81
82           <property name="propval.app.no.defaultlibs"
83                     value="@{no-default-libs}" />
84          
85           <deftasks/>
86         </else>
87       </if>
88
89       <import file="${build.dir}/buildTools/getJar.xml"/>
90     </sequential>
91   </macrodef>
92
93   <!-- =====================================================================
94        Assumes projectDefs was called previously.
95        ===================================================================== -->
96   <macrodef name="projectInit">
97     <sequential>
98       <infoMsg message="* =========== Building ${project.name}" />
99      
100       <delete dir="${lib.dir}" />
101       <mkdir dir="${lib.dir}" />
102
103       <property name="test.data.dir"
104                 location="${dist.home}/test-data" />
105
106       <property name="test.reports.dir"
107                 location="${dist.home}/test-reports" />
108
109       <property name="org.bedework.empty.dir"
110                 location="${dist.home}/empty-dir" />
111       <mkdir dir="${org.bedework.empty.dir}" />
112
113       <fileset id="empty.fileset" dir="${org.bedework.empty.dir}"
114                excludes="*" />
115
116       <!-- ==================== Compilation Classpath ==================== -->
117
118       <path id="compile.classpath">
119         <fileset dir="${lib.dir}">
120            <include name="*.jar"/>
121         </fileset>
122         <fileset dir="${dist.home}">
123            <include name="*.jar"/>
124         </fileset>
125       </path>
126     </sequential>
127   </macrodef>
128  
129   <!-- Standard targets for build files. Two targets need to be overridden by
130        the importing task
131        
132        init - carry out project specific initialisation
133        build-source - builds the source to creat ejars.
134     -->
135  
136   <!-- Override this -->
137   <target name="init" />
138
139   <!-- Override this -->
140   <target name="build-source" />
141
142   <!-- =================================================================
143        Clean out all library files from other projects and all generated
144        files in preparation for a complete rebuild.
145
146        Needed because switching versions leaves a load of old bedework
147        generated stuff in the libraries.
148        ================================================================= -->
149   <target name="deep-clean" depends="clean">
150     <delete dir="${lib.dir}" />
151   </target>
152
153   <!-- =================================================================
154        Clean all generated files
155        ================================================================= -->
156   <target name="clean">
157     <delete dir="${dist.home}" />
158   </target>
159
160   <!-- =================================================================
161        Clean up after a build.
162        ================================================================= -->
163   <target name="cleanup">
164     <!--
165     <delete dir="${org.bedework.empty.dir}" />
166     -->
167   </target>
168
169   <!-- ========================== Base build Targets ===================
170        Here we have one target building the classes and interfaces that make
171        up the access control suite.
172        ================================================================= -->
173
174   <target name="clean-build" depends="clean,build"
175           description="Clean and compile access control classes"/>
176
177   <target name="clean-build-all" depends="clean,build-all"
178           description="Clean and compile access control classes"/>
179
180   <target name="build" depends="init,build-source,cleanup"
181           description="Compile access control classes"/>
182
183   <target name="build-all" depends="build"
184           description="Compile access control classes"/>
185  
186   <!-- This macro builds a single jar file. It just sets defaults for the java
187        compiler then invokes it.
188
189        This is the only place we compile files.
190
191        On entry we require:
192          jar.file              Fully specified name of destination jar file.
193          base.java.sources     Defines the java source files
194          base.class.patternset Defines the java class files
195          base.resource.files   Defines extra resources to go in the jar
196
197        We will copy all files defined by base.java.patternset to a temporary
198        location and compile out of that into a temporary classes location.
199
200        We do that to avoid a problematic feature of the java compilers, the
201        tendency to recompile any referenced sources found on the source path.
202
203        So, if we have all our sources under the directory "src" and compile a
204        single package in that tree, all referenced classes will be compiled,
205        even if they exist in a jar file on the class path.
206
207        The other side-effect is that we might compile and include classes we
208        didn't realise we were compiling.
209
210        The downside is that we need to be very specific about the classes we
211        compile for a package and we might need to put classes in
212        base.java.sources which we don't want in the final jar file.
213
214        On exit we will have created classes in the directory
215           ${jar.temp.classes}
216        and a jar file
217           ${build.jar.file}
218
219        Authors: Mike Douglass   douglm rpi.edu
220   -->
221   <macrodef name="build-jar">
222     <attribute name="module-base"/>
223     <attribute name="jar-file"/>
224     <attribute name="jar-dependency" default=""/>
225     <attribute name="generated-sources" default=""/>
226     <attribute name="property-resources" default=""/>
227
228     <sequential>
229       <if>
230         <equals arg1="@{generated-sources}" arg2="" />
231         <then>
232           <fileset id="buildjar.generated.java.sources" refid="empty.fileset" />
233         </then>
234         <else>
235           <fileset id="buildjar.generated.java.sources" dir="@{generated-sources}" >
236             <include name="org/bedework/**/*.java"/>
237           </fileset>
238         </else>
239       </if>
240
241       <if>
242         <equals arg1="@{property-resources}" arg2="" />
243         <then>
244           <fileset id="buildjar.resource.files" refid="empty.fileset" />
245         </then>
246         <else>
247           <fileset id="buildjar.resource.files" dir="@{property-resources}" >
248             <include name="**/*.properties"/>
249           </fileset>
250         </else>
251       </if>
252
253       <fileset id="buildjar.java.sources" dir="@{module-base}/src" >
254         <include name="**/*.java"/>
255       </fileset>
256
257       <patternset id="base.class.patternset">
258         <include name="**/*.class"/>
259       </patternset>
260
261       <if>
262         <not>
263           <equals arg1="@{jar-dependency}" arg2="" />
264         </not>
265         <then>
266           <property name="build.jar.dependency" value="@{jar-dependency}" />
267         </then>
268       </if>
269      
270       <!--  =================== Compilation Control Options ===============
271         These properties control option settings on the Javac compiler when it
272         is invoked using the <javac> task.
273
274         compile.debug        Should compilation include the debug option?
275         compile.deprecation  Should compilation include the deprecation option?
276         compile.optimize     Should compilation include the optimize option?
277
278         Below are the defaults. They may already be set in the build properties.
279       -->
280
281       <property name="compile.debug" value="true"/>
282       <property name="compile.deprecation" value="false"/>
283       <property name="compile.optimize" value="true"/>
284       <property name="compile.verbose" value="false"/>
285       <property name="compile.listfiles" value="false"/>
286
287       <property name="jar.temp.sources"
288                location="${dist.home}/source" />
289       <property name="jar.temp.classes"
290                location="${dist.home}/classes" />
291
292       <!-- ==============================================================
293             See if the jar is up to date. We recompile if any of the
294             source files or metainf files are newer. We also recompile if
295             any jars on the package classpath are newer.
296            ============================================================== -->
297
298       <noisyMsg message="build.jar.file=@{jar-file}" />
299      
300       <if>
301         <isset property="build.jar.dependency"/>
302         <then>
303           <dirname file="${build.jar.dependency}"
304                    property="dependency.dirname" />
305           <basename file="${build.jar.dependency}"
306                     property="dependency.basename" />
307           <fileset dir="${dependency.dirname}" id="dependency.fileset">
308             <include name="${dependency.basename}"/>
309           </fileset>
310         </then>
311         <else>
312           <fileset refid="empty.fileset" id="dependency.fileset"/>
313         </else>
314       </if>     
315
316       <if>
317         <uptodate targetfile="@{jar-file}" >
318           <srcfiles refid="buildjar.java.sources" />
319           <srcfiles refid="buildjar.generated.java.sources" />
320           <srcfiles refid="buildjar.resource.files"/>
321           <srcfiles refid="dependency.fileset"/>
322         </uptodate>
323         <then>
324           <noisyMsg message="**** @{jar-file} is up to date" />
325         </then>
326         <else>
327           <noisyMsg message="**** @{jar-file} needs rebuilding" />
328
329           <!-- Delete jar file -->
330           <delete file="@{jar-file}"/>
331
332           <dirname property="build.jar.dir" file="@{jar-file}"/>
333
334           <mkdir dir="${build.jar.dir}" />
335
336           <!-- ==========================================================
337                             Build the classes
338                ========================================================== -->
339
340           <!-- First copy the sources we are going to compile into a temp
341                directory. -->
342           <delete dir="${jar.temp.sources}" />
343           <mkdir dir="${jar.temp.sources}" />
344          
345           <copy toDir="${jar.temp.sources}">
346             <fileset refid="buildjar.java.sources" />
347             <fileset refid="buildjar.generated.java.sources" />
348             <fileset refid="buildjar.resource.files"/>
349           </copy>
350
351           <mkdir dir="${jar.temp.classes}"/>
352          
353           <debugMsg message="About to build jar @{jar-file}"/>
354           <debugCpid idpar="compile.classpath" />
355
356           <javac srcdir="${jar.temp.sources}"
357                  destdir="${jar.temp.classes}"
358                  debug="${compile.debug}"
359                  verbose="${compile.verbose}"
360                  listfiles="${compile.listfiles}"
361                  deprecation="${compile.deprecation}"
362                  optimize="${compile.optimize}">
363             <classpath refid="compile.classpath"/>
364             <include name="**/*.java"/>
365             <compilerarg value="-nowarn" compiler="jikes" />
366           </javac>
367
368           <!-- ==========================================================
369                             Build jar file
370                ========================================================== -->
371
372           <jar jarfile="@{jar-file}">
373             <fileset dir="${jar.temp.classes}">
374               <patternset refid="base.class.patternset"/>
375             </fileset>
376             <fileset refid="buildjar.resource.files"/>
377           </jar>
378
379           <!-- ==========================================================
380                             Clean up
381                ========================================================== -->
382
383           <delete dir="${jar.temp.sources}" />
384           <delete dir="${jar.temp.classes}"/>
385         </else>
386       </if>
387     </sequential>
388   </macrodef>
389  
390   <macrodef name="infoMsg">
391     <attribute name="message"/>
392     <sequential>
393       <if>
394         <not>
395           <istrue value="${org.bedework.build.silent}" />
396         </not>
397         <then>
398           <echo message="@{message}" />
399         </then>
400       </if>
401     </sequential>
402   </macrodef>
403  
404   <macrodef name="noisyMsg">
405     <attribute name="message"/>
406     <sequential>
407       <if>
408         <istrue value="${org.bedework.build.noisy}" />
409         <then>
410           <echo message="@{message}" />
411         </then>
412       </if>
413     </sequential>
414   </macrodef>
415  
416   <macrodef name="debugMsg">
417     <attribute name="message"/>
418     <sequential>
419       <if>
420         <istrue value="${org.bedework.build.debug}" />
421         <then>
422           <echo message="@{message}" />
423         </then>
424       </if>
425     </sequential>
426   </macrodef>
427  
428   <macrodef name="debugCpid">
429     <attribute name="idpar"/>
430     <sequential>
431       <if>
432         <istrue value="${org.bedework.build.debug}" />
433         <then>
434           <property name="cp" refid="@{idpar}" />
435           <echo message="***************cp: ${cp}"/>
436         </then>
437       </if>
438     </sequential>
439   </macrodef>
440 </project>
Note: See TracBrowser for help on using the browser.