Tweak configure.sh script to pick up newest version of configure classes.
[jnode:svn-mirror.git] / all / build.xml
1 <project name="JNode" default="help" basedir=".">
2
3     <!-- Include antlib -->
4     <typedef file="${basedir}/lib/jnode.xml"/>
5
6     <!-- JNode version -->
7     <property name="jnode-ver" value="0.2.7-dev"/>
8
9     <!-- Java target and source version -->
10     <property name="java.target" value="1.5"/>
11     <property name="java.source" value="1.5"/>
12     <property name="java.encoding" value="US-ASCII"/>
13
14     <property name="root.dir" value="${basedir}/.."/>
15     <property name="build.dir" value="${basedir}/build"/>
16     <property name="reports.dir" value="${build.dir}/reports"/>
17     <property name="cdroms.dir" value="${build.dir}/cdroms"/>
18     <property name="descriptors.dir" value="${build.dir}/descriptors"/>
19     <property name="plugins.dir" value="${build.dir}/plugins"/>
20     <property name="initjars.dir" value="${build.dir}/initjars"/>
21     <property name="backup.dir" value="${build.dir}/backup"/>
22
23     <property name="jnode-builder.jar" value="${build.dir}/descriptors/jnode-builder.jar"/>
24     <property name="jnode-core.jar" value="${root.dir}/core/build/classes"/>
25     <property name="jnode-distr.jar" value="${root.dir}/distr/build/classes"/>
26     <property name="jnode-fs.jar" value="${root.dir}/fs/build/classes"/>
27     <property name="jnode-gui.jar" value="${root.dir}/gui/build/classes"/>
28     <property name="thinlet.jar" value="${root.dir}/gui/build/classes"/>
29     <property name="jnode-textui.jar" value="${root.dir}/textui/build/classes"/>
30     <property name="jnode-net.jar" value="${root.dir}/net/build/classes"/>
31     <property name="jnode-shell.jar" value="${root.dir}/shell/build/classes"/>
32     <property name="jnode-fonts.jar" value="${build.dir}/descriptors/jnode-fonts.jar"/>
33         <property name="jnode-images.jar" value="${build.dir}/descriptors/jnode-images.jar"/>
34
35     <property name="jnode-mmtk-genrc.jar" value="${root.dir}/core/build/classes-plan/org.jnode.vm.memmgr.mmtk.genrc"/>
36         <property name="jnode-mmtk-ms.jar" value="${root.dir}/core/build/classes-plan/org.jnode.vm.memmgr.mmtk.ms"/>
37         <property name="jnode-mmtk-nogc.jar" value="${root.dir}/core/build/classes-plan/org.jnode.vm.memmgr.mmtk.nogc"/>
38
39     <property name="mx4j.jar" value="${root.dir}/core/lib/mx4j.jar"/>
40     <property name="mx4j-remote.jar" value="${root.dir}/core/lib/mx4j-remote.jar"/>
41
42     <property name="ant.jar" value="${root.dir}/core/lib/ant.jar"/>
43     <property name="ant-launcher.jar" value="${root.dir}/core/lib/ant-launcher.jar"/>
44     <property name="commons-net.jar" value="${root.dir}/core/lib/commons-net-1.1.0.jar"/>
45     <property name="dnsjava.jar" value="${root.dir}/net/lib/dnsjava-1.6.6.jar"/>
46     <property name="jsch.jar" value="${root.dir}/net/lib/jsch-0.1.24.jar"/>
47     <property name="junit.jar" value="${root.dir}/core/lib/junit.jar"/>
48     <property name="mmtk.jar" value="${root.dir}/core/lib/mmtk/mmtk.jar"/>
49         <property name="mauve.jar" value="${root.dir}/core/lib/mauve.jar"/>
50     <property name="edtftpj.jar" value="${root.dir}/fs/lib/edtftpj-1.5.2.jar"/>
51     <property name="jcifs.jar" value="${root.dir}/fs/lib/jcifs-1.2.6.jar"/>
52     <property name="ejc.jar" value="${root.dir}/core/lib/ejc-3.1.1.jar"/>
53         <property name="oncrpc.jar" value="${root.dir}/net/lib/oncrpc.jar"/>
54         <property name="telnetd.jar" value="${root.dir}/distr/lib/telnetd.jar" />
55         <property name="commons-logging.jar" value="${root.dir}/distr/lib/commons-logging.jar" />
56         <property name="jetty.jar" value="${root.dir}/distr/lib/jetty-6.1.5.jar" />
57         <property name="jetty-util.jar" value="${root.dir}/distr/lib/jetty-util-6.1.5.jar" />
58     <property name="jsp.jar" value="${root.dir}/distr/lib/jsp-2.1.jar" />
59     <property name="jsp-api.jar" value="${root.dir}/distr/lib/jsp-api-2.1.jar" />
60     <property name="servlet.jar" value="${root.dir}/distr/lib/servlet-api-2.5-6.1.5.jar" />
61     <property name="derby.jar" value="${root.dir}/distr/lib/derby.jar" />
62     <property name="derbynet.jar" value="${root.dir}/distr/lib/derbynet.jar" />
63     <property name="derbytools.jar" value="${root.dir}/distr/lib/derbytools.jar" />
64
65     <!-- libraries needed to run tests -->
66     <property name="jmock-cglib.jar" value="${root.dir}/core/lib/jmock-cglib-1.0.1.jar"/>
67     <property name="jmock.jar" value="${root.dir}/core/lib/jmock-1.0.1.jar"/>
68     <property name="cglib.jar" value="${root.dir}/core/lib/cglib-2.1.jar"/>
69     <property name="asm.jar" value="${root.dir}/core/lib/asm-1.5.3.jar"/>
70         <property name="asm-attrs.jar" value="${root.dir}/core/lib/asm-attrs-1.5.3.jar"/>
71         <property name="asm-util.jar" value="${root.dir}/core/lib/asm-util-1.5.3.jar"/>
72         <property name="jcfe.jar" value="${root.dir}/core/lib/jcfe.jar"/>
73         <property name="jfunc.jar" value="${root.dir}/core/lib/jfunc.jar"/>
74         
75     <property name="log4j.jar" value="${root.dir}/core/lib/log4j-1.2.8.jar"/>
76     <property name="gnu-crypto.jar" value="${root.dir}/core/lib/gnu-crypto.jar"/>
77     <property name="javax-crypto.jar" value="${root.dir}/core/lib/javax-crypto.jar"/>
78     <!-- property name="javax-security.jar" value="${root.dir}/core/lib/javax-security.jar" / -->
79     <property name="beanshell.jar" value="${root.dir}/shell/lib/bsh-2.0b5.jar"/>
80     <property name="js.jar" value="${root.dir}/shell/lib/rhino1.6r5-jsr223.jar"/>
81
82     <!-- libraries needed to check plugin dependencies -->
83     <property name="bcel-5.1.jar" value="${root.dir}/builder/lib/bcel-5.1.jar" />       
84
85     <!-- libraries needed to check rules in source code -->
86     <property name="pmd.jar" value="${root.dir}/builder/lib/pmd/pmd-3.0.jar"/>
87     <property name="jaxen.jar" value="${root.dir}/builder/lib/pmd/jaxen-core-1.0-fcs.jar"/>
88     <property name="saxpath.jar" value="${root.dir}/builder/lib/pmd/saxpath-1.0-fcs.jar"/>
89     <property name="xerces.jar" value="${root.dir}/builder/lib/pmd/xercesImpl-2.6.2.jar"/>
90     <property name="xmlParserAPIs.jar" value="${root.dir}/builder/pmd/lib/xmlParserAPIs-2.6.2.jar"/>
91
92     <!-- lists of plugins to use while booting -->
93     <property name="default-plugin-list" value="${basedir}/conf/default-plugin-list.xml"/>
94     <property name="full-plugin-list" value="${basedir}/conf/full-plugin-list.xml"/>
95     <property name="install-plugin-list" value="${basedir}/conf/install-plugin-list.xml"/>
96     <property name="system-plugin-list" value="${basedir}/conf/system-plugin-list.xml"/>
97     <property name="sources.dist.tar.gz" value="${build.dir}/jnodesources-${jnode-ver}.tar.gz"/>
98     <property name="jnode-x86.iso" value="${cdroms.dir}/jnode-x86.iso"/>
99     <property name="jnode-x86-lite.iso" value="${cdroms.dir}/jnode-x86-lite.iso"/>
100     <property name="jnode-x86_64-lite.iso" value="${cdroms.dir}/jnode-x86_64-lite.iso"/>
101
102     <path id="cp">
103         <pathelement location="${mmtk.jar}"/>
104         <pathelement location="${ant.jar}"/>
105         <pathelement location="${junit.jar}"/>
106         <pathelement location="${jmock.jar}"/>
107         <pathelement location="${jmock-cglib.jar}"/>
108         <pathelement location="${asm.jar}"/>
109         <pathelement location="${asm-attrs.jar}"/>
110         <pathelement location="${asm-util.jar}"/>
111         <pathelement location="${cglib.jar}"/>
112         <pathelement location="${log4j.jar}"/>
113         <pathelement location="${gnu-crypto.jar}"/>
114         <pathelement location="${javax-crypto.jar}"/>
115         <pathelement location="${basedir}/conf"/>
116         <pathelement location="${beanshell.jar}"/>
117         <pathelement location="${js.jar}"/>
118         <pathelement location="${jcfe.jar}"/>
119         <pathelement location="${jfunc.jar}"/>
120         <pathelement location="${oncrpc.jar}"/>
121         <pathelement location="${edtftpj.jar}"/>
122         <pathelement location="${jcifs.jar}"/>
123         <pathelement location="${commons-net.jar}"/>
124         <pathelement location="${dnsjava.jar}"/>
125         <pathelement location="${mauve.jar}"/>
126         <pathelement location="${derby.jar}"/>
127         <pathelement location="${derbynet.jar}"/>
128         <pathelement location="${derbytools.jar}"/>
129     </path>
130
131     <path id="cp-jnode">
132         <pathelement location="${jnode-builder.jar}"/>
133         <pathelement location="${jnode-core.jar}"/>
134         <pathelement location="${jnode-distr.jar}"/>
135         <pathelement location="${jnode-fs.jar}"/>
136         <pathelement location="${jnode-shell.jar}"/>
137         <pathelement location="${jnode-net.jar}"/>
138         <pathelement location="${jnode-gui.jar}"/>
139         <pathelement location="${thinlet.jar}"/>
140         <pathelement location="${jnode-textui.jar}"/>
141             <pathelement location="${bcel-5.1.jar}"/>
142         <pathelement location="${mx4j.jar}"/>
143         <pathelement location="${mx4j-remote.jar}"/>
144         <path refid="cp"/>
145     </path>
146
147
148     <filterset id="descriptors-filter">
149         <filter token="PROVIDER" value="JNode.org"/>
150         <filter token="VERSION" value="${jnode-ver}"/>
151     </filterset>
152
153     <patternset id="exts">
154         <include name="**/*.dat"/>
155         <include name="**/*.ids"/>
156         <include name="**/*.properties"/>
157         <include name="**/*.xml"/>
158     </patternset>
159
160     <target name="prepare">
161         <!-- Fail on a Windows platform if there are spaces in the root dir's pathname.  It will
162              lead to mkisofs dying with a misleading error message.  bluebit / crawley 2008-05-03 -->
163         <fail message="Cannot build JNode from a directory with spaces in the pathname.">
164           <condition>
165             <and>
166               <contains string="${os.name}" substring="windows" casesensitive="false" />
167               <contains string="${root.dir}" substring=" " casesensitive="false" />
168             </and>
169           </condition>
170         </fail>
171
172         <fail message="Java Runtime version 1.6 needed. Your version is: ${java.runtime.version}">
173             <condition>
174                 <not>
175                     <contains string="${java.runtime.version}" substring="1.6" casesensitive="false"/>
176                 </not>
177             </condition>
178         </fail>
179
180         <!-- Initialize all project directories -->
181         <property file="${root.dir}/jnode.properties"/>
182         <!-- Set overwritable properties -->
183         <property name="jnode.memmgr.plugin.id" value="org.jnode.vm.memmgr.def"/>
184         <property name="compilerarg" value="-nowarn"/>
185
186         <!-- Derive properties -->
187         <property name="jnode-mmtk.jar" value="${root.dir}/core/build/classes-plan/${jnode.memmgr.plugin.id}"/>
188
189         <!-- Initialize timestamp -->
190         <tstamp/>
191         
192         <property name="hotswap.class.tstamp.pattern" value="MM/dd/yyyy kk:mm:ss"/>
193         <tstamp>
194             <format property="hotswap.class.tstamp" pattern="${hotswap.class.tstamp.pattern}" />
195         </tstamp>
196
197
198         <!-- Update default excludes -->
199         <defaultexcludes add="**/_svn"/>
200         <defaultexcludes add="**/_svn/**"/>
201         
202         <!-- Create basic build directories -->
203         <mkdir dir="${build.dir}"/>
204         <mkdir dir="${reports.dir}"/>
205         <mkdir dir="${cdroms.dir}"/>
206         <mkdir dir="${descriptors.dir}"/>
207         <mkdir dir="${plugins.dir}"/>
208         <mkdir dir="${initjars.dir}"/>
209     </target>
210
211     <!-- Call the assemble target of all subprojects -->
212     <target name="assemble-projects" depends="prepare">
213         <jnode.antall target="assemble"/>
214     </target>
215
216     <!-- Assemble all plugins -->
217     <target name="assemble-plugins" depends="assemble-projects,openjdk-annotate">
218         <!-- Now assemble all plugins -->
219         <taskdef name="plugin" classname="org.jnode.build.PluginTask" classpathref="cp-jnode"/>
220         <plugin todir="${plugins.dir}" tmpdir="${build.dir}/tmp/plugins" pluginDir="${descriptors.dir}">
221             <libalias name="jnode-core.jar" alias="${jnode-core.jar}"/>
222             <libalias name="jnode-distr.jar" alias="${jnode-distr.jar}"/>
223             <libalias name="jnode-fs.jar" alias="${jnode-fs.jar}"/>
224             <libalias name="jnode-gui.jar" alias="${jnode-gui.jar}"/>
225             <libalias name="jnode-textui.jar" alias="${jnode-textui.jar}"/>
226             <libalias name="jnode-net.jar" alias="${jnode-net.jar}"/>
227             <libalias name="jnode-shell.jar" alias="${jnode-shell.jar}"/>
228
229                 <libalias name="jnode-mmtk-genrc.jar" alias="${jnode-mmtk-genrc.jar}"/>
230                 <libalias name="jnode-mmtk-ms.jar" alias="${jnode-mmtk-ms.jar}"/>
231                 <libalias name="jnode-mmtk-nogc.jar" alias="${jnode-mmtk-nogc.jar}"/>
232
233                 <libalias name="mmtk.jar" alias="${mmtk.jar}"/>
234             <libalias name="mx4j.jar" alias="${mx4j.jar}"/>
235             <libalias name="mx4j-remote.jar" alias="${mx4j-remote.jar}"/>
236
237             <libalias name="commons-net-1.1.0.jar" alias="${commons-net.jar}"/>
238             <libalias name="dnsjava-1.6.6.jar" alias="${dnsjava.jar}"/>
239             <libalias name="jsch-0.1.24.jar" alias="${jsch.jar}"/>
240             <libalias name="gnu-crypto.jar" alias="${gnu-crypto.jar}"/>
241             <libalias name="javax-crypto.jar" alias="${javax-crypto.jar}"/>
242             <libalias name="log4j.jar" alias="${log4j.jar}"/>
243             <libalias name="beanshell.jar" alias="${beanshell.jar}"/>
244             <libalias name="js.jar" alias="${js.jar}"/>
245             <libalias name="lw.jar" alias="${lw.jar}"/>
246             <libalias name="thinlet.jar" alias="${thinlet.jar}"/>
247
248             <libalias name="junit.jar" alias="${junit.jar}"/>
249             <libalias name="jmock-1.0.1.jar" alias="${jmock.jar}"/>
250             <libalias name="jmock-cglib-1.0.1.jar" alias="${jmock-cglib.jar}"/>
251             <libalias name="asm.jar" alias="${asm.jar}"/>
252                 <libalias name="asm-attrs.jar" alias="${asm-attrs.jar}"/>
253                 <libalias name="asm-util.jar" alias="${asm-util.jar}"/>
254             <libalias name="cglib.jar" alias="${cglib.jar}"/>
255                 <libalias name="mauve.jar" alias="${mauve.jar}"/>
256                 <libalias name="jcfe.jar" alias="${jcfe.jar}"/>
257                 <libalias name="jfunc.jar" alias="${jfunc.jar}"/>
258
259             <libalias name="ant.jar" alias="${ant.jar}"/>
260             <libalias name="ant-commons-net.jar" alias="${ant-commons-net.jar}"/>
261             <libalias name="ant-launcher.jar" alias="${ant-launcher.jar}"/>
262             <libalias name="ant-trax.jar" alias="${ant-trax.jar}"/>
263             <libalias name="edtftpj.jar" alias="${edtftpj.jar}"/>
264             <libalias name="jcifs.jar" alias="${jcifs.jar}"/>
265             <libalias name="ejc.jar" alias="${ejc.jar}"/>
266                 <libalias name="oncrpc.jar" alias="${oncrpc.jar}"/>
267                 <libalias name="telnetd.jar" alias="${telnetd.jar}"/>
268             <libalias name="commons-logging.jar" alias="${commons-logging.jar}"/>
269             <libalias name="jetty.jar" alias="${jetty.jar}"/>
270             <libalias name="jetty-util.jar" alias="${jetty-util.jar}"/>
271             <libalias name="jsp.jar" alias="${jsp.jar}"/>
272             <libalias name="jsp-api.jar" alias="${jsp-api.jar}"/>
273             <libalias name="servlet.jar" alias="${servlet.jar}"/>
274             <libalias name="derby.jar" alias="${derby.jar}"/>
275             <libalias name="derbynet.jar" alias="${derbynet.jar}"/>
276             <libalias name="derbytools.jar" alias="${derbytools.jar}"/>
277
278             <descriptors dir="${descriptors.dir}/">
279                 <include name="*.xml"/>
280                 <exclude name="*plugin-list.xml"/>
281             </descriptors>
282         </plugin>
283     </target>
284
285     <!-- Assemble all default initjars -->
286     <target name="assemble-default-initjars" depends="assemble-plugins" unless="no.default.initjars">
287         <!-- Build all default initjar's -->
288         <taskdef name="initjars" classname="org.jnode.build.InitJarsBuilder" classpathref="cp-jnode"/>
289         <initjars destdir="${initjars.dir}"
290             pluginDir="${plugins.dir}"
291             systemPluginList="${basedir}/conf/system-plugin-list.xml">
292             <fileset dir="${basedir}/conf">
293                 <exclude name="system-plugin-list.xml"/>
294                 <include name="*plugin-list.xml"/>
295             </fileset>
296         </initjars>
297     </target>
298
299     <!-- Assemble all custom initjars -->
300     <target name="assemble-custom-initjars" depends="assemble-plugins" if="custom.plugin-list.dir">
301         <!-- Build all custom initjar's -->
302         <taskdef name="initjars" classname="org.jnode.build.InitJarsBuilder" classpathref="cp-jnode"/>
303         <initjars destdir="${initjars.dir}"
304             pluginDir="${plugins.dir}"
305             systemPluginList="${basedir}/conf/system-plugin-list.xml">
306             <fileset dir="${custom.plugin-list.dir}">
307                 <include name="*plugin-list.xml"/>
308             </fileset>
309         </initjars>
310     </target>
311
312     <!-- Assemble all subprojects, plugins and initjars -->
313     <target name="assemble" depends="assemble-default-initjars, assemble-custom-initjars">
314     </target>
315
316     <!-- Give help on possible targets -->
317     <target name="help">
318         <echo>
319 Welcome to the JNode build system.
320                         
321 You can use this build system to perform various tasks, 
322 by specifying one or more targets on the command line. 
323 See the list below for an explanation of all targets.
324                         
325 x86               Build the JNode bootable image for the X86 32-bit
326                   architecture.
327 x86_64            Build the JNode bootable image for the X86 64-bit
328                   architecture (AMD64).
329                         
330 cd-x86            Build the JNode bootable CD-ROM for the X86
331                   architecture 32 and 64-bit. The CD-ROM also
332                   contains the JNode sources.
333 cd-x86-lite       Build the JNode bootable CD-ROM for the X86
334                   32-bit architecture.
335 cd-x86_64-lite    Build the JNode bootable CD-ROM for the X86
336                   64-bit architecture.
337                         
338 create-patch      Create a patch file containing the differences
339                   between the local sources and the cvs HEAD
340                   branch.
341                 
342 boot-files-winNT  Build the JNode boot files for windows NT/2K/XP
343                   used together with NTLDR
344
345 encoding-test     Verify the file encoding of all java source
346                   files.
347 encoding-fix      Correct the file encoding of all java source
348                   files.
349                         
350 javadoc           Generate documentation of all java source files.
351 javadoc-small     Generate documentation of the basic JNode api's.
352
353 check-plugins     Run tests to check plugin dependencies.
354
355 clean             Remove all intermediate build results.
356         </echo>
357     </target>
358
359     <!-- Macro used to call the x86 build script -->
360     <macrodef name="x86-build">
361         <attribute name="bits"/>
362         <attribute name="target" default="all"/>
363         <sequential>
364             <ant antfile="build-x86.xml" inheritall="on" inheritrefs="on" target="@{target}">
365                 <property name="jnode.bits" value="@{bits}"/>
366             </ant>
367         </sequential>
368     </macrodef>
369
370     <!-- Create the X86 32-bit boot image -->
371     <target name="x86" depends="assemble">
372         <x86-build bits="32"/>
373     </target>
374
375     <!-- Create the X86 64-bit boot image-->
376     <target name="x86_64" depends="assemble">
377         <x86-build bits="64"/>
378     </target>
379
380     <!-- Create the JOP boot image -->
381     <target name="jop" depends="assemble">
382         <ant antfile="build-jop.xml" inheritall="on" inheritrefs="on"/>
383     </target>
384
385     <!-- Build the boot files for windows NT/2K/XP (with NTLDR) -->
386     <target name="boot-files-winNT" depends="assemble">
387         <x86-build bits="32" target="boot-files-winNT"/>
388     </target>
389
390     <!-- Create a bootable CDROM image containing all x86 bootable images and the sources -->
391     <target name="cd-x86" depends="assemble">
392         <tar destfile="${sources.dist.tar.gz}" compression="gzip" basedir="${root.dir}" excludes="*/build/**"/>
393         <x86-build bits="32" target="java-image"/>
394         <x86-build bits="64" target="java-image"/>
395         <property name="jnode.bits" value="32" />
396         <ant antfile="build-x86.xml" inheritall="true" inheritrefs="true" target="cdrom"/>
397     </target>
398
399     <!-- Create a bootable CDROM image for x86 32-bits -->
400     <target name="cd-x86-lite" depends="assemble">
401         <x86-build bits="32" target="java-image"/>
402         <property name="jnode.bits" value="32" />
403         <ant antfile="build-x86.xml" inheritall="true" inheritrefs="true" target="cdrom-lite"/>
404     </target>
405
406     <!-- Create a bootable CDROM image for x86 64-bits -->
407     <target name="cd-x86_64-lite" depends="assemble">
408         <x86-build bits="64" target="java-image"/>
409         <property name="jnode.bits" value="64" />
410         <ant antfile="build-x86.xml" inheritall="true" inheritrefs="true" target="cdrom_64-lite"/>
411     </target>
412
413     <!-- Upload a distribution -->
414     <target name="upload">
415         <property name="upload.dir" value="${build.dir}/upload"/>
416         <mkdir dir="${upload.dir}"/>
417         <gzip src="${jnode-x86.iso}" destfile="${upload.dir}/jnode-x86-${jnode-ver}.iso.gz"/>
418         <copy todir="${upload.dir}" file="${sources.dist.tar.gz}"/>
419         <ftp server="upload.sourceforge.net" remotedir="incoming" passive="yes" newer="yes" verbose="yes" userid="anonymous" password="${user.name}@users.sourceforge.net">
420             <fileset dir="${upload.dir}"/>
421         </ftp>
422     </target>
423
424     <!-- Clean everything files -->
425     <target name="clean">
426         <jnode.antall target="clean"/>
427         <delete dir="${build.dir}" quiet="on"/>
428     </target>
429
430     <!-- Generate only the basic api javadoc files -->
431     <target name="javadoc-small">
432         <jnode.javadoc destdir="${build.dir}/javadoc/small">
433             <sourcepath>
434                 <pathelement location="${root.dir}/core/src/classpath/gnu"/>
435                 <pathelement location="${root.dir}/core/src/classpath/java"/>
436                 <pathelement location="${root.dir}/core/src/classpath/javax"/>
437                 <pathelement location="${root.dir}/core/src/classpath/ext"/>
438                 <pathelement location="${root.dir}/core/src/classpath/vm"/>
439                 <pathelement location="${root.dir}/core/src/icedtea"/>
440                 <pathelement location="${root.dir}/core/src/openjdk/com"/>
441                 <pathelement location="${root.dir}/core/src/openjdk/java"/>
442                 <pathelement location="${root.dir}/core/src/openjdk/javax"/>
443                 <pathelement location="${root.dir}/core/src/openjdk/org"/>
444                 <pathelement location="${root.dir}/core/src/openjdk/sun"/>
445                 <pathelement location="${root.dir}/core/src/openjdk/vm"/>
446                 <pathelement location="${root.dir}/core/src/endorsed/nanoxml"/>
447                 <pathelement location="${root.dir}/core/src/core"/>
448                 <pathelement location="${root.dir}/core/src/vmmagic"/>
449                 <pathelement location="${root.dir}/core/src/driver"/>
450             </sourcepath>
451             <package name="org.jnode.driver"/>
452             <package name="org.jnode.naming"/>
453             <package name="org.jnode.plugin"/>
454             <package name="org.jnode.system"/>
455             <bootclasspath refid="cp"/>
456         </jnode.javadoc>
457     </target>
458
459     <!-- Generate only the MMTk api javadoc files -->
460     <target name="javadoc-mmtk">
461         <jnode.javadoc destdir="${build.dir}/javadoc/mmtk">
462             <sourcepath>
463                 <pathelement location="${root.dir}/core/src/vmmagic"/>
464                 <pathelement location="${root.dir}/core/src/mmtk-vm"/>
465                 <pathelement location="${root.dir}/core/src/core"/>
466                 <pathelement location="${root.dir}/core/src/classpath/gnu"/>
467                 <pathelement location="${root.dir}/core/src/classpath/ext"/>
468                 <pathelement location="${root.dir}/core/src/classpath/vm"/>
469                 <pathelement location="${root.dir}/core/src/openjdk/sun"/>
470                 <pathelement location="${root.dir}/core/src/openjdk/vm"/>
471                 <pathelement location="${root.dir}/core/src/endorsed/nanoxml"/>
472             </sourcepath>
473             <package name="org.mmtk.*"/>
474             <package name="org.jnode.vm.memmgr.mmtk.*"/>
475             <package name="org.vmmagic.*"/>
476             <classpath refid="cp"/>
477         </jnode.javadoc>
478     </target>
479
480     <!-- Generate all javadoc files -->
481     <target name="javadoc">
482         <jnode.javadoc destdir="${build.dir}/javadoc/full">
483             <sourcepath>
484                 <pathelement location="${root.dir}/core/src/classpath/gnu"/>
485                 <pathelement location="${root.dir}/core/src/classpath/java"/>
486                 <pathelement location="${root.dir}/core/src/classpath/javax"/>
487                 <pathelement location="${root.dir}/core/src/classpath/ext"/>
488                 <pathelement location="${root.dir}/core/src/classpath/vm"/>
489                 <pathelement location="${root.dir}/core/src/icedtea"/>
490                 <pathelement location="${root.dir}/core/src/openjdk/com"/>
491                 <pathelement location="${root.dir}/core/src/openjdk/java"/>
492                 <pathelement location="${root.dir}/core/src/openjdk/javax"/>
493                 <pathelement location="${root.dir}/core/src/openjdk/org"/>
494                 <pathelement location="${root.dir}/core/src/openjdk/sun"/>
495                 <pathelement location="${root.dir}/core/src/openjdk/vm"/>
496                 <pathelement location="${root.dir}/core/src/core"/>
497                 <pathelement location="${root.dir}/core/src/driver"/>
498                 <pathelement location="${root.dir}/core/src/mmtk-vm"/>
499                 <pathelement location="${root.dir}/core/src/endorsed/nanoxml"/>
500                 <pathelement location="${root.dir}/core/src/test"/>
501                 <pathelement location="${root.dir}/core/src/vmmagic"/>
502                 <pathelement location="${root.dir}/distr/src/install"/>
503                 <pathelement location="${root.dir}/fs/src/fs"/>
504                 <pathelement location="${root.dir}/fs/src/fs"/>
505                 <pathelement location="${root.dir}/fs/src/driver"/>
506                 <pathelement location="${root.dir}/gui/src/awt"/>
507                 <pathelement location="${root.dir}/gui/src/driver"/>
508                 <pathelement location="${root.dir}/gui/src/desktop"/>
509                 <pathelement location="${root.dir}/gui/src/font"/>
510                 <pathelement location="${root.dir}/gui/src/thinlet"/>
511                 <pathelement location="${root.dir}/net/src/net"/>
512                 <pathelement location="${root.dir}/net/src/driver"/>
513                 <pathelement location="${root.dir}/shell/src/shell"/>
514             </sourcepath>
515             <package name="org.jnode.*"/>
516             <package name="org.mmtk.*"/>
517             <package name="org.vmmagic.*"/>
518             <bootclasspath refid="cp"/>
519         </jnode.javadoc>
520     </target>
521
522     <!-- Backup CVS files -->
523     <!-- TODO create replacement SVN task
524     <target name="backup">
525         <mkdir dir="${backup.dir}"/>
526         <tstamp>
527             <format property="date" pattern="dd-MM-yyyy"/>
528         </tstamp>
529         <get src="http://cvs.sourceforge.net/cvstarballs/jnode-cvsroot.tar.bz2" dest="${backup.dir}/jnode-cvsroot-${date}.tar.bz2" usetimestamp="true" verbose="true"/>
530     </target>
531     -->
532
533     <!-- Compare classpath version of jnode with real classpath version -->
534     <target name="cp-compare" depends="assemble">
535         <taskdef name="cp-compare" classname="org.jnode.ant.taskdefs.classpath.CompareTask" classpathref="cp-jnode"/>
536
537         <patternset id="cp-includes-pattern">
538             <include name="**/*.java"/>
539             <include name="**/*.properties"/>
540             <include name="**/package.html"/>
541         </patternset>
542
543         <patternset id="cp-sources-pattern">
544             <exclude name="compat/**/*"/>
545             <exclude name="examples/**/*"/>
546             <exclude name="external/**/*"/>
547             <exclude name="tools/**/*"/>
548             <exclude name="gnu/classpath/tools/javah/**/*"/>
549             <exclude name="gnu/java/awt/peer/gtk/**/*"/>
550             <exclude name="gnu/java/awt/peer/qt/**/*"/>
551             <exclude name="gnu/java/awt/peer/x/**/*"/>
552             <exclude name="gnu/java/awt/dnd/peer/gtk/**/*"/>
553             <exclude name="gnu/java/net/local/**/*"/>
554             <exclude name="gnu/javax/sound/midi/alsa/**/*"/>
555             <exclude name="gnu/javax/sound/midi/dssi/**/*"/>
556             <exclude name="gnu/javax/swing/plaf/gtk/**/*"/>
557             <exclude name="gnu/test/**/*"/>
558             <exclude name="gnu/xml/libxmlj/**/*"/>
559             <exclude name="resource/**/*"/>
560             <exclude name="test/**/*"/>
561             <exclude name="testsuite/**/*"/>
562             <exclude name="vm/reference/**/*"/>
563         </patternset>
564
565         <delete dir="${build.dir}/classpath-compare"/>
566         <cp-compare destdir="${build.dir}/classpath-compare" type="classpath">
567             <vmsources>
568                 <fileset dir="${root.dir}/core/src/classpath/gnu">
569                     <patternset refid="cp-includes-pattern"/>
570                 </fileset>
571                 <fileset dir="${root.dir}/core/src/classpath/java">
572                     <patternset refid="cp-includes-pattern"/>
573                 </fileset>
574                 <fileset dir="${root.dir}/core/src/classpath/javax">
575                         <patternset refid="cp-includes-pattern"/>
576                                 </fileset>
577                 <fileset dir="${root.dir}/core/src/classpath/tools">
578                     <patternset refid="cp-includes-pattern"/>
579                 </fileset>
580                 <fileset dir="${root.dir}/core/src/classpath/sun">
581                     <patternset refid="cp-includes-pattern"/>
582                 </fileset>
583             </vmsources>
584             <vmspecificsources>
585                 <fileset dir="${root.dir}/core/src/classpath/vm">
586                     <patternset refid="cp-includes-pattern"/>
587                 </fileset>
588             </vmspecificsources>
589             <classpathsources>
590                 <fileset dir="${root.dir}/../classpath">
591                     <patternset refid="cp-includes-pattern"/>
592                     <patternset refid="cp-sources-pattern"/>
593                 </fileset>
594                 <fileset dir="${root.dir}/../classpath/external/jsr166">
595                     <patternset refid="cp-includes-pattern"/>
596                     <patternset refid="cp-sources-pattern"/>
597                 </fileset>
598                 <fileset dir="${root.dir}/../classpath/resource">
599                         <patternset refid="cp-includes-pattern"/>
600                 </fileset>
601                 <fileset dir="${root.dir}/../classpath/external/w3c_dom">
602                     <patternset refid="cp-includes-pattern"/>
603                 </fileset>
604                 <fileset dir="${root.dir}/../classpath/external/relaxngDatatype">
605                     <patternset refid="cp-includes-pattern"/>
606                 </fileset>
607                 <fileset dir="${root.dir}/../classpath/external/sax">
608                     <patternset refid="cp-includes-pattern"/>
609                 </fileset>
610                 <fileset dir="${root.dir}/../classpath/tools">
611                     <patternset refid="cp-includes-pattern"/>
612                     <patternset refid="cp-sources-pattern"/>
613                 </fileset>
614                 <fileset dir="${root.dir}/../classpath/tools/external/asm">
615                     <patternset refid="cp-includes-pattern"/>
616                     <patternset refid="cp-sources-pattern"/>
617                 </fileset>
618             </classpathsources>
619         </cp-compare>
620     </target>
621
622     <!-- Compare classpath version of jnode with real classpath version -->
623     <target name="header-fix" depends="assemble">
624         <taskdef name="header" classname="org.jnode.ant.taskdefs.HeaderTask" classpathref="cp-jnode"/>
625
626         <header update="on" headerFile="${root.dir}/all/template/header.txt">
627             <fileset dir="${root.dir}/builder/src/builder" includes="**/*.java"/>
628             <fileset dir="${root.dir}/core/src/classpath/ext" includes="**/*.java"/>
629             <fileset dir="${root.dir}/core/src/classpath/vm" includes="**/*.java"/>
630             <fileset dir="${root.dir}/core/src/core" includes="**/*.java"/>
631             <fileset dir="${root.dir}/core/src/vmmagic" includes="**/*.java"/>
632             <fileset dir="${root.dir}/core/src/mmtk-vm" includes="**/*.java"/>
633             <fileset dir="${root.dir}/core/src/driver" includes="**/*.java"/>
634             <fileset dir="${root.dir}/core/src/test" includes="**/*.java"/>
635             <fileset dir="${root.dir}/distr/src/install" includes="**/*.java"/>
636             <fileset dir="${root.dir}/distr/src/apps" includes="**/*.java"/>
637             <fileset dir="${root.dir}/fs/src/fs" includes="**/*.java"/>
638             <fileset dir="${root.dir}/fs/src/driver" includes="**/*.java"/>
639             <fileset dir="${root.dir}/fs/src/test" includes="**/*.java"/>
640             <fileset dir="${root.dir}/gui/src/awt" includes="**/*.java"/>
641             <fileset dir="${root.dir}/gui/src/desktop" includes="**/*.java"/>
642             <fileset dir="${root.dir}/gui/src/driver" includes="**/*.java"/>
643             <fileset dir="${root.dir}/gui/src/test" includes="**/*.java"/>
644             <fileset dir="${root.dir}/net/src/net" includes="**/*.java"/>
645             <fileset dir="${root.dir}/net/src/driver" includes="**/*.java"/>
646             <fileset dir="${root.dir}/net/src/test" includes="**/*.java"/>
647             <fileset dir="${root.dir}/shell/src/shell" includes="**/*.java"/>
648         </header>
649     </target>
650
651     <target name="check-debugger-properties" depends="prepare">
652         <fail message="Please set jnode.debugger.host property in jnode.properties." unless="jnode.debugger.host"/>
653         <fail message="Please set jnode.debugger.port property in jnode.properties." unless="jnode.debugger.port"/>        
654     </target>
655
656     <target name="hotswap" depends="check-debugger-properties,assemble-projects">
657       <taskdef name="hotswap" classname="org.jnode.ant.taskdefs.Hotswap" classpathref="cp-jnode" />
658       <hotswap verbose="true" host="${jnode.debugger.host}" port="${jnode.debugger.port}">
659         <fileset dir="../core/build/classes/" includes="**/*.class">
660           <date datetime="${hotswap.class.tstamp}" pattern="MM/dd/yyyy kk:mm:ss" when="after" granularity="0"/>
661         </fileset>
662         <fileset dir="../distr/build/classes/" includes="**/*.class">
663           <date datetime="${hotswap.class.tstamp}" pattern="MM/dd/yyyy kk:mm:ss" when="after" granularity="0"/>
664         </fileset>
665         <fileset dir="../fs/build/classes/" includes="**/*.class">
666           <date datetime="${hotswap.class.tstamp}" pattern="MM/dd/yyyy kk:mm:ss" when="after" granularity="0"/>
667         </fileset>
668         <fileset dir="../gui/build/classes/" includes="**/*.class">
669           <date datetime="${hotswap.class.tstamp}" pattern="MM/dd/yyyy kk:mm:ss" when="after" granularity="0"/>
670         </fileset>
671         <fileset dir="../net/build/classes/" includes="**/*.class">
672           <date datetime="${hotswap.class.tstamp}" pattern="MM/dd/yyyy kk:mm:ss" when="after" granularity="0"/>
673         </fileset>
674         <fileset dir="../shell/build/classes/" includes="**/*.class">
675           <date datetime="${hotswap.class.tstamp}" pattern="MM/dd/yyyy kk:mm:ss" when="after" granularity="0"/>
676         </fileset>
677         <fileset dir="../textui/build/classes/" includes="**/*.class">
678           <date datetime="${hotswap.class.tstamp}" pattern="MM/dd/yyyy kk:mm:ss" when="after" granularity="0"/>
679         </fileset>
680       </hotswap>
681     </target>
682
683     <target name="oj-compare" depends="assemble">
684             <taskdef name="cp-compare" classname="org.jnode.ant.taskdefs.classpath.CompareTask" classpathref="cp-jnode"/>
685
686             <patternset id="cp-includes-pattern">
687                 <include name="**/*.java"/>
688                 <include name="**/*.properties"/>
689                 <include name="**/package.html"/>
690             </patternset>
691
692             <patternset id="cp-sources-pattern">
693                 <exclude name="com/sun/demo/**/*"/>
694                 <exclude name="com/sun/tools/hat/**/*"/>
695                 <exclude name="com/sun/tools/example/**/*"/>
696                 <exclude name="com/sun/tools/javah/**/*"/>
697                 <exclude name="com/sun/tools/internal/txw2/**/*"/>
698                 <exclude name="sun/jvmstat/**/*"/>
699                 <exclude name="sun/tools/attach/**/*"/>
700                 <exclude name="sun/tools/jinfo/**/*"/>
701                 <exclude name="sun/tools/jps/**/*"/>
702                 <exclude name="sun/tools/jmap/**/*"/>
703                 <exclude name="sun/tools/jstack/**/*"/>
704                 <exclude name="sun/tools/jstat/**/*"/>
705                 <exclude name="sun/tools/jstatd/**/*"/>
706                 <exclude name="sun/tools/jconsole/**/*"/>
707             </patternset>
708
709             <delete dir="${build.dir}/openjdk-compare"/>
710             <cp-compare destdir="${build.dir}/openjdk-compare" type="openjdk">
711                 <vmsources>
712                     <fileset dir="${root.dir}/core/src/openjdk/com">
713                         <patternset refid="cp-includes-pattern"/>
714                     </fileset>
715                     <fileset dir="${root.dir}/core/src/openjdk/java">
716                         <patternset refid="cp-includes-pattern"/>
717                     </fileset>
718                     <fileset dir="${root.dir}/core/src/openjdk/javax">
719                         <patternset refid="cp-includes-pattern"/>
720                     </fileset>
721
722                     <fileset dir="${root.dir}/core/src/openjdk/org">
723                         <patternset refid="cp-includes-pattern"/>
724                     </fileset>
725
726                     <fileset dir="${root.dir}/core/src/openjdk/sun">
727                         <patternset refid="cp-includes-pattern"/>
728                     </fileset>
729                 </vmsources>
730                 <vmspecificsources>
731                     <fileset dir="${root.dir}/core/src/openjdk/vm">
732                         <patternset refid="cp-includes-pattern"/>
733                        </fileset>
734                 </vmspecificsources>
735                 <classpathsources>
736                     <fileset dir="${root.dir}/../../openjdk/j2se/src/share/classes/">
737                         <patternset refid="cp-includes-pattern"/>
738                         <patternset refid="cp-sources-pattern"/>
739                     </fileset>
740                 </classpathsources>
741             </cp-compare>
742         </target>
743
744     <target name="openjdk-annotate" depends="assemble-projects" 
745                                 description="add annotations to compiled openjdk classes">
746         <echo message="openjdk-annotate"/>
747         <taskdef name="oj-annotate" classname="org.jnode.ant.taskdefs.AnnotateTask" 
748                         classpathref="cp-jnode"/>
749
750         <oj-annotate annotationFile="${root.dir}/all/conf/openjdk-annotations.properties"
751                                  buildStartTime="${hotswap.class.tstamp}" pattern="${hotswap.class.tstamp.pattern}"
752                                  trace="false" failonerror="true">
753             <fileset dir="${root.dir}/core/build/classes">
754                 <patternset includes="**/*.class"/>
755             </fileset>          
756         </oj-annotate>
757     </target>
758
759         <!-- check that all native methods are properly implemented for JNode -->
760     <target name="native-method-check" depends="assemble-projects">
761         <echo message="native-method-check"/>
762         <taskdef name="native-check" classname="org.jnode.ant.taskdefs.NativeCheckTask" 
763                         classpathref="cp-jnode"/>
764
765         <native-check trace="false" failonerror="false">
766             <fileset dir="${root.dir}/core/build/classes">
767                 <patternset includes="**/*.class"/>
768             </fileset>          
769         </native-check>
770     </target>
771
772     <!-- Run all tests -->
773     <target name="tests" depends="assemble">
774         <ant target="tests" dir="${root.dir}/fs" inheritall="on" inheritrefs="on"/>
775     </target>
776
777     <!-- Check the encoding of all files -->
778     <target name="encoding-test" depends="assemble">
779         <taskdef name="n2a" classname="org.jnode.ant.taskdefs.Native2AsciiTask" classpathref="cp-jnode"/>
780
781         <n2a update="off">
782             <fileset dir="${root.dir}" includes="**/*.java"/>
783         </n2a>
784     </target>
785
786     <!-- Check and fix the encoding of all files -->
787     <target name="encoding-fix" depends="assemble">
788         <taskdef name="n2a" classname="org.jnode.ant.taskdefs.Native2AsciiTask" classpathref="cp-jnode"/>
789
790         <n2a update="on">
791             <fileset dir="${root.dir}" includes="**/*.java"/>
792         </n2a>
793     </target>
794
795         <!-- check plugin dependencies -->
796         <target name="check-plugins" depends="assemble-plugins">
797                 <!-- Check all plugins -->
798                 <taskdef name="checkDeps" classname="org.jnode.build.dependencies.BCELDependencyChecker" 
799                         classpathref="cp-jnode" />
800         <!--
801         TODO: remove duplicate classes from mmtk related plugins and enable their checking. 
802         -->
803         <checkDeps>
804                         <plugins dir="${plugins.dir}/">
805                                 <include name="*.jar" />
806                 <exclude name="*mmtk*.jar" />
807             </plugins>
808                         
809                         <descriptors dir="${descriptors.dir}/">
810                                 <include name="*.xml" />
811                                 <exclude name="*plugin-list.xml" />
812                 <exclude name="*mmtk*.xml" />
813             </descriptors>
814                 </checkDeps>
815         </target>
816
817     <!-- Define the task that check the rules -->
818     <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"
819         classpathref="cp-jnode">
820         <classpath>
821             <pathelement location="${pmd.jar}"/>
822             <pathelement location="${jaxen.jar}"/>
823             <pathelement location="${saxpath.jar}"/>
824             <pathelement location="${xerces.jar}"/>
825             <pathelement location="${xmlParserAPIs.jar}"/>
826         </classpath>
827     </taskdef>
828
829
830     <!-- Macro used to check that the rules are applied in the source code -->
831     <macrodef name="checkProjectRules">
832         <attribute name="projectName"/>
833         <attribute name="webSrcUrl"/>
834         <attribute name="projectSrc"/>
835         <sequential>
836             <property name="nbFailures" value="0"/>
837             <echo message="Scanning @{projectName}."/>
838             <property name="tmp" value="../@{projectSrc}"/>
839             <pmd failuresPropertyName="nbFailures">
840                 <formatter type="html" toFile="${reports.dir}/pmd_report-@{projectName}.html"/>
841
842                 <ruleset>rulesets/favorites.xml</ruleset>
843                 <ruleset>rulesets/basic.xml</ruleset>
844
845                 <fileset dir="../@{projectSrc}" includes="**/*.java"/>
846             </pmd>
847             <echo message="There was ${nbFailures} failures in @{projectName}."/>
848         </sequential>
849     </macrodef>
850
851     <target name="checkJNodeRules" depends="prepare">
852         <parallel>
853             <checkProjectRules projectName="distr" webSrcUrl="distr" projectSrc="distr"/>
854             <checkProjectRules projectName="JNode-Builder" webSrcUrl="builder" projectSrc="builder"/>
855             <checkProjectRules projectName="JNode-Core" webSrcUrl="core" projectSrc="core"/>
856             <checkProjectRules projectName="JNode-FS" webSrcUrl="fs" projectSrc="fs"/>
857             <checkProjectRules projectName="JNode-GUI" webSrcUrl="gui" projectSrc="gui"/>
858             <checkProjectRules projectName="JNode-Net" webSrcUrl="net" projectSrc="net"/>
859             <checkProjectRules projectName="JNode-Shell" webSrcUrl="shell" projectSrc="shell"/>
860             <checkProjectRules projectName="JNode-TestUI" webSrcUrl="textui" projectSrc="textui"/>
861         </parallel>
862     </target>
863
864     <!-- Document all plugins -->
865     <target name="document-plugins" depends="assemble-projects">
866         <taskdef name="plugindocumentation" classname="org.jnode.build.documentation.PluginDocumentationTask" classpathref="cp-jnode"/>
867
868         <plugindocumentation
869             destdir="${reports.dir}/plugins"
870             pluginDir="${descriptors.dir}"
871             tree="${jnode.plugin.doc.tree}">
872             <descriptors dir="${descriptors.dir}/">
873                 <include name="*.xml"/>
874                 <exclude name="*plugin-list.xml"/>
875             </descriptors>
876         </plugindocumentation>
877
878     </target>
879
880     <target name="checkstyle" description="Generates a report of code convention violations.">
881         <taskdef resource="checkstyletask.properties" classpath="../core/lib/checkstyle-all-4.4.jar"/>
882         <checkstyle config="jnode_checks.xml">
883             <fileset dir="../builder/src/builder" includes="**/*.java"/>
884             <fileset dir="../core/src/core" includes="**/*.java"/>
885             <fileset dir="../core/src/driver" includes="**/*.java"/>
886             <fileset dir="../core/src/test" includes="**/*.java"/>
887             <fileset dir="../distr/src/apps" includes="**/*.java"/>
888             <fileset dir="../distr/src/emu" includes="**/*.java"/>
889             <fileset dir="../distr/src/install" includes="**/*.java"/>
890                 <fileset dir="../distr/src/test" includes="**/*.java"/>
891             <fileset dir="../fs/src/fs" includes="**/*.java"/>
892             <fileset dir="../fs/src/driver" includes="**/*.java"/>
893             <fileset dir="../fs/src/test" includes="**/*.java"/>
894             <fileset dir="../gui/src/test" includes="**/*.java"/>
895             <fileset dir="../gui/src/desktop" includes="**/*.java"/>
896             <fileset dir="../gui/src/driver" includes="**/*.java"/>
897             <fileset dir="../gui/src/awt" includes="**/*.java"/>
898             <fileset dir="../net/src/net" includes="**/*.java"/>
899             <fileset dir="../net/src/driver" includes="**/*.java"/>
900             <fileset dir="../net/src/test" includes="**/*.java"/>
901             <fileset dir="../shell/src/test" includes="**/*.java"/>
902             <fileset dir="../shell/src/shell" includes="**/*.java"/>
903         </checkstyle>
904     </target>
905
906     <!-- Create a patch -->
907     <!-- TODO create replacement SVN task
908     <target name="create-patch">
909         <property name="patch.file" value="${root.dir}/patch.txt"/>             
910                 <echo>Creating patch in ${patch.file}</echo>
911                 <cvs output="${patch.file}" dest="${root.dir}">
912                     <commandline>
913                         <argument line="-q diff -u -N"/>
914                     </commandline>
915                 </cvs>
916         </target>
917         -->
918 </project>