source: branches/ant-install-branch/gsdl3/build.xml@ 9688

Last change on this file since 9688 was 9688, checked in by kjdon, 19 years ago

some changes to incorporate all remaining functionality of gs3-install.sh

  • Property svn:keywords set to Author Date Id Revision
File size: 42.5 KB
Line 
1<?xml version="1.0"?>
2
3<!-- ======================================================================
4 March 2005
5
6 GSDL3 build and install script
7
8 kjdon
9 ====================================================================== -->
10<project name="gsdl3" default="usage" basedir=".">
11
12 <!-- ============ self defined tasks =================== -->
13
14 <taskdef name="mysetproxy" classname="org.greenstone.anttasks.MySetProxy" classpath="${basedir}/lib/java/anttasks.jar"/>
15 <taskdef name="getuserandpassword" classname="org.greenstone.anttasks.MyGetUserAndPassword" classpath="${basedir}/lib/java/anttasks.jar"/>
16
17
18
19<!-- ===================== Property Definitions =========================== -->
20
21<!--
22
23 Each of the following properties are used in the build script.
24 Values for these properties are set by the first place they are
25 defined, from the following list:
26
27 * Definitions on the "ant" command line (ant -Dfoo=bar compile).
28
29 * Definitions from a "build.properties" file in the top level
30 source directory of this application.
31
32 * Definitions from a "build.properties" file in the user's
33 home directory.
34
35 * Default definitions in this build.xml file.
36
37 You will note below that property values can be composed based on the
38 contents of previously defined properties. This is a powerful technique
39 that helps you minimize the number of changes required when your development
40 environment is modified. Note that property composition is allowed within
41 "build.properties" files as well as in the "build.xml" script.
42
43-->
44
45 <property file="build.properties"/>
46 <property file="${user.home}/build.properties"/>
47
48 <!-- get properties from the environment -->
49 <property environment="env"/>
50 <property name="src.home" value="${basedir}/src/java"/>
51 <property name="build.home" value="${basedir}/build"/>
52 <property name="packages.home" value="${basedir}/packages"/>
53 <property name="javalib" value="${basedir}/lib/java"/>
54 <property name="web.home" value="${basedir}/web"/>
55 <property name="web.lib" value="${web.home}/lib"/>
56 <property name="web.classes" value="${web.home}/WEB-INF/classes"/>
57
58 <property name="javadocs" value="${basedir}/docs/javadoc"/>
59
60 <property name="app.name" value="gsdl3"/>
61 <property name="app.path" value="/${app.name}"/>
62 <property name="app.version" value="3.00alpha"/>
63 <property name="catalina.home" value="${basedir}/comms/jakarta/tomcat"/>
64
65 <property name="os.linux" value="Linux"/> <!-- mac??-->
66 <property name="os.windows" value="Windows 95,Windows 98,Windows 2000,Windows XP, Windows NT,Windows ME"/> <!-- check this!!!-->
67
68 <condition property="current.os.islinux">
69 <os family="unix"/>
70 </condition>
71 <condition property="current.os.iswindows">
72 <os family="windows"/>
73 </condition>
74 <!-- ============= Base dirs for each package and component ============ -->
75 <property name="applet.home" value="${src.home}/org/greenstone/applet"/>
76 <property name="gsdl3.home" value="${src.home}/org/greenstone/gsdl3"/>
77 <property name="anttasks.home" value="${src.home}/org/greenstone/anttasks"/>
78 <property name="gs2build.home" value="${basedir}/gs2build"/>
79 <property name="gli.home" value="${basedir}/gli"/>
80 <property name="vishnu.home" value="${packages.home}/vishnu"/>
81 <property name="mg.home" value="${packages.home}/mg"/>
82 <property name="mgpp.home" value="${packages.home}/mgpp"/>
83 <property name="mysql.home" value="${packages.home}/mysql"/>
84 <property name="gsdl-as.home" value="${packages.home}/gsdl-as"/>
85
86<!-- ==================== Compilation Control Options ==================== -->
87
88<!--
89
90 These properties control option settings on the Javac compiler when it
91 is invoked using the <javac> task.
92
93 compile.debug Should compilation include the debug option?
94
95 compile.deprecation Should compilation include the deprecation option?
96
97 compile.optimize Should compilation include the optimize option?
98
99-->
100
101 <property name="compile.debug" value="true"/>
102 <property name="compile.deprecation" value="true"/>
103 <property name="compile.optimize" value="true"/>
104
105<!--
106
107 Rather than relying on the CLASSPATH environment variable, Ant includes
108 features that makes it easy to dynamically construct the classpath you
109 need for each compilation. The example below constructs the compile
110 classpath to include the servlet.jar file, as well as the other components
111 that Tomcat makes available to web applications automatically, plus anything
112 that you explicitly added.
113
114-->
115
116 <path id="compile.classpath">
117 <!-- Include all jar files in our lib directory -->
118 <pathelement location="${javalib}"/>
119 <fileset dir="${javalib}">
120 <include name="*.jar"/>
121 </fileset>
122 <!-- Include the resources directory -->
123 <pathelement location="${basedir}/resources/java"/>
124 <pathelement location="${basedir}/resources/dtd"/>
125
126 <!-- Include the axis jar files -->
127 <fileset dir="${basedir}/comms/soap/axis/lib">
128 <include name="*.jar"/>
129 </fileset>
130
131 <!-- Include all elements that Tomcat exposes to applications -->
132 <pathelement location="${catalina.home}/common/classes"/>
133 <fileset dir="${catalina.home}/common/endorsed">
134 <include name="*.jar"/>
135 </fileset>
136 <fileset dir="${catalina.home}/common/lib">
137 <include name="*.jar"/>
138 </fileset>
139 <pathelement location="${catalina.home}/shared/classes"/>
140 <fileset dir="${catalina.home}/shared/lib">
141 <include name="*.jar"/>
142 </fileset>
143 </path>
144
145 <!-- do we need this? copied from gs3-setup.sh -->
146 <path id="running.path">
147 <pathelement location="${mysql.home}/bin"/>
148 <pathelement location="${basedir}/bin/script"/>
149 <pathelement location="${basedir}/bin"/>
150 <pathelement location="${basedir}/lib"/>
151 <pathelement path="${env.PATH}"/>
152 </path>
153
154 <path id="ld.library.path">
155 <pathelement path="${env.LD_LIBRARY_PATH}"/>
156 <pathelement location="${basedir}/lib"/>
157 <pathelement location="${mysql.home}/lib/mysql"/>
158 </path>
159<!-- ==================== Primary Targets ============================= -->
160
161
162 <!-- add comments about using xxx-core, xxx-packages if only want certain parts?? -->
163
164 <target name="install" depends="accept-properties,init,prepare,cvsupdate,configure,clean,compile" description="Install Greenstone 3. Use this when you first checkout the code. Also running this target later on will reinstall Greenstone. Most things will be reset back to their defaults, except for code changes.">
165 </target>
166
167 <target name="all" depends="init,compile"
168 description="Recompile the code?"/>
169
170 <target name="clean" depends="init,clean-packages,clean-core,clean-gs2building"
171 description="Remove all old compiled code. Includes core, packages and gs2building if necessary"/>
172
173 <target name="compile" depends="init,compile-extra,compile-packages,compile-core,compile-gs2building"
174 description="Compile all the source code, includes core, packages and gs2building if necessary. Copy jar files and executables to their correct places."/>
175
176 <target name="update" depends="init,update-packages,update-core,update-gs2building"
177 description="Update (thru CVS) all the source (including core, packages and gs2building) and recompile. Similar to install but doesn't reinstall components such as Tomcat and axis."/>
178
179 <target name="cvsupdate" depends="init,cvsupdate-packages,cvsupdate-core,cvsupdate-gs2building"
180 description="Do a cvs update for all sources. Doesn't reompile teh code."/>
181 <!-- this is config stuff, that can be done more than once - should be rerun is the build.properties file changes -->
182 <target name="configure" depends="init,configure-tomcat,configure-files,configure-packages,configure-core,configure-gs2building"
183 description="Configure the installation. Includes setting up config files and configuring the C/C++ packages. This is called from install and update. Should be re-run if you change the build.properties file."/>
184
185
186<!-- =========== Help targets =================================== -->
187
188 <target name="usage" description="Print a help message">
189 <echo message=" Execute 'ant -projecthelp' for build file help."/>
190 <echo message=" Execute 'ant -help' for Ant help."/>
191 <echo>put the primary targets in here</echo>
192 </target>
193
194 <target name="help" depends="usage" description="Print a help message"/>
195
196 <target name="debug" depends="init" description="Display all the currently used properties">
197 <echoproperties/>
198 </target>
199
200<!-- ====== initialization and setup targets ================== -->
201
202 <target name="accept-properties">
203 <input addproperty="properties.ok" validargs="y,n">The following properties (among others) are being used from a build.properties file found in this directory:
204tomcat.server=${tomcat.server}
205tomcat.port=${tomcat.port}
206tomcat.installed.path=${tomcat.installed.path} (this is the location of Tomcat's base dir if it is already installed)
207gsdl.installed.path=${gsdl.installed.path} (this is the location of Greenstone 2 if you have it)
208proxy.host=${proxy.host}
209proxy.port=${proxy.port}
210If these are not acceptable, please change them and rerun this target. Continue [y/n]?" />
211 </input>
212 <condition property="do.abort">
213 <equals arg1="n" arg2="${properties.ok}"/>
214 </condition>
215 <fail if="do.abort">Build aborted by user. Please change your properties settings and re-run the target</fail>
216 </target>
217
218 <target name="check-cvsroot">
219 <condition property="cvsroot.notset">
220 <or>
221 <not>
222 <isset property="env.CVSROOT"/>
223 </not>
224 <equals arg1="" arg2="${env.CVSROOT}"/>
225 </or>
226 </condition>
227 <fail if="cvsroot.notset" message="You need to set the CVSROOT variable"/>
228 </target>
229 <!-- this sets up some initial properties -->
230 <target name="init">
231
232 <condition property="java.too.old">
233 <or>
234 <equals arg1="1.1" arg2="${ant.java.version}"/>
235 <equals arg1="1.2" arg2="${ant.java.version}"/>
236 <equals arg1="1.3" arg2="${ant.java.version}"/>
237 </or>
238 </condition>
239 <fail if="java.too.old" message="You need Java 1.4 or greater to run Greenstone 3"/>
240
241 <available file="${basedir}/packages/mgpp/text" property="mgpp.present"/>
242 <available file="${basedir}/packages/mysql/bin" property="mysql.present"/>
243 <available file="${basedir}/comms/jakarta/tomcat" property="tomcat.present"/>
244 <available file="${basedir}/gli" property="gli.present"/>
245 <available file="${basedir}/gs2build" property="gs2build.present"/>
246 <available file="${basedir}/comms/soap/axis" property="axis.present"/>
247 <available file="${basedir}/comms/jakarta/tomcat/webapps/axis" property="axis.installed"/>
248 <condition property="gsdl2.islocal">
249 <or>
250 <not>
251 <isset property="gsdl.installed.path"/>
252 </not>
253 <equals arg1="" arg2="${gsdl.installed.path}"/>
254 </or>
255 </condition>
256 <condition property="mysql.islocal">
257 <or>
258 <not>
259 <isset property="mysql.installed.path"/>
260 </not>
261 <equals arg1="" arg2="${mysql.installed.path}"/>
262 </or>
263 </condition>
264 <condition property="tomcat.islocal">
265 <or>
266 <not>
267 <isset property="tomcat.installed.path"/>
268 </not>
269 <equals arg1="" arg2="${tomcat.installed.path}"/>
270 </or>
271 </condition>
272
273 <echo>tomcat.port:${tomcat.port}, gli.present:${gli.present} gsdlislocal=${gsdl2.islocal} gs2build.present=${gs2build.present} gsdl.path = ${gsdl.path}</echo>
274 <condition property="proxy.present">
275 <not>
276 <equals arg1="" arg2="${proxy.host}"/>
277 </not>
278 </condition>
279 </target>
280
281 <target name="setup-proxy" depends="init" if="proxy.present">
282 <condition property="ask.user">
283 <or>
284 <equals arg1="" arg2="${proxy.user}"/>
285 <equals arg1="" arg2="${proxy.password}"/>
286 </or>
287 </condition>
288 <getuserandpassword message="Using proxy: ${proxy.host}:${proxy.port}" if="ask.user" username="${proxy.user}"/>
289 <mysetproxy proxyhost="${proxy.host}" proxyport="${proxy.port}" proxyuser="${proxy.user}" proxypassword="${proxy.password}"/>
290 </target>
291
292 <!-- this is all the do-once things -->
293 <target name="prepare" depends="init,prepare-core,prepare-packages,prepare-gs2building,prepare-tomcat,prepare-axis,prepare-mysql,prepare-collections">
294 </target>
295
296 <target name="prepare-collections">
297 <property name="collect.dir" value="${basedir}/web/sites/localsite/collect"/>
298 <!-- gs3mgdemo -->
299 <unzip src="${collect.dir}/gs3mgdemo/import.zip"
300 dest="${collect.dir}/gs3mgdemo"/>
301 <unzip src="${collect.dir}/gs3mgdemo/archives.zip"
302 dest="${collect.dir}/gs3mgdemo"/>
303 <unzip src="${collect.dir}/gs3mgdemo/index/index.zip"
304 dest="${collect.dir}/gs3mgdemo/index"/>
305 <!-- gs2mgdemo -->
306 <unzip src="${collect.dir}/gs2mgdemo/import.zip"
307 dest="${collect.dir}/gs2mgdemo"/>
308 <unzip src="${collect.dir}/gs2mgdemo/metadata.zip"
309 dest="${collect.dir}/gs2mgdemo"/>
310 <unzip src="${collect.dir}/gs2mgdemo/index/index.zip"
311 dest="${collect.dir}/gs2mgdemo/index"/>
312 <!-- gs2mgppdemo -->
313 <unzip src="${collect.dir}/gs2mgppdemo/import.zip"
314 dest="${collect.dir}/gs2mgppdemo"/>
315 <unzip src="${collect.dir}/gs2mgppdemo/metadata.zip"
316 dest="${collect.dir}/gs2mgppdemo"/>
317 <unzip src="${collect.dir}/gs2mgppdemo/index/index.zip"
318 dest="${collect.dir}/gs2mgppdemo/index"/>
319 <!-- gberg -->
320 <unzip src="${collect.dir}/gberg/index/index.zip"
321 dest="${collect.dir}/gberg/index"/>
322 </target>
323
324
325 <target name="configure-files" depends="init">
326 <filter token="port" value="${tomcat.port}"/>
327 <filter token="hostname" value="${tomcat.server}"/>
328 <filter token="gsdl3home" value="${basedir}"/>
329 <copy file="${basedir}/web/WEB-INF/web.xml.in" tofile="${basedir}/web/WEB-INF/web.xml" filtering="true"/>
330 <copy file="${basedir}/web/sites/localsite/siteConfig.xml.in" tofile="${basedir}/web/sites/localsite/siteConfig.xml" filtering="true"/>
331 <copy file="${basedir}/web/sites/gateway/siteConfig.xml.in" tofile="${basedir}/web/sites/gateway/siteConfig.xml" filtering="true"/>
332 <copy file="${basedir}/resources/java/SOAPServer.cfg.in" tofile="${basedir}/resources/java/SOAPServer.cfg" filtering="true"/>
333
334 </target>
335
336 <!-- this target sets up tomcat for teh first time, or resets it any subsequent times -->
337 <target name="prepare-tomcat" depends="init,setup-proxy">
338 <get src="http://www.greenstone.org/gs3files/jakarta-tomcat-5.5.7.zip"
339 dest="${basedir}/comms/jakarta/jakarta-tomcat-5.5.7.zip"
340 usetimestamp="true"/>
341 <delete dir="${basedir}/comms/jakarta/tomcat.bak"/>
342 <move todir="${basedir}/comms/jakarta/tomcat.bak" failonerror="false">
343 <fileset dir="${basedir}/comms/jakarta/tomcat"/>
344 </move>
345 <unzip src="${basedir}/comms/jakarta/jakarta-tomcat-5.5.7.zip"
346 dest="${basedir}/comms/jakarta"/>
347 <condition property="need.tomcat.compat">
348 <equals arg1="1.4" arg2="${ant.java.version}"/>
349 </condition>
350 <antcall target="prepare-tomcat-compat"/>
351 <move todir="${basedir}/comms/jakarta/tomcat">
352 <fileset dir="${basedir}/comms/jakarta/jakarta-tomcat-5.5.7"/>
353 </move>
354 <!-- make sure we have execute permission for the .sh files -->
355 <chmod dir="${basedir}/comms/jakarta/tomcat/bin" perm="ugo+rx"
356 includes="*.sh"/>
357 </target>
358
359
360 <target name="prepare-tomcat-compat" if="need.tomcat.compat">
361 <get src="http://www.greenstone.org/gs3files/jakarta-tomcat-5.5.7-compat.zip"
362 dest="${basedir}/comms/jakarta/jakarta-tomcat-5.5.7-compat.zip"
363 usetimestamp="true"/>
364 <unzip src="${basedir}/comms/jakarta/jakarta-tomcat-5.5.7-compat.zip"
365 dest="${basedir}/comms/jakarta"/>
366 </target>
367
368 <target name="configure-tomcat" depends="init" if="tomcat.present">
369 <!-- re-setup the server.xml file -->
370 <copy file="${basedir}/comms/jakarta/server.xml.in" tofile="${basedir}/comms/jakarta/tomcat/conf/server.xml" overwrite="true">
371 <filterset>
372 <filter token="port" value="${tomcat.port}"/>
373 <filter token="gsdl3home" value="${basedir}"/>
374 </filterset>
375 </copy>
376 </target>
377
378 <!-- this is one target that we only want to run once. -->
379 <target name="prepare-mysql" depends="init,install-mysql,startup-mysql" if="mysql.islocal" unless="mysql.present">
380 <exec executable="${mysql.home}/bin/mysql" dir="${mysql.home}">
381 <arg value="--user=root"/>
382 <arg value="--execute=GRANT SELECT,INSERT,DELETE,UPDATE,DROP,CREATE ON *.* TO gsdl3admin@localhost;"/>
383 </exec>
384 <exec executable="${mysql.home}/bin/mysql" dir="${mysql.home}">
385 <arg value="--user=root"/>
386 <arg value="--execute=GRANT SELECT,INSERT,DELETE,UPDATE,DROP,CREATE ON *.* TO gsdl3admin@'%'"/>
387 </exec>
388 <exec executable="${mysql.home}/bin/mysql" dir="${mysql.home}">
389 <arg value="--user=root"/>
390 <arg value="--execute=GRANT SELECT ON *.* TO gsdl3reader@localhost;"/>
391 </exec>
392 <exec executable="${mysql.home}/bin/mysql" dir="${mysql.home}">
393 <arg value="--user=root"/>
394 <arg value="--execute=create database localsite_gs3mgdemo;"/>
395 </exec>
396 <exec executable="${mysql.home}/bin/mysql" dir="${mysql.home}"
397 input="${basedir}/web/sites/localsite/collect/gs3mgdemo/mysqldatadump.sql">
398 <arg value="--user=root"/>
399 <arg value="localsite_gs3mgdemo"/>
400 </exec>
401 </target>
402
403 <target name="install-mysql" depends="init,install-mysql-linux,install-mysql-windows" if="mysql.islocal"/>
404
405 <!-- install and set up the database -->
406 <target name="install-mysql-linux" depends="init" if="current.os.islinux" unless="mysql.present">
407 <get src="http://www.greenstone.org/gs3files/mysql-standard-4.1.11-pc-linux-gnu-i686.tar.gz"
408 dest="${packages.home}/mysql-standard-4.1.11-pc-linux-gnu-i686.tar.gz"
409 usetimestamp="true"/>
410 <untar src="${packages.home}/mysql-standard-4.1.11-pc-linux-gnu-i686.tar.gz"
411 dest="${packages.home}"
412 compression="gzip"/>
413 <move todir="${packages.home}/mysql">
414 <fileset dir="${packages.home}/mysql-standard-4.1.11-pc-linux-gnu-i686"/>
415 </move>
416 <!-- file permissions are screwed up, so make executables executable -->
417 <chmod file="${mysql.home}/scripts/mysql_install_db" perm="a+x"/>
418 <chmod perm="a+x">
419 <fileset dir="${mysql.home}/bin" />
420 </chmod>
421 <mkdir dir="${mysql.home}/var/"/>
422 <mkdir dir="${mysql.home}/var/log/"/>
423 <chmod file="${mysql.home}/var/" perm="777"/>
424 <chmod file="${mysql.home}/var/log/" perm="777"/>
425
426 <exec executable="${mysql.home}/scripts/mysql_install_db" dir="${mysql.home}">
427 <arg value="--datadir=./data"/>
428 <arg value="--basedir=."/>
429 <arg value="--user=root"/>
430 <arg value="--force"/>
431 </exec>
432 </target>
433
434 <target name="install-mysql-windows" depends="init" if="current.os.iswindows">
435 <get src="http://www.greenstone.org/gs3files/mysql-essential-4.1.11-win32.msi"
436 dest="${packages.home}/mysql-essential-4.1.11-win32.msi"
437 usetimestamp="true"/>
438 <!-- can we run the installer?? -->
439 </target>
440
441 <target name="prepare-axis" depends="init">
442 <get src="http://www.greenstone.org/gs3files/axis-1_1.zip"
443 dest="${basedir}/comms/soap/axis-1_1.zip"
444 usetimestamp="true"/>
445 <delete dir="${basedir}/comms/soap/axis.bak"/>
446 <move todir="${basedir}/comms/soap/axis.bak" failonerror="false">
447 <fileset dir="${basedir}/comms/soap/axis"/>
448 </move>
449 <unzip src="${basedir}/comms/soap/axis-1_1.zip"
450 dest="${basedir}/comms/soap/"/>
451 <move todir="${basedir}/comms/soap/axis">
452 <fileset dir="${basedir}/comms/soap/axis-1_1"/>
453 </move>
454 <!-- install the webapp into tomcat -->
455 <copy todir="${basedir}/comms/jakarta/tomcat/webapps/axis">
456 <fileset dir="${basedir}/comms/soap/axis/webapps/axis"/>
457 </copy>
458 </target>
459
460<!-- ====================== Core targets ============================== -->
461<!-- core targets refer to the core gsdl3 java src -->
462
463 <target name="prepare-core">
464 <!-- just get rid of empty directories-->
465 <cvs command="update -P"/>
466 </target>
467 <target name="configure-core"/>
468 <target name="update-core" depends="init,cvsupdate-core,clean-core,compile-core"
469 description="Update only the Greenstone core" />
470
471 <target name="cvsupdate-core">
472 <cvs command="update -l"/>
473 <cvs command="update -dP bin comms dist-resources docs interfaces lib resources src web winutil"/>
474 </target>
475
476 <target name="clean-core"
477 description="Clean only the Greenstone core">
478 <delete dir="${build.home}"/>
479 </target>
480
481 <target name="compile-core"
482 description="Compile only the Greenstone core">
483 <mkdir dir="${build.home}"/>
484 <javac srcdir="${src.home}"
485 destdir="${build.home}"
486 debug="${compile.debug}"
487 deprecation="${compile.deprecation}"
488 optimize="${compile.optimize}">
489 <classpath>
490 <path refid="compile.classpath"/>
491 <!-- need to add in package jar files to classpath -->
492 <pathelement location="${mg.home}/java/mg.jar"/>
493 <pathelement location="${mgpp.home}/java/mgpp.jar"/>
494 <pathelement location="${vishnu.home}/vishnu.jar"/>
495 </classpath>
496 </javac>
497 <jar destfile="${build.home}/gsdl3.jar">
498 <fileset dir="${build.home}">
499 <include name="org/greenstone/gsdl3/**"/>
500 <exclude name="**/Test.class"/>
501 </fileset>
502 <manifest>
503 <attribute name="Built-By" value="${user.name}" />
504 </manifest>
505 </jar>
506 <copy file="${build.home}/gsdl3.jar" todir="${javalib}"/>
507 <copy file="${build.home}/gsdl3.jar" todir="${web.lib}"/>
508 <mkdir dir="${web.classes}/org/greenstone/gsdl3"/>
509 <copy file="${build.home}/org/greenstone/gsdl3/LibraryServlet.class"
510 todir="${web.classes}/org/greenstone/gsdl3"/>
511 <jar destfile="${build.home}/phind.jar">
512 <fileset dir="${build.home}">
513 <include name="org/greenstone/applet/phind/**"/>
514 </fileset>
515 <manifest>
516 <attribute name="Built-By" value="${user.name}" />
517 </manifest>
518 </jar>
519 <copy file="${build.home}/phind.jar" todir="${javalib}"/>
520 <copy file="${build.home}/phind.jar" todir="${web.lib}"/>
521 <jar destfile="${build.home}/anttasks.jar">
522 <fileset dir="${build.home}">
523 <include name="org/greenstone/anttasks/**"/>
524 </fileset>
525 <manifest>
526 <attribute name="Built-By" value="${user.name}" />
527 </manifest>
528 </jar>
529 <copy file="${build.home}/anttasks.jar" todir="${javalib}"/>
530 <jar destfile="${build.home}/gsdl3test.jar">
531 <fileset dir="${build.home}">
532 <include name="org/greenstone/gsdl3/**/*Test.class"/>
533 <include name="org/greenstone/testing/**"/>
534 </fileset>
535 <manifest>
536 <attribute name="Built-By" value="${user.name}" />
537 </manifest>
538 </jar>
539 </target>
540
541<!-- ================== Packages targets ================================ -->
542 <!-- these targets refer to the greenstone packages - these need updating
543 less often, so are in separate targets to the core -->
544 <target name="prepare-packages" depends="init,prepare-mgpp"/>
545
546 <target name="prepare-mgpp" depends="check-cvsroot,init" unless="mgpp.present">
547 <cvs command="checkout -P" package="mgpp" dest="${basedir}/packages/"/>
548 </target>
549
550 <target name="update-packages" depends="init,cvsupdate-packages,configure-packages,clean-packages,compile-packages"
551 description="Update only the packages"/>
552
553 <target name="cvsupdate-packages">
554 <cvs command="update -dP" dest="${packages.home}"/>
555 </target>
556
557 <target name="configure-packages" description="Configure only the packages.">
558 <echo>
559 Configuring MG
560 </echo>
561 <exec executable="configure" os="Linux"
562 dir="${mg.home}">
563 <arg value="--prefix=${basedir}"/>
564 </exec>
565 <echo>
566 Configuring MGPP
567 </echo>
568 <exec executable="configure" os="Linux"
569 dir="${mgpp.home}">
570 <arg value="--prefix=${basedir}"/>
571 </exec>
572 </target>
573
574 <target name="clean-packages"
575 description="Clean only the packages">
576 <!-- mg -->
577 <exec executable="make" os="Linux"
578 dir="${mg.home}">
579 <arg value="clean"/>
580 </exec>
581 <delete dir="${mg.home}/java/classes"/>
582 <delete file="${mg.home}/java/mg.jar"/>
583 <delete file="${mg.home}/jni/org_greenstone_mg_MGWrapper.h"/>
584 <delete file="${mg.home}/jni/org_greenstone_mg_MGPassesWrapper.h"/>
585 <!-- mgpp -->
586 <exec executable="make" os="Linux"
587 dir="${mg.home}">
588 <arg value="clean"/>
589 </exec>
590 <delete dir="${mgpp.home}/java/classes"/>
591 <delete file="${mgpp.home}/java/mgpp.jar"/>
592 <delete file="${mgpp.home}/jni/org_greenstone_mgpp_MGPPWrapper.h"/>
593 <delete file="${mgpp.home}/jni/org_greenstone_mgpp_MGPPPassesWrapper.h"/>
594 <!-- vishnu -->
595 <delete dir="${vishnu.home}/src/classes"/>
596 <delete file="${vishnu.home}/src/vishnu.jar"/>
597
598 <!-- gsdl-as : just call the ant target-->
599 <ant antfile="${gsdl-as.home}/build.xml" dir="${gsdl-as.home}"
600 inheritall="false" target="clean"/>
601 </target>
602
603 <target name="compile-packages"
604 description="Compile only the packages">
605 <!-- mg -->
606 <echo>Compiling MG</echo>
607 <!-- c code -->
608 <!-- javacode -->
609 <mkdir dir="${mg.home}/java/classes"/>
610 <javac srcdir="${mg.home}/java"
611 destdir="${mg.home}/java/classes"
612 debug="${compile.debug}"
613 deprecation="${compile.deprecation}"
614 optimize="${compile.optimize}">
615 </javac>
616 <javah classpath="${mg.home}/java/classes"
617 destdir="${mg.home}/jni">
618 <class name="org.greenstone.mg.MGWrapper"/>
619 <class name="org.greenstone.mg.MGPassesWrapper"/>
620 </javah>
621 <jar destfile="${mg.home}/java/mg.jar">
622 <fileset dir="${mg.home}/java/classes"/>
623 <manifest>
624 <attribute name="Built-By" value="${user.name}" />
625 </manifest>
626 </jar>
627 <copy file="${mg.home}/java/mg.jar" todir="${javalib}"/>
628 <!-- make the c code -->
629 <exec executable="make" os="Linux"
630 dir="${mg.home}">
631 </exec>
632 <exec executable="make" os="Linux"
633 dir="${mg.home}">
634 <arg value="install"/>
635 </exec>
636
637 <!-- mgpp -->
638 <echo>Compiling MGPP</echo>
639 <!-- javacode -->
640 <mkdir dir="${mgpp.home}/java/classes"/>
641 <javac srcdir="${mgpp.home}/java"
642 destdir="${mgpp.home}/java/classes"
643 debug="${compile.debug}"
644 deprecation="${compile.deprecation}"
645 optimize="${compile.optimize}">
646 </javac>
647 <javah classpath="${mgpp.home}/java/classes"
648 destdir="${mgpp.home}/jni">
649 <class name="org.greenstone.mgpp.MGPPWrapper"/>
650 <class name="org.greenstone.mgpp.MGPPPassesWrapper"/>
651 </javah>
652 <jar destfile="${mgpp.home}/java/mgpp.jar">
653 <fileset dir="${mgpp.home}/java/classes"/>
654 <manifest>
655 <attribute name="Built-By" value="${user.name}" />
656 </manifest>
657 </jar>
658 <copy file="${mgpp.home}/java/mgpp.jar" todir="${javalib}"/>
659 <!-- c++ code -->
660 <exec executable="make" os="Linux"
661 dir="${mgpp.home}">
662 </exec>
663 <exec executable="make" os="Linux"
664 dir="${mgpp.home}">
665 <arg value="install"/>
666 </exec>
667
668 <!-- vishnu -->
669 <echo>Compiling Vishnu</echo>
670 <mkdir dir="${vishnu.home}/classes"/>
671 <javac srcdir="${vishnu.home}/src"
672 destdir="${vishnu.home}/classes"
673 debug="${compile.debug}"
674 deprecation="${compile.deprecation}"
675 optimize="${compile.optimize}">
676 <classpath>
677 <path refid="compile.classpath"/>
678 <pathelement location="${mg.home}/java/mg.jar"/>
679 </classpath>
680 </javac>
681 <jar destfile="${vishnu.home}/vishnu.jar">
682 <fileset dir="${vishnu.home}/classes"/>
683 <manifest>
684 <attribute name="Built-By" value="${user.name}" />
685 </manifest>
686 </jar>
687 <copy file="${vishnu.home}/vishnu.jar" todir="${javalib}"/>
688 <copy file="${vishnu.home}/vishnu.jar" todir="${web.lib}"/>
689 <mkdir dir="${web.classes}/vishnu/server"/>
690 <copy file="${vishnu.home}/classes/vishnu/server/VisServlet.class"
691 todir="${web.classes}/vishnu/server"/>
692
693 <!-- gsdl-as -->
694 <echo>Compiling GSDL-AS</echo>
695 <ant antfile="${gsdl-as.home}/build.xml" dir="${gsdl-as.home}"
696 inheritall="false" target="compile"/>
697 </target>
698
699 <!-- ================== gs2building targets ===============-->
700
701
702 <target name="update-gs2building" if="gsdl2.islocal"
703 depends="init,cvsupdate-gs2building,configure-gs2building,clean-gs2building,compile-gs2building"
704 description="Update only the Greenstone 2 building components"/>
705
706 <target name="cvsupdate-gs2building" if="gsdl2.islocal" depends="init">
707 <cvs command="update -dP" dest="${gli.home}"/>
708 <!-- Note: can't do a -d update here cos it will get all of gsdl-->
709 <cvs command="update -P" dest="${gs2build.home}"/>
710 <!-- rename the .gs2build files - we may have gotten changes to the main
711 gsdl versions - make sure they are set back to the gs2build versions -->
712 <antcall target="rename-gs2build-files"/>
713 </target>
714
715 <target name="prepare-gs2building" depends="init,prepare-gs2build,prepare-gli" if="gsdl2.islocal">
716 <echo>checking out gs2 building stuff</echo>
717 </target>
718
719 <target name="prepare-gs2build" depends="check-cvsroot,init" if="gsdl2.islocal" unless="gs2build.present">
720 <echo>checking out gs2build</echo>
721 <cvs command="checkout -P" package="gs2build"/>
722
723 <!-- rename the .gs2build files -->
724 <antcall target="rename-gs2build-files"/>
725 </target>
726
727 <target name="rename-gs2build-files">
728 <copy file="${gs2build.home}/configure.gs2build" tofile="${gs2build.home}/configure"/>
729 <chmod file="${gs2build.home}/configure" perm="a+x"/>
730 <copy file="${gs2build.home}/configure.in.gs2build" tofile="${gs2build.home}/configure.in"/>
731 <copy file="${gs2build.home}/Makefile.in.gs2build" tofile="${gs2build.home}/Makefile.in"/>
732 <copy file="${gs2build.home}/packages/configure.gs2build" tofile="${gs2build.home}/packages/configure"/>
733 <chmod file="${gs2build.home}/packages/configure" perm="a+x"/>
734 <copy file="${gs2build.home}/packages/Makefile.gs2build" tofile="${gs2build.home}/packages/Makefile"/>
735 <copy file="${gs2build.home}/lib/Makefile.in.gs2build" tofile="${gs2build.home}/lib/Makefile.in"/>
736
737 </target>
738 <target name="prepare-gli" depends="check-cvsroot,init" if="gsdl2.islocal" unless="gli.present">
739 <echo>checking out gli</echo>
740 <cvs command="checkout -P" package="gli"/>
741 </target>
742
743 <target name="configure-gs2building" if="gsdl2.islocal"
744 description="Configure only the Greenstone 2 building components">
745 <exec executable="${gs2build.home}/configure" os="${os.linux}"
746 dir="${gs2build.home}">
747 <arg value="--prefix=${gs2build.home}"/>
748 </exec>
749 </target>
750
751 <target name="clean-gs2building" depends="init" if="gsdl2.islocal"
752 description="Clean only the Greenstone 2 building components">
753 <!-- gli -->
754 <property name="gli.home" value="${basedir}/gli"/>
755 <!-- linux -->
756 <exec executable="clean.sh" os="${os.linux}" dir="${gli.home}"
757 resolveExecutable="true"/>
758 <!-- windows -->
759 <exec executable="clean.bat" os="${os.windows}" dir="${gli.home}"
760 resolveExecutable="true"/>
761 <!-- gs2build -->
762 <!--linux: -->
763 <exec executable="make" os="${os.linux}" dir="${gs2build.home}">
764 <arg value="clean"/>
765 </exec>
766 <!-- windows: -->
767 </target>
768
769 <target name="compile-gs2building" depends="init" if="gsdl2.islocal"
770 description="Compile only the Greenstone 2 building components">
771 <!-- gli -->
772 <property name="gli.home" value="${basedir}/gli"/>
773 <!-- linux -->
774 <exec executable="makegli.sh" os="${os.linux}" dir="${gli.home}"
775 resolveExecutable="true"/>
776 <!-- windows -->
777 <exec executable="makegli.bat" os="${os.windows}" dir="${gli.home}"
778 resolveExecutable="true"/>
779 <!-- gs2build -->
780 <!--linux: make, make install -->
781 <exec executable="make" os="${os.linux}" dir="${gs2build.home}">
782 </exec>
783 <exec executable="make" os="${os.linux}" dir="${gs2build.home}">
784 <arg value="install"/>
785 </exec>
786
787 <!-- windows: -->
788 </target>
789
790
791<!-- ============ running targets ========================-->
792
793 <target name="setup-catalina-ant-tasks">
794 <!-- Configure the custom Ant tasks for the Tomcat Manager application -->
795 <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"
796 classpath="${catalina.home}/server/lib/catalina-ant.jar"/>
797 <taskdef name="list" classname="org.apache.catalina.ant.ListTask"
798 classpath="${catalina.home}/server/lib/catalina-ant.jar"/>
799 <taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask"
800 classpath="${catalina.home}/server/lib/catalina-ant.jar"/>
801 <taskdef name="resources" classname="org.apache.catalina.ant.ResourcesTask"
802 classpath="${catalina.home}/server/lib/catalina-ant.jar"/>
803 <taskdef name="roles" classname="org.apache.catalina.ant.RolesTask"
804 classpath="${catalina.home}/server/lib/catalina-ant.jar"/>
805 <taskdef name="start" classname="org.apache.catalina.ant.StartTask"
806 classpath="${catalina.home}/server/lib/catalina-ant.jar"/>
807 <taskdef name="stop" classname="org.apache.catalina.ant.StopTask"
808 classpath="${catalina.home}/server/lib/catalina-ant.jar"/>
809 <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"
810 classpath="${catalina.home}/server/lib/catalina-ant.jar"/>
811 </target>
812
813 <target name="gli" description="Run the Greenstone Librarian Interface" depends="gli-local,gli-external">
814 <echo>Running GLI from Ant means that you don't get to see any of the terminal output. If you have problems with GLI and want to see the output, please run the script gli4gs3.sh/bat from the gsdl3/gli directory.
815 </echo>
816 </target>
817
818 <target name="gli-local" depends="init" if="gsdl2.islocal">
819 <exec executable="${basedir}/gli/gli4gs3.sh" os="${os.linux}" dir="${basedir}/gli" spawn="true">
820 <env key="GSDLHOME" path="${basedir}/gs2build"/>
821 <env key="GSDL3HOME" value="${basedir}"/>
822 </exec>
823 <exec executable="${basedir}/gli/gli4gs3.bat" os="${os.windows}" dir="${basedir}/gli" spawn="true">
824 <env key="GSDLHOME" value="${basedir}/gs2build"/>
825 <env key="GSDL3HOME" value="${basedir}"/>
826 </exec>
827 </target>
828
829 <target name="gli-external" depends="init" unless="gsdl2.islocal">
830 <exec executable="${gsdl.path}/gli/gli4gs3.sh" os="${os.linux}" dir="${gsdl.path}/gli"/>
831 <exec executable="${gsdl.path}/gli/gli4gs3.bat" os="${os.windows}" dir="${gsdl.path}/gli"/>
832 </target>
833
834
835 <target name="reload" description="Reload web application"
836 depends="init,setup-catalina-ant-tasks">
837 <reload url="http://kanuka:7070/manager" username="admin" password="admin"
838 path="/gsdl3"/>
839 </target>
840
841 <target name="startup" description="Startup the (local) Greenstone servers (tomcat,mysql...)" depends="init,startup-mysql,startup-tomcat"/>
842
843 <target name="startup-tomcat" description="Startup only Tomcat" depends="init" if="tomcat.islocal">
844 <property name="tomcat.classpath" refid="compile.classpath"/>
845 <property name="tomcat.path" value="${basedir}/packages/mysql/bin:${basedir}/bin/script:${basedir}/bin:${env.PATH}"/>
846 <property name="catalina.opts" value="-Djava.util.prefs.syncInterval=2000000 -DGSDL3HOME=$GSDL3HOME -DGSDLOS=$GSDLOS -DPATH=$PATH -Xmx400M"/>
847 <exec executable="${catalina.home}/bin/startup.sh" os="${os.linux}" dir="${catalina.home}/bin" spawn="false">
848 <env key="GSDLOS" value="linux"/>
849 <env key="GSDL3HOME" value="${basedir}"/>
850 <env key="PATH" path="${tomcat.path}"/>
851 <env key="CATALINA_OPTS" value="${catalina.opts}"/>
852 <env key="CLASSPATH" path="${tomcat.classpath}"/>
853 <env key="LD_LIBRARY_PATH" path="${env.LD_LIBRARY_PATH}:${basedir}/lib:${mysql.home}/lib/mysql"/>
854 </exec>
855 <exec executable="${catalina.home}/bin/startup.bat" os="${os.windows}" dir="${catalina.home}/bin" spawn="false">
856 <env key="GSDLOS" value="windows"/>
857 <env key="GSDL3HOME" value="${basedir}"/>
858 <env key="PATH" path="${tomcat.path}:${basedir}/lib"/>
859 <env key="CATALINA_OPTS" value="${catalina.opts}"/>
860 <env key="CLASSPATH" path="${tomcat.classpath}"/>
861 </exec>
862 <!-- wait for the server to startup in case other targets need it running -->
863 <waitfor maxwait="5" maxwaitunit="second">
864 <and>
865 <socket server="${tomcat.server}" port="${tomcat.port}"/>
866 <http url="http://${tomcat.server}:${tomcat.port}/gsdl3/index.html"/>
867 </and>
868 </waitfor>
869 </target>
870 <!-- windows:
871 set CATALINA_HOME=%GSDL3HOME%\comms\jakarta\tomcat
872set CATALINA_OPTS="-Djava.util.prefs.syncInterval=2000000 -DGSDL3HOME=%GSDL3HOME% -DGSDLOS=%GSDLOS% -DPATH=%PATH%"
873 call "%GSDL3HOME%\comms\jakarta\tomcat\bin\startup.bat"
874 # launch a web browser
875 start http://localhost:8080/gsdl3
876
877-->
878 <target name="shutdown" depends="init,shutdown-tomcat,shutdown-mysql" description="Shutdown the (local) Greenstone servers."/>
879
880 <target name="shutdown-tomcat" description="Shutdown only Tomcat" depends="init" if="tomcat.islocal">
881 <exec executable="${catalina.home}/bin/shutdown.sh" os="${os.linux}" dir="${catalina.home}/bin" spawn="false"/>
882 <!-- windows:
883
884 call "%GSDL3HOME%\comms\jakarta\tomcat\bin\shutdown.bat"
885-->
886 </target>
887
888 <target name="restart" description="Shutdown and restart the Greenstone servers" depends="init,shutdown,startup"/>
889 <target name="restart-tomcat" description="Shutdown and restart only Tomcat" depends="init,shutdown-tomcat,startup-tomcat"/>
890 <target name="restart-mysql" description="Shutdown and restart only mysql" depends="init,shutdown-mysql,startup-mysql"/>
891
892 <target name="test" description="Run the (incomplete) JUnit test suite "
893 depends="init">
894 <mkdir dir="${basedir}/test"/>
895 <junit printsummary="withOutAndErr"
896 errorproperty="test.failed"
897 failureproperty="test.failed"
898 fork="${junit.fork}">
899 <formatter type="plain"/>
900 <classpath>
901 <pathelement location="${build.home}/gsdl3test.jar"/>
902 <path refid="compile.classpath"/>
903 </classpath>
904 <test name="${testcase}" if="testcase"/>
905 <batchtest todir="${basedir}/test" unless="testcase">
906 <fileset dir="${build.home}"
907 includes="**/*Test.class"
908 />
909 </batchtest>
910 </junit>
911 <echo>
912 *********************************************
913 Test output can be found in directory 'test'
914 *********************************************
915 </echo>
916 </target>
917
918 <target name="compile-extra" depends="init">
919 <javac srcdir="${web.home}/WEB-INF/classes"
920 destdir="${web.home}/WEB-INF/classes"
921 debug="${compile.debug}"
922 deprecation="${compile.deprecation}"
923 optimize="${compile.optimize}">
924 <classpath>
925 <path refid="compile.classpath"/>
926 </classpath>
927 </javac>
928 </target>
929
930 <target name="get-sitename">
931 <input addproperty="axis.sitename" message="What site? (press enter for default:localsite)" defaultvalue="localsite"/>
932 <condition property="deploy.exists">
933 <available file="${basedir}/resources/soap/${axis.sitename}.wsdd"/>
934 </condition>
935 <condition property="undeploy.exists">
936 <available file="${basedir}/resources/soap/undeploy-${axis.sitename}.wsdd"/>
937 </condition>
938 <echo>${axis.sitename}, ${deploy.exists}, ${undeploy.exists}</echo>
939 </target>
940
941 <target name="get-siteuri" depends="get-sitename">
942 <input addproperty="axis.siteuri" message="What name do you want the service to have? (press enter for default:${axis.sitename})" defaultvalue="${axis.sitename}"/>
943 <echo>${axis.sitename}, ${axis.siteuri}</echo>
944 </target>
945 <target name="create-deployment-files" depends="get-sitename"
946 if="axis.sitename" unless="deploy.exists">
947 <filter token="sitename" value="${axis.sitename}"/>
948 <filter token="siteuri" value="${axis.siteuri}"/>
949 <copy file="${basedir}/resources/soap/site.wsdd.template"
950 tofile="${basedir}/resources/soap/${axis.sitename}.wsdd"
951 filtering="true"/>
952 <copy file="${basedir}/resources/soap/undeploy-site.wsdd.template"
953 tofile="${basedir}/resources/soap/undeploy-${axis.sitename}.wsdd"
954 filtering="true"/>
955 <!-- create the java files and compile them -->
956 <copy file="${gsdl3.home}/SOAPServer.java.in"
957 tofile="${gsdl3.home}/SOAPServer${axis.sitename}.java"
958 filtering="true"/>
959 <javac srcdir="${src.home}"
960 destdir="${build.home}"
961 debug="${compile.debug}"
962 deprecation="${compile.deprecation}"
963 optimize="${compile.optimize}">
964 <classpath refid="compile.classpath"/>
965 <include name="org/greenstone/gsdl3/SOAPServer${axis.sitename}.java" />
966 </javac>
967 <jar destfile="${build.home}/gsdl3.jar">
968 <fileset dir="${build.home}">
969 <include name="org/greenstone/gsdl3/**"/>
970 <exclude name="**/Test.class"/>
971 </fileset>
972 <manifest>
973 <attribute name="Built-By" value="${user.name}" />
974 </manifest>
975 </jar>
976 <copy file="${build.home}/gsdl3.jar" todir="${javalib}"/>
977 <copy file="${build.home}/gsdl3.jar" todir="${web.lib}"/>
978 </target>
979
980 <target name="soap-deploy-site" depends="get-sitename,get-siteuri,create-deployment-files,restart-tomcat"
981 description="Deploy a SOAP web service for a local Greenstone site">
982 <java classname="org.apache.axis.client.AdminClient">
983 <classpath refid="compile.classpath"/>
984 <arg value="-p"/>
985 <arg value="${tomcat.port}"/>
986 <arg file="${basedir}/resources/soap/${axis.sitename}.wsdd"/>
987 </java>
988 </target>
989
990 <target name="soap-undeploy-site" depends="get-sitename"
991 description="Undeploy a SOAP web service for a local Greenstone site">
992 <java classname="org.apache.axis.client.AdminClient">
993 <classpath refid="compile.classpath"/>
994 <arg value="-p"/>
995 <arg value="${tomcat.port}"/>
996 <arg file="${basedir}/resources/soap/undeploy-${axis.sitename}.wsdd"/>
997 </java>
998 </target>
999
1000 <!-- mysql targets -->
1001 <!-- windows:
1002 cd %GSDL3HOME%\packages\mysql
1003 start bin\mysqld
1004 cd %GSDL3HOME%
1005-->
1006 <target name="startup-mysql" depends="init" if="mysql.islocal"
1007 description="Startup only mysql">
1008 <exec executable="${mysql.home}/bin/mysqld_safe" dir="${mysql.home}"
1009 spawn="true">
1010 <arg value="--user=root"/>
1011 <arg value="--datadir=./data"/>
1012 <arg value="--basedir=."/>
1013 <arg value="--pid_file=gsdl3.pid"/>
1014 <arg value="--socket=/tmp/mysql.sock"/>
1015 <arg value="--err-log=./var/log/mysql.log"/>
1016 </exec>
1017 <sleep seconds="2"/>
1018 <!-- need to test that the server has started up -->
1019 <exec executable="${mysql.home}/bin/mysql" dir="${mysql.home}"
1020 failonerror="true" outputproperty="throw.away">
1021 <arg value="--user=root"/>
1022 <arg value="--execute=show databases;"/>
1023 </exec>
1024 <echo>MYSQL database server started successfully</echo>
1025 </target>
1026
1027 <target name="shutdown-mysql" depends="init" if="mysql.islocal"
1028 description="Shutdown only mysql">
1029 <exec executable="${mysql.home}/bin/mysqladmin" dir="${mysql.home}"
1030 failonerror="true" os="${os.linux}">
1031 <arg value="--user=root"/>
1032 <arg value="--socket=/tmp/mysql.sock"/>
1033 <arg value="shutdown"/>
1034 </exec>
1035 <exec executable="${mysql.home}/bin/mysqladmin" dir="${mysql.home}"
1036 failonerror="true" os="${os.windows}">
1037 <arg value="--user=root"/>
1038 <arg value="shutdown"/>
1039 </exec>
1040 <echo>MYSQL database server shutdown successfully</echo>
1041 </target>
1042
1043</project>
1044
1045
Note: See TracBrowser for help on using the repository browser.