2 <project name="jME" default="compile">
4 Ant Build File for the jME API.
7 <!-- Since we have developers who use different tab-stop settings in their
8 editors and IDE's, please use spaces, not tabs, for indentation.
9 (Your editor or IDE has a setting to automatically change your tab
10 keystrokes into spaces). -->
12 <property file="build.properties" />
13 <!-- This is because build-import.xml uses ${name}: -->
14 <property name="name" value="${ant.project.name}"/>
16 <!-- defaults for build.properties:-->
17 <import file="build-import.xml" />
19 <property name="class" location="${build}" />
20 <property name="jars" location="${release}" />
21 <property name="webstart" location="jnlp" />
23 <property name="keyStore" value="jmeKeyStore" />
24 <property name="storepass" value="..." />
25 <property name="ftpuser" value="..." />
26 <property name="ftppassword" value="..." />
27 <property name="ftphost" value="ftp.jmonkeyengine.com" />
28 <!-- You may prefer to set javac.debug to false to reduce size. -->
29 <property name="javac.debug" value="true" />
30 <property name="javac.maxmem" value="256m" />
31 <property name="javac.source" value="1.5" />
32 <property name="javac.target" value="1.5" />
33 <!-- N.b. the .source and .target setting are NOT for source and target
34 directories, but for source and target JVM versions. -->
35 <property name="javac.debuglevel" value="lines,source" />
36 <!-- Having line numbers in debug output is useful for the 99.9%
37 of non-public builds, esp. for custom-builders who have
38 runtime problems. - blaine -->
39 <!-- end of defaults -->
42 <fileset dir="${libs}">
43 <include name="**/*.jar" />
45 <pathelement path="${class}" />
49 <echo message="${keyStore}" />
50 <mkdir dir="${src}" />
51 <mkdir dir="${class}" />
52 <mkdir dir="${data}" />
53 <mkdir dir="${doc}" />
54 <available property="_rtlp.param" value="_rtlogprops.present"
55 file="logging.properties"/>
56 <property name="_rtlp.param" value="_dummy"/>
57 <antcall target="-gen-rtlogprops">
58 <param name="${_trlp.param}" value="true"/>
62 <!-- Compiles all the jME classes, including com.jmex.* -->
63 <target name="compile" depends="init" description="generate jme classes">
64 <copy todir="${class}">
65 <fileset dir="${src}" includes="com/**" excludes="**/.*/**, **/*.java"/>
67 <javac source="${javac.source}" target="${javac.target}"
68 debuglevel="${javac.debuglevel}"
69 srcdir="${src}" destdir="${class}" includes="com/**/*.java"
70 classpathref="classpath" listfiles="no" fork="true"
71 memoryMaximumSize="${javac.maxmem}" debug="${javac.debug}"/>
74 <target name="run-testchooser" depends="compile-test" description="Runs the TestChooser">
75 <condition property="jogl.arch.suffix" value="amd64">
78 <property name="jogl.arch.suffix" value="i586"/>
79 <pathconvert property="native.libpath" setonempty="false">
80 <filelist dir="${libs}">
81 <file name="jogl/native/windows_${jogl.arch.suffix}"/>
82 <file name="jogl/native/macosx"/>
83 <file name="jogl/native/linux_${jogl.arch.suffix}"/>
84 <file name="lwjgl/native/linux"/>
85 <file name="lwjgl/native/macosx"/>
86 <file name="lwjgl/native/windows"/>
87 <file name="swt/linux"/>
88 <file name="swt/macosx-carbon"/>
89 <file name="swt/macosx-cocoa"/>
90 <file name="swt/windows"/>
93 <java classname="jmetest.TestChooser" fork="true" classpathref="classpath">
94 <jvmarg value="-Djava.library.path=${native.libpath}"/>
98 <target name="-enforce.jar.deps">
100 <srcfileset dir="build" includes="com/**"/>
101 <targetfileset dir="${jars}" excludes="**/.*/**" includes="*.jar"/>
105 <!-- Jar files for different parts of the jME API -->
107 <target name="dist-core" depends="compile, -enforce.jar.deps"
108 description="generate jme jar file">
109 <jar destfile="${jars}/jme.jar" basedir="${class}" update="no"
110 duplicate="fail" compress="true" includes="com/jme/**/*.class, com/jme/**/*.tga, com/jme/**/*.png, com/jme/**/*.gif, com/jme/**/*.vert, com/jme/**/*.frag,com/jmex/pool/**/*.class" />
112 <target name="dist-audio" depends="compile, -enforce.jar.deps"
113 description="generate jme jar file (audio)">
114 <jar destfile="${jars}/jme-audio.jar" basedir="${class}" update="no"
115 duplicate="fail" compress="true"
116 includes="com/jmex/audio/**/*.class" />
118 <target name="dist-awt" depends="compile, -enforce.jar.deps"
119 description="generate jme jar file (awt)">
120 <jar destfile="${jars}/jme-awt.jar" basedir="${class}" update="no"
121 duplicate="fail" compress="true" includes="com/jmex/awt/**/*.class" />
123 <target name="dist-swt" depends="compile, -enforce.jar.deps"
124 description="generate jme jar file (swt)">
125 <jar destfile="${jars}/jme-swt.jar" basedir="${class}" update="no"
126 duplicate="fail" compress="true" includes="com/jmex/swt/**/*.class" />
128 <target name="dist-editors" depends="compile, -enforce.jar.deps"
129 description="generate jme jar file (editors)">
130 <jar destfile="${jars}/jme-editors.jar" basedir="${class}" update="no"
131 duplicate="fail" compress="true" includes="com/jmex/editors/**/*.class" />
133 <target name="dist-effects" depends="compile, -enforce.jar.deps"
134 description="generate jme jar file (effects)">
135 <jar destfile="${jars}/jme-effects.jar" basedir="${class}" update="no"
136 duplicate="fail" compress="true"
137 includes="com/jmex/effects/**/*.class, com/jmex/effects/**/data/*" />
139 <target name="dist-font" depends="compile, -enforce.jar.deps"
140 description="generate jme jar file (font)">
141 <jar destfile="${jars}/jme-font.jar" basedir="${class}" update="no"
142 duplicate="fail" compress="true" includes="com/jmex/font2d/**/*.class, com/jmex/font3d/**/*.class, com/jmex/angelfont/**/*.class, com/jmex/angelfont/**/*.png, com/jmex/angelfont/**/*.fnt" />
144 <target name="dist-gamestates" depends="compile, -enforce.jar.deps"
145 description="generate jme jar file (gamestates)">
146 <jar destfile="${jars}/jme-gamestates.jar" basedir="${class}" update="no"
147 duplicate="fail" compress="true" includes="com/jmex/game/**/*.class" />
149 <target name="dist-model" depends="compile, -enforce.jar.deps"
150 description="generate jme jar file (model)">
151 <jar destfile="${jars}/jme-model.jar" basedir="${class}" update="no"
152 duplicate="fail" compress="true" includes="com/jmex/model/**/*.class"
153 excludes="com/jmex/model/collada/**, com/jmex/model/ogrexml/**" />
155 <target name="dist-collada" depends="compile, -enforce.jar.deps"
156 description="generate jme jar file (collada)">
157 <jar destfile="${jars}/jme-collada.jar" basedir="${class}" update="no"
158 duplicate="fail" compress="true"
159 includes="com/jmex/model/collada/*.class">
160 <zipfileset src="lib/jme-colladabinding.jar"
161 excludes="META-INF/readme.txt"/>
164 <target name="dist-scene" depends="compile, -enforce.jar.deps"
165 description="generate jme jar file (scene)">
166 <jar destfile="${jars}/jme-scene.jar" basedir="${class}" update="no"
167 duplicate="fail" compress="true" includes="com/jmex/scene/**/*.class" />
169 <target name="dist-terrain" depends="compile, -enforce.jar.deps"
170 description="generate jme jar file (terrain)">
171 <jar destfile="${jars}/jme-terrain.jar" basedir="${class}" update="no"
172 duplicate="fail" compress="true"
173 includes="com/jmex/terrain/**/*.class" />
175 <target name="dist-ogrexml" depends="compile, -enforce.jar.deps"
176 description="generate jme jar file (ogrexml)">
177 <jar destfile="${jars}/jme-ogrexml.jar" basedir="${class}" update="no"
178 duplicate="fail" compress="true"
179 includes="com/jmex/model/ogrexml/**/*.class" />
182 <!-- Creates all the jME jars -->
183 <target name="dist-all" depends="dist-core, dist-terrain, dist-ogrexml, dist-audio, dist-awt, dist-swt, dist-effects, dist-model, dist-collada, dist-editors, dist-font, dist-gamestates, dist-scene" description="Generate all jar files" />
185 <target name="webdist-all" depends="dist-all" description="sign JARs for JNLP distribution">
186 <signjar jar="${jars}/jme.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
187 <signjar jar="${jars}/jme-awt.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
188 <signjar jar="${jars}/jme-swt.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
189 <signjar jar="${jars}/jme-audio.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
190 <signjar jar="${jars}/jme-editors.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
191 <signjar jar="${jars}/jme-effects.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
192 <signjar jar="${jars}/jme-font.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
193 <signjar jar="${jars}/jme-gamestates.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
194 <signjar jar="${jars}/jme-model.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
195 <signjar jar="${jars}/jme-collada.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
196 <signjar jar="${jars}/jme-scene.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
197 <signjar jar="${jars}/jme-terrain.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
198 <signjar jar="${jars}/jme-ogrexml.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
201 <target name="doc" depends="compile"
202 description="generate the javadoc documentation">
204 <srcfileset dir="${src}/com" excludes="**/.*/**"/>
205 <targetfileset dir="${doc}"/>
207 <available property="_passname" value="_docs.uptodate"
208 file="${doc}/index.html"/>
209 <property name="_passname" value="dummy"/>
210 <antcall target="-doc">
211 <param name="${_passname}" value="true"/>
215 <!-- Generates javadoc unless param is set -->
216 <target name="-doc" unless="_docs.uptodate">
217 <delete dir="${doc}"/> <!-- The dependset leaves empty directories -->
218 <javadoc destdir="${doc}" useExternalFile="yes" author="true" version="true" use="true" package="yes" windowtitle="jME API" bottom="Copyright 2003-2010 jMonkeyEngine" maxmemory="256m">
219 <fileset dir="${src}/com" excludes="**/.*/**" includes="**/*.java" />
223 <!-- Removes all compiled files and documentation, but leaves any created jars -->
224 <target name="clean" description="clean up">
225 <delete dir="${class}" />
226 <delete dir="${doc}" />
228 <fileset dir="${src}" includes="**/*.class" />
229 <fileset dir="${release}" includes="jme*.jar" />
230 <fileset dir="${webstart}" includes="*.jar" />
234 <target name="rebuild" depends="clean, compile"
235 description="build from clean"/>
237 <!-- *** jmetest-related build targets -->
239 <target name="compile-test" depends="compile" description="generate jme test classes">
240 <javac source="${javac.source}" target="${javac.target}"
241 debuglevel="${javac.debuglevel}"
242 srcdir="${src}" destdir="${class}" includes="jmetest/**/*.java"
243 classpathref="classpath" fork="true" memoryMaximumSize="${javac.maxmem}"
244 debug="${javac.debug}"/>
245 <!-- copy the resources into the build directory -->
246 <copy todir="${class}">
247 <fileset dir="${src}" includes="jmetest/**"
248 excludes="**/.*/**, **/*.java"/>
252 <target name="dist-test" depends="dist-all, compile-test"
253 description="generate jme test class and data jars + dependent distro jars">
254 <!-- Jar the demo classes -->
256 <pathconvert property="jarclasspathlibs" pathsep=" " dirsep="/">
258 <fileset dir="${libs}">
259 <include name="*.jar" />
262 <mapper type="regexp" from=".*(lib.*)" to="\1" />
264 <pathconvert property="jarclasspathrelease" pathsep=" " dirsep="/">
266 <fileset dir="${jars}">
267 <include name="*.jar" />
268 <exclude name="jmetest.jar" />
271 <mapper type="regexp" from=".*target.(.*)" to="\1" />
273 <echo>${jarclasspathlibs} ${jarclasspathrelease}</echo>
276 <srcfileset dir="build"/>
277 <targetfileset dir="${jars}" excludes="**/.*/**" includes="jmetest*.jar"/>
280 <jar destfile="${jars}/jmetest.jar" basedir="${class}"
281 duplicate="fail" compress="true"
282 excludes="jmetest/**/data/**, com/**" index="yes">
284 <attribute name="Implementation-Title" value="${ant.project.name}" />
285 <attribute name="Implementation-Vendor" value="${vendor}" />
286 <attribute name="Version" value="${major}.${minor}" />
287 <attribute name="Class-Path" value="${jarclasspathlibs} ${jarclasspathrelease}" />
288 <attribute name="Main-Class" value="${mainclass}" />
292 <!-- Jar the demo data -->
293 <jar destfile="${jars}/jmetest-data-cursor.jar" basedir="${class}"
294 duplicate="fail" compress="true" includes="jmetest/data/cursor/**" />
295 <jar destfile="${jars}/jmetest-data-images.jar" basedir="${class}"
296 duplicate="fail" compress="true" includes="jmetest/data/images/**" />
297 <jar destfile="${jars}/jmetest-data-model.jar" basedir="${class}"
298 duplicate="fail" compress="true" includes="jmetest/data/model/**" />
299 <jar destfile="${jars}/jmetest-data-skybox1.jar" basedir="${class}"
300 duplicate="fail" compress="true" includes="jmetest/data/skybox1/**" />
301 <jar destfile="${jars}/jmetest-data-sound.jar" basedir="${class}"
302 duplicate="fail" compress="true" includes="jmetest/data/sound/**" />
303 <jar destfile="${jars}/jmetest-data-texture.jar" basedir="${class}"
304 duplicate="fail" compress="true" includes="jmetest/data/texture/**" />
307 <target name="webdist-test" depends="dist-test" description="sign test jars for Webstart distribution">
308 <signjar jar="${jars}/jmetest.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
309 <signjar jar="${jars}/jmetest-data-cursor.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
310 <signjar jar="${jars}/jmetest-data-images.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
311 <signjar jar="${jars}/jmetest-data-model.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
312 <signjar jar="${jars}/jmetest-data-skybox1.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
313 <signjar jar="${jars}/jmetest-data-sound.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
314 <signjar jar="${jars}/jmetest-data-texture.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
317 <!-- Jar and sign all the libraries required by jME -->
318 <target name="webdist-nativelibs" description="jar and sign native libraries for Webstart distribution">
320 <srcfileset dir="lib"/>
321 <targetfileset dir="${webstart}" excludes="**/.*/**" includes="*.jar"/>
324 <!-- WHY ARE ALL THE NATIVE FILES update="yes"?
325 We are specifying exactly what we want in them, so we should not be
328 <!-- Jar and sign the Windows libraries -->
329 <jar destfile="${webstart}/lwjgl-windows.jar" duplicate="fail" update="yes"
330 basedir="lib/lwjgl/native/windows" includes="lwjgl.dll" />
331 <jar destfile="${webstart}/lwjgl-windows.jar" duplicate="fail" update="yes"
332 basedir="lib/lwjgl/native/windows" includes="lwjgl64.dll" />
333 <jar destfile="${webstart}/openal-windows.jar" duplicate="fail" update="yes"
334 basedir="lib/lwjgl/native/windows" includes="OpenAL32.dll" />
335 <jar destfile="${webstart}/openal-windows.jar" duplicate="fail"
336 basedir="lib/lwjgl/native/windows" includes="OpenAL64.dll" update="yes" />
337 <jar destfile="${webstart}/jinput-windows.jar" duplicate="fail"
338 basedir="lib/lwjgl/native/windows" includes="jinput-dx8.dll" update="yes" />
339 <jar destfile="${webstart}/jinput-windows.jar" duplicate="fail"
340 basedir="lib/lwjgl/native/windows" includes="jinput-raw.dll" update="yes" />
341 <signjar jar="${webstart}/lwjgl-windows.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
342 <signjar jar="${webstart}/openal-windows.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
343 <signjar jar="${webstart}/jinput-windows.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
345 <!-- Jar and sign Linux native libraries -->
346 <jar destfile="${webstart}/lwjgl-linux.jar" duplicate="fail"
347 basedir="lib/lwjgl/native/linux" includes="liblwjgl.so" update="yes" />
348 <jar destfile="${webstart}/lwjgl-linux.jar" duplicate="fail"
349 basedir="lib/lwjgl/native/linux" includes="liblwjgl64.so" update="yes" />
350 <jar destfile="${webstart}/openal-linux.jar" duplicate="fail"
351 basedir="lib/lwjgl/native/linux" includes="libopenal.so" update="yes" />
352 <jar destfile="${webstart}/openal-linux.jar" duplicate="fail"
353 basedir="lib/lwjgl/native/linux" includes="libopenal64.so" update="yes" />
354 <jar destfile="${webstart}/jinput-linux.jar" duplicate="fail"
355 basedir="lib/lwjgl/native/linux" includes="libjinput-linux.so" update="yes" />
356 <jar destfile="${webstart}/jinput-linux.jar" duplicate="fail"
357 basedir="lib/lwjgl/native/linux" includes="libjinput-linux64.so" update="yes" />
358 <signjar jar="${webstart}/lwjgl-linux.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
359 <signjar jar="${webstart}/openal-linux.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
360 <signjar jar="${webstart}/jinput-linux.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
362 <!-- Jar (eventually) and sign Mac native libraries -->
363 <jar destfile="${webstart}/lwjgl-mac.jar" duplicate="fail"
364 basedir="lib/lwjgl/native/macosx" includes="liblwjgl.jnilib" update="yes" />
365 <jar destfile="${webstart}/jinput-mac.jar" duplicate="fail"
366 basedir="lib/lwjgl/native/macosx" includes="libjinput-osx.jnilib" update="yes" />
367 <jar destfile="${webstart}/openal-mac.jar" duplicate="fail"
368 basedir="lib/lwjgl/native/macosx" includes="openal.dylib" update="yes" />
370 <signjar jar="${webstart}/lwjgl-mac.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
371 <signjar jar="${webstart}/openal-mac.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
372 <signjar jar="${webstart}/jinput-mac.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
374 <!-- Jar (eventually) and sign Solaris native libraries -->
375 <jar destfile="${webstart}/lwjgl-solaris.jar" duplicate="fail"
376 basedir="lib/lwjgl/native/solaris" includes="liblwjgl.so" update="yes" />
377 <jar destfile="${webstart}/openal-solaris.jar" duplicate="fail"
378 basedir="lib/lwjgl/native/solaris" includes="libopenal.so" update="yes" />
380 <signjar jar="${webstart}/lwjgl-solaris.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
381 <signjar jar="${webstart}/openal-solaris.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
383 <!-- Sign the lwjgl jar -->
384 <signjar jar="lib/lwjgl/lwjgl.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
385 <signjar jar="lib/lwjgl/lwjgl_util.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
386 <signjar jar="lib/jorbis/jorbis-0.0.17.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
387 <signjar jar="lib/lwjgl/jinput.jar" alias="jme" keystore="${webstart}/${keyStore}" storepass="${storepass}" />
390 <target name="nightly" depends="webdist-all, webdist-nativelibs, webdist-test">
391 <echo>${libs}/*.jar</echo>
392 <zip zipfile="${release}/jME.zip">
393 <zipfileset dir="${libs}" prefix="lib">
394 <include name="*.jar" />
395 <include name="*.dll" />
396 <include name="*.so" />
397 <include name="*.*lib" />
399 <fileset dir="${release}">
400 <include name="*.jar" />
403 <zip zipfile="${release}/src.zip">
404 <zipfileset dir="${src}" prefix="src" excludes="**/.*/**"/>
406 <!-- <mkdir dir="ftp"/>-->
407 <!-- <copy todir="ftp">-->
408 <ftp server="${ftphost}" userid="${ftpuser}" password="${ftppassword}" remotedir="nightly">
409 <fileset dir="${webstart}">
410 <include name="*.jar" />
411 <include name="*.jnlp" />
413 <fileset dir="${libs}">
414 <include name="*.jar" />
416 <fileset dir="${release}">
417 <include name="*.jar" />
418 <include name="jME.zip" />
419 <include name="src.zip" />
425 <target name="-gen-rtlogprops" unless="_rtlogprops.present">
426 <copy file="logging-template.properties" tofile="logging.properties"/>