2
<xsl:stylesheet version="1.0"
3
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
5
<xsl:output indent="yes"
8
<xsl:variable name="build" select="'${build.dir}'"/>
9
<xsl:template match="/">
11
<xmlproperty file="version.xml"/>
12
<property name="build.dir" value="${{basedir}}/build"/>
13
<property name="javacc.dir" value="lib"/>
14
<property name="ant.build.javac.source" value="1.5"/>
15
<property name="ant.build.javac.target" value="1.5"/>
16
<taskdef name="testng" classname="org.testng.TestNGAntTask">
18
<pathelement location="lib/testng.jar"/>
21
<target name="dummy"/>
23
<mkdir dir="{$build}"/>
25
<xsl:for-each select="modules/module">
26
<xsl:apply-templates select="document(concat('mod/', .,'/mod.xml'), .)/module">
27
<xsl:with-param name="name" select="string(.)"/>
28
<xsl:with-param name="root" select="/"/>
29
</xsl:apply-templates>
32
<xsl:attribute name="depends">
33
<xsl:text>init</xsl:text>
34
<xsl:for-each select="modules/module">
35
<xsl:for-each select="document(concat('mod/', .,'/mod.xml'), .)/module/ant/@precompile">
36
<xsl:text>,</xsl:text>
37
<xsl:value-of select="."/>
42
<target name="compile" depends="mod.jing.compile-main,mod.trang.compile-main"/>
43
<target name="jar" depends="mod.dtdinst.jar,mod.jing.jar,mod.trang.jar"/>
44
<target name="srczip" depends="mod.dtdinst.srczip,mod.jing.srczip,mod.trang.srczip"/>
45
<target name="jing-jar" depends="mod.jing.jar">
46
<taskdef name="jing" classname="com.thaiopensource.relaxng.util.JingTask">
48
<pathelement location="{$build}/jing.jar"/>
54
<xsl:attribute name="depends">
55
<xsl:text>init</xsl:text>
56
<xsl:for-each select="modules/module">
57
<xsl:text>,mod.</xsl:text>
58
<xsl:value-of select="."/>
59
<xsl:text>.test</xsl:text>
63
<target name="services">
64
<xsl:attribute name="depends">
65
<xsl:text>init</xsl:text>
66
<xsl:for-each select="modules/module">
67
<xsl:text>,mod.</xsl:text>
68
<xsl:value-of select="."/>
69
<xsl:text>.services</xsl:text>
77
<xsl:template match="*"/>
79
<xsl:template match="module">
80
<xsl:param name="name"/>
81
<xsl:param name="root"/>
82
<xsl:copy-of select="ant/*"/>
83
<target name="mod.{$name}.compile-main">
84
<xsl:attribute name="depends">
85
<xsl:text>init</xsl:text>
86
<xsl:if test="ant/@precompile">
87
<xsl:text>,</xsl:text>
88
<xsl:value-of select="ant/@precompile"/>
90
<xsl:if test="ant/@rescompile">
91
<xsl:text>,</xsl:text>
92
<xsl:value-of select="ant/@rescompile"/>
94
<xsl:for-each select="depends[@module]">
95
<xsl:text>,mod.</xsl:text>
96
<xsl:value-of select="@module"/>
97
<xsl:text>.compile-main</xsl:text>
100
<mkdir dir="{$build}/mod/{$name}/classes/main"/>
101
<xsl:if test="compile">
102
<javac destdir="{$build}/mod/{$name}/classes/main" debug="true" debuglevel="lines,source">
104
<pathelement location="mod/{$name}/src/main"/>
105
<xsl:if test="ant/@precompile">
106
<pathelement location="{$build}/mod/{$name}/gensrc/main"/>
110
<xsl:for-each select="depends[@module]">
111
<pathelement location="{$build}/mod/{@module}/classes/main"/>
113
<xsl:for-each select="depends[@lib]">
114
<pathelement location="lib/{@lib}.jar"/>
118
<copy todir="{$build}/mod/{$name}/classes/main">
119
<fileset dir="mod/{$name}/src/main" includes="**/resources/*"/>
122
<xsl:if test="version">
123
<xsl:variable name="resdir"
124
select="concat($build, '/mod/', $name, '/classes/main/',
125
version/@package, '/resources')"/>
126
<mkdir dir="{$resdir}"/>
127
<echo file="{$resdir}/Version.properties" message="version=${{version}}
"/>
130
<target name="mod.{$name}.compile-test">
131
<xsl:attribute name="depends">
132
<xsl:text>mod.</xsl:text>
133
<xsl:value-of select="$name"/>
134
<xsl:text>.compile-main</xsl:text>
135
<xsl:for-each select="depends[@module]">
136
<xsl:text>,mod.</xsl:text>
137
<xsl:value-of select="@module"/>
138
<xsl:text>.compile-test</xsl:text>
141
<mkdir dir="{$build}/mod/{$name}/classes/test"/>
142
<xsl:if test="compile[@test]">
143
<javac destdir="{$build}/mod/{$name}/classes/test" debug="true">
145
<pathelement location="mod/{$name}/src/test"/>
148
<pathelement location="{$build}/mod/{$name}/classes/main"/>
149
<xsl:for-each select="depends[@module]">
150
<pathelement location="{$build}/mod/{@module}/classes/test"/>
151
<pathelement location="{$build}/mod/{@module}/classes/main"/>
153
<xsl:for-each select="depends[@lib]">
154
<pathelement location="lib/{@lib}.jar"/>
156
<xsl:if test="test[@type='testng']">
157
<pathelement location="lib/testng.jar"/>
163
<target name="mod.{$name}.jar" depends="mod.{$name}.compile-main">
164
<jar jarfile="{$build}/{$name}.jar" duplicate="fail">
165
<xsl:apply-templates select="jar/*" mode="jar">
166
<xsl:with-param name="root" select="$root"/>
167
</xsl:apply-templates>
168
<xsl:if test="compile">
169
<fileset dir="{$build}/mod/{$name}/classes/main" includes="**/*.class,**/resources/*"/>
171
<xsl:for-each select="depends[@module]">
172
<fileset dir="{$build}/mod/{@module}/classes/main" includes="**/*.class,**/resources/*"/>
176
<target name="mod.{$name}.srczip">
177
<xsl:attribute name="depends">
178
<xsl:text>init</xsl:text>
179
<xsl:if test="ant/@precompile">
180
<xsl:text>,</xsl:text>
181
<xsl:value-of select="ant/@precompile"/>
183
<xsl:for-each select="depends[@module]">
184
<xsl:for-each select="document(concat('mod/', @module,'/mod.xml'), $root)/module/ant/@precompile">
185
<xsl:text>,</xsl:text>
186
<xsl:value-of select="."/>
190
<zip zipfile="{$build}/mod/{$name}/src.zip">
191
<xsl:apply-templates select="." mode="src-fileset">
192
<xsl:with-param name="name" select="$name"/>
193
</xsl:apply-templates>
194
<xsl:for-each select="depends[@module]">
195
<xsl:apply-templates select="document(concat('mod/', @module,'/mod.xml'), $root)/module"
197
<xsl:with-param name="name" select="@module"/>
198
</xsl:apply-templates>
202
<target name="mod.{$name}.test">
203
<xsl:attribute name="depends">
204
<xsl:text>dummy</xsl:text>
205
<xsl:for-each select="test">
206
<xsl:text>,mod.</xsl:text>
207
<xsl:value-of select="$name"/>
208
<xsl:text>.test-</xsl:text>
209
<xsl:value-of select="@name"/>
213
<xsl:apply-templates select="test">
214
<xsl:with-param name="name" select="$name"/>
215
</xsl:apply-templates>
216
<target name="mod.{$name}.services">
217
<xsl:for-each select="service">
218
<mkdir dir="{$build}/mod/{$name}/classes/main/META-INF/services"/>
219
<delete file="{$build}/mod/{$name}/classes/main/META-INF/services/{@type}"
221
failonerror="false"/>
222
<xsl:for-each select="provider">
223
<echo file="{$build}/mod/{$name}/classes/main/META-INF/services/{../@type}"
225
message="{@classname}${{line.separator}}"/>
231
<xsl:template match="module" mode="src-fileset">
232
<xsl:param name="name"/>
233
<xsl:if test="compile">
234
<fileset dir="mod/{$name}/src/main" includes="**/*.java"/>
235
<xsl:if test="ant/@precompile">
236
<fileset dir="{$build}/mod/{$name}/gensrc/main" includes="**/*.java"/>
241
<xsl:template match="test[@type='validate']">
242
<xsl:param name="name"/>
243
<xsl:call-template name="split-test">
244
<xsl:with-param name="name" select="$name"/>
245
<xsl:with-param name="class">com.thaiopensource.relaxng.util.TestDriver</xsl:with-param>
246
<xsl:with-param name="split">test/split.xsl</xsl:with-param>
247
<xsl:with-param name="app">jing</xsl:with-param>
251
<xsl:template match="test[@type='convert']">
252
<xsl:param name="name"/>
253
<xsl:call-template name="split-test">
254
<xsl:with-param name="name" select="$name"/>
255
<xsl:with-param name="class">com.thaiopensource.relaxng.translate.test.CompactTestDriver</xsl:with-param>
256
<xsl:with-param name="split">trang/test/compactsplit.xsl</xsl:with-param>
257
<xsl:with-param name="app">trang</xsl:with-param>
261
<xsl:template name="split-test">
262
<xsl:param name="name"/>
263
<xsl:param name="class"/>
264
<xsl:param name="split"/>
265
<xsl:param name="app"/>
266
<xsl:variable name="runtestdir">
267
<xsl:value-of select="$build"/>
268
<xsl:text>/mod/</xsl:text>
269
<xsl:value-of select="$name"/>
270
<xsl:text>/test-</xsl:text>
271
<xsl:value-of select="@name"/>
273
<xsl:variable name="srctestdir">
274
<xsl:text>mod/</xsl:text>
275
<xsl:value-of select="$name"/>
276
<xsl:text>/test</xsl:text>
278
<xsl:variable name="srctest">
280
<xsl:when test="@in">
281
<xsl:value-of select="@in"/>
284
<xsl:value-of select="concat($srctestdir,'/',@name,'test.xml')"/>
288
<target name="mod.{$name}.test-{@name}"
289
depends="mod.{$name}.compile-test,mod.{$app}.jar,mod.{$name}.split-{@name}">
290
<java classname="{$class}"
293
<arg value="{$runtestdir}/out.log"/>
294
<arg value="{$runtestdir}"/>
295
<xsl:if test="@output">
296
<arg value="{@output}"/>
299
<pathelement location="{$build}/{$app}.jar"/>
301
<pathelement location="lib/{@lib}.jar"/>
302
<xsl:if test="@lib='xalan'">
303
<pathelement location="lib/serializer.jar"/>
306
<xsl:if test="$app = 'jing'">
307
<pathelement location="lib/xercesImpl.jar"/>
312
<target name="mod.{$name}.split-{@name}"
313
depends="mod.{$name}.uptodate-split-{@name},jing-jar"
314
unless="mod.{$name}.uptodate-split-{@name}">
315
<xsl:if test="@schema">
316
<jing rngfile="{@schema}" file="{$srctest}">
317
<xsl:if test="substring(@schema, string-length(@schema) - 3, 4) = '.rnc'">
318
<xsl:attribute name="compactsyntax">true</xsl:attribute>
322
<delete dir="{$runtestdir}"/>
323
<mkdir dir="{$runtestdir}"/>
324
<xsl:if test="@transform">
325
<xslt style="{$srctestdir}/{@transform}"
327
out="{$runtestdir}/{@name}test.xml">
328
<factory name="com.icl.saxon.TransformerFactoryImpl"/>
330
<!-- XXX Could validate intermediate result against a schema -->
332
<xslt style="{$split}"
333
out="{$runtestdir}/stamp">
334
<xsl:attribute name="in">
336
<xsl:when test="@transform">
337
<xsl:value-of select="concat($runtestdir, '/',@name,'test.xml')"/>
340
<xsl:value-of select="$srctest"/>
344
<factory name="com.icl.saxon.TransformerFactoryImpl"/>
345
<param name="dir" expression="{$runtestdir}"/>
348
<target name="mod.{$name}.uptodate-split-{@name}">
349
<!-- XXX include split.xsl in source files -->
350
<uptodate property="mod.{$name}.uptodate-split-{@name}"
351
targetfile="{$runtestdir}/stamp"
352
srcfile="{$srctest}"/>
356
<xsl:template match="test[@type='java']">
357
<xsl:param name="name"/>
358
<target name="mod.{$name}.test-{@name}" depends="mod.{$name}.compile-test">
359
<mkdir dir="{$build}/mod/{$name}/test-{@name}"/>
360
<java classname="{@class}"
363
<xsl:copy-of select="*"/>
365
<pathelement location="{$build}/mod/{$name}/classes/test"/>
366
<pathelement location="{$build}/mod/{$name}/classes/main"/>
367
<pathelement location="mod/{$name}/src/test"/>
368
<pathelement location="mod/{$name}/src/main"/>
369
<xsl:for-each select="../depends[@module]">
370
<pathelement location="{$build}/mod/{@module}/classes/test"/>
371
<pathelement location="{$build}/mod/{@module}/classes/main"/>
372
<pathelement location="mod/{@module}/src/test"/>
373
<pathelement location="mod/{@module}/src/main"/>
375
<xsl:for-each select="../depends[@lib]">
376
<pathelement location="lib/{@lib}.jar"/>
383
<xsl:template match="test[@type='testng']">
384
<xsl:param name="name"/>
385
<target name="mod.{$name}.test-{@name}" depends="mod.{$name}.compile-test">
386
<mkdir dir="{$build}/mod/{$name}/test-{@name}"/>
387
<testng workingDir="{$build}/mod/{$name}/test-{@name}"
388
outputdir="{$build}/mod/{$name}/test-{@name}/report"
390
suiteName="mod.{$name}.test-{@name}"
391
listeners="org.testng.reporters.DotTestListener">
392
<classfileset dir="{$build}/mod/{$name}/classes/test" includes="**/*.class"/>
394
<pathelement location="{$build}/mod/{$name}/classes/test"/>
395
<pathelement location="{$build}/mod/{$name}/classes/main"/>
396
<pathelement location="mod/{$name}/src/test"/>
397
<pathelement location="mod/{$name}/src/main"/>
398
<xsl:for-each select="../depends[@module]">
399
<pathelement location="{$build}/mod/{@module}/classes/test"/>
400
<pathelement location="{$build}/mod/{@module}/classes/main"/>
401
<pathelement location="mod/{@module}/src/test"/>
402
<pathelement location="mod/{@module}/src/main"/>
404
<xsl:for-each select="../depends[@lib]">
405
<pathelement location="lib/{@lib}.jar"/>
412
<xsl:template match="service" mode="jar">
413
<xsl:param name="root"/>
415
<xsl:variable name="type" select="@type"/>
416
<xsl:copy-of select="@type"/>
417
<xsl:copy-of select="/module/service[@type=$type]/provider"/>
418
<xsl:for-each select="/module/depends[@module]">
419
<xsl:copy-of select="document(concat('mod/', @module, '/mod.xml'), $root)
420
/module/service[@type=$type]/provider"/>
425
<xsl:template match="*" mode="jar">
426
<xsl:param name="root"/>
428
<xsl:copy-of select="@*"/>
429
<xsl:apply-templates select="node()" mode="jar">
430
<xsl:with-param name="root" select="$root"/>
431
</xsl:apply-templates>