source: trunk/abcl/build.xml @ 14184

Last change on this file since 14184 was 14184, checked in by Mark Evenson, 8 years ago

Fix SLIME fasl location

  • Property svn:eol-style set to LF
File size: 38.9 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="antlib:org.apache.tools.ant"
3         name="abcl-master" default="abcl.wrapper" basedir=".">
4    <description>Compiling, testing, and packaging Armed Bear Common Lisp</description>
5
6    <target name="abcl" depends="abcl.wrapper"/>
7       
8    <target name="help">
9      <echo>
10Main Ant targets:
11
12 abcl.wrapper
13   -- [default] create executable wrapper for ABCL.
14 abcl.compile 
15   -- compile ABCL to ${build.classes.dir}.
16 abcl.jar     
17   -- create packaged ${abcl.jar.path}.
18 abcl.source.zip abcl.source.tar
19   -- create source distributions in ${dist.dir}.
20 abcl.clean
21   -- remove ABCL intermediate files
22      </echo>
23
24      <echo>
25For help on the automatic tests available, use the Ant target 'help.test'.
26      </echo>
27    </target>
28
29    <!-- Behavior of the build system can be customized via setting
30         properties in the 'abcl.properties' file. -->
31    <property file="abcl.properties"/>
32
33    <property name="build.dir" 
34              value="${basedir}/build"/>
35    <property name="build.classes.dir" 
36              value="${build.dir}/classes"/>
37    <property name="src.dir" 
38              value="${basedir}/src"/>
39    <property name="dist.dir" 
40              value="${basedir}/dist"/>
41    <property name="abcl.jar.path"
42              value="${dist.dir}/abcl.jar"/>
43    <property name="abcl.ext.dir"
44              value="${basedir}/ext"/>
45
46    <fail message="Please build using Ant 1.7.1 or higher.">
47        <condition>
48            <not>
49                <antversion atleast="1.7.1"/>
50            </not>
51        </condition>
52    </fail>
53
54    <!-- Checks if JSR-223 support is available - thanks to Mark Evenson -->
55    <available property="abcl.jsr-223.p"
56               classname="javax.script.ScriptEngine"/>
57
58    <patternset id="abcl.source.java">
59      <include name="org/armedbear/lisp/*.java"/>
60      <include name="org/armedbear/lisp/util/*.java"/>
61      <include name="org/armedbear/lisp/protocol/*.java"/>
62      <include name="org/armedbear/lisp/java/**/*.java"/>
63      <include name="org/armedbear/lisp/scripting/*.java" if="abcl.jsr-223.p"/>
64      <include name="org/armedbear/lisp/scripting/util/*.java" if="abcl.jsr-223.p"/>
65      <include name="org/armedbear/Main.java"/>
66    </patternset>
67
68    <patternset id="abcl.source.lisp">
69      <include name="org/armedbear/lisp/*.lisp"/>
70      <include name="org/armedbear/lisp/java/**/*.lisp"/>
71      <include name="org/armedbear/lisp/tests/*.lisp"/>
72      <exclude name="org/armedbear/lisp/j.lisp"/>
73      <include name="org/armedbear/lisp/scripting/lisp/*.lisp" if="abcl.jsr-223.p"/>
74    </patternset>
75
76    <!-- Lisp files required at runtime -->
77    <patternset id="abcl.source.lisp.dist">
78      <include name="org/armedbear/lisp/boot.lisp"/>
79      <include name="org/armedbear/lisp/scripting/lisp/*.lisp" if="abcl.jsr-223.p"/>
80      <include name="**/*.lisp" if="abcl.compile.lisp.skip"/>
81    </patternset>
82
83    <patternset id="abcl.objects">
84      <!-- "system.lisp" is dynamically created by COMPILE-fSYSTEM -->
85      <include name="org/armedbear/lisp/system.lisp"/> 
86      <include name="org/armedbear/lisp/**/*.class"/>
87      <include name="org/armedbear/lisp/**/*.cls"/> 
88      <include name="org/armedbear/lisp/**/*.abcl"/>
89      <include name="org/armedbear/lisp/version"/>
90      <include name="org/armedbear/lisp/scripting/*.class" if="abcl.jsr-223.p"/>
91      <include name="org/armedbear/lisp/scripting/util/*.class" if="abcl.jsr-223.p"/>
92      <patternset refid="abcl.source.lisp.dist"/>
93    </patternset>
94   
95    <path id="abcl.classpath.dist">
96      <pathelement location="${abcl.jar.path}"/>
97    </path>
98   
99    <path id="abcl.classpath.build">
100      <pathelement location="${build.classes.dir}"/>
101    </path>
102
103    <target name="abcl.compile" depends="abcl.clean.maybe,abcl.compile.lisp">
104      <echo>Compiled ABCL with Java version: ${java.version}</echo>
105    </target>
106
107    <target name="abcl.clean.maybe" unless="abcl.build.incremental">
108      <echo>Cleaning all intermediate compilation artifacts.</echo>
109      <echo>Setting 'abcl.build.incremental' enables incremental compilation.</echo>
110      <antcall target="abcl.clean"/>
111    </target>
112     
113
114    <target name="abcl.init">
115      <tstamp>
116        <format property="build" pattern="EEE MMM dd yyyy HH:mm:ss zzz"/>
117      </tstamp>
118
119      <tstamp>
120        <format property="build.stamp" pattern="yyyymmdd-HHmm"/>
121      </tstamp>
122
123      <property name="abcl.test.log.file"
124                value="abcl-test-${build.stamp}.log"/>
125
126      <property name="java.path"
127                value="${java.home}/bin/java"/>
128
129      <!-- Deprecated. Two main types of build environents: 'unix' or 'windows'. -->
130      <condition property="unix"> 
131        <or>
132          <os family="unix"/>
133          <os family="mac"/>
134        </or>
135      </condition>
136      <condition property="windows"> 
137        <os family="windows"/>
138      </condition>
139
140      <!-- Deprecated. -->
141      <available file="${src.dir}org/armedbear/lisp/Interpreter.java" 
142                 property="abcl.lisp.p"/>
143
144      <echo>java.version: ${java.version}</echo>
145      <condition property="abcl.java.version.p">
146        <or>
147          <matches string="${java.version}" 
148                   pattern="1\.5"/>
149          <!-- Don't use 1.6.0_09 or earlier. -->
150          <matches string="${java.version}" 
151                   pattern="1\.6\.0_[1-9][0-9]"/>
152          <!-- 1.7.0_04 works much better. -->
153          <matches string="${java.version}" 
154                   pattern="1\.7\.0_([0-9][3-9])|([1-9][0-9])"/>
155        </or> 
156      </condition>
157
158    </target>
159   
160    <target name="abcl.java.warning" 
161            depends="abcl.init"
162            unless="abcl.java.version.p">
163      <echo>WARNING: Use of Java version ${java.version} not recommended.</echo>
164    </target>
165       
166    <target name="abcl.jsr-223.notice"
167            depends="abcl.init"
168            unless="abcl.jsr-223.p">
169      <echo>
170        Notice: JSR-223 support won't be built since it is not
171                supported, neither natively by your JVM nor by
172                libraries in the CLASSPATH.
173      </echo>
174    </target>
175
176    <target name="abcl.compile.java" 
177            depends="abcl.init,abcl.java.warning,abcl.jsr-223.notice">
178      <mkdir dir="${build.dir}"/>
179      <mkdir dir="${build.classes.dir}"/>
180      <!-- Stock build for Java 1.5 (aka Java 2) container -->
181      <javac destdir="${build.classes.dir}"
182             debug="true"
183             target="1.5"
184             source="1.5"
185             includeantruntime="false"
186             failonerror="true">
187        <src path="${src.dir}"/>
188        <patternset refid="abcl.source.java"/>
189      </javac>
190      <echo message="${build}" 
191            file="${build.classes.dir}/org/armedbear/lisp/build"/>
192    </target>
193
194    <target name="abcl.copy.lisp">
195      <copy todir="${build.classes.dir}" preservelastmodified="yes">
196        <fileset dir="${src.dir}">
197          <patternset refid="abcl.source.lisp.dist"/>
198        </fileset>
199      </copy>
200    </target>
201
202    <!-- Adjust the patternset for ABCL source to use the much faster
203         Ant 'uptodate' task to check if we need to compile the system
204         fasls.  Highly inter-dependent with the behavior specified in
205         'compile-system.lisp', i.e. files not listed in
206         there should NOT occur here. -->
207    <patternset id="abcl.source.lisp.fasls">
208      <patternset refid="abcl.source.lisp"/>
209      <exclude name="org/armedbear/lisp/scripting/**/*.lisp"/>
210      <exclude name="org/armedbear/lisp/boot.lisp"/>
211      <exclude name="org/armedbear/lisp/emacs.lisp"/>
212      <exclude name="org/armedbear/lisp/run-benchmarks.lisp"/>
213    </patternset>
214
215    <target name="abcl.fasls.uptodate">
216      <uptodate property="abcl.fasls.uptodate.p" value="true">
217        <srcfiles dir="${src.dir}">
218          <patternset refid="abcl.source.lisp.fasls"/>
219        </srcfiles>
220        <mapper type="glob" from="*.lisp" to="${build.classes.dir}/*.abcl"/>
221      </uptodate>
222    </target>
223
224    <path id="abcl.home.dir.path">
225        <path location="${src.dir}/org/armedbear/lisp/"/>
226    </path>         
227    <pathconvert property="abcl.home.dir" refid="abcl.home.dir.path"/>
228
229    <path id="abcl.lisp.output.path"
230          location="${build.classes.dir}/org/armedbear/lisp/"/>
231    <pathconvert dirsep="/" property="abcl.lisp.output" refid="abcl.lisp.output.path"/>
232
233    <property name="system.lisp.file" 
234              value="${build.classes.dir}/org/armedbear/lisp/system.lisp"/>
235
236    <target name="abcl.compile.lisp" 
237            depends="abcl.copy.lisp,abcl.compile.java,abcl.system.update.maybe,abcl.fasls.uptodate"
238            unless="abcl.fasls.uptodate.p">
239      <abcl.compile.lisp/>
240    </target>
241
242    <macrodef name="abcl.compile.lisp">
243      <element name="additional.jvmarg" optional="true"/>
244      <sequential>
245        <echo>
246Compiling Lisp system
247from ${abcl.home.dir}
248 to  ${abcl.lisp.output}</echo>
249 
250     <!-- Not good if ${abcl.home.dir} == ${abcl.lisp.output} -->
251     <delete>
252       <fileset dir="${abcl.home.dir}" includes="**/*.abcl **/*.cls **/*._"/>
253     </delete>
254     <java classpath="${build.classes.dir}" 
255            fork="true"
256            failonerror="true"
257            inputstring="(handler-case (compile-system :zip nil :quit t :output-path &quot;${abcl.lisp.output}/&quot;) (t (x) (progn (format t &quot;~A: ~A~%&quot; (type-of x) x) (exit :status -1))))"
258            classname="org.armedbear.lisp.Main">
259        <jvmarg value="-Dabcl.home=${abcl.home.dir}${file.separator}"/>
260        <jvmarg value="-Dabcl.autoload.verbose=Y"/>
261        <additional.jvmarg/>
262        <arg value="--noinit"/>
263        <arg value="--nosystem"/>
264        <arg value="--eval"/>
265        <arg value="(setf *load-verbose* t)"/>
266      </java>
267      <concat destfile="${system.lisp.file}" append="true">
268        <fileset file="${abcl.startup.file}"/>
269      </concat>
270        </sequential>
271    </macrodef>
272
273    <property name="abcl.compile.lisp.debug.jvmarg"
274              value="-agentlib:jdwp=transport=dt_socket,server=y,address=6789,suspend=y"/>
275    <target name="abcl.compile.lisp.debug" 
276            depends="abcl.copy.lisp,abcl.compile.java,abcl.system.update.maybe,abcl.fasls.uptodate"
277            unless="abcl.fasls.uptodate.p">
278      <echo>Debugging with jvmarg ${abcl.compile.lisp.debug.jvmarg}</echo>
279      <abcl.compile.lisp> 
280          <additional.jvmarg>
281            <jvmarg value="${abcl.compile.lisp.debug.jvmarg}"/>
282          </additional.jvmarg>
283      </abcl.compile.lisp>
284    </target>
285
286    <property name="abcl.build.path"
287              value="${build.classes.dir}/org/armedbear/lisp/build"/>
288    <target name="abcl.stamp" 
289            depends="abcl.compile,abcl.stamp.version,abcl.stamp.hostname">
290      <mkdir dir="${abcl.build.path}/.."/>
291      <loadfile property="abcl.version"
292                srcFile="${abcl.version.path}"/>
293      <echo message="${build}" file="${abcl.build.path}"/>   
294    </target>
295
296
297    <!-- Environment variables may be accessed as ${env.NAME} -->
298    <property environment="env"/>
299
300    <!-- Can we derive an SVN version from the current build tree? -->
301    <condition property="abcl.version.svn.p">
302      <and>
303        <available
304            file="${basedir}/.svn"
305            type="dir"/>
306        <or>
307            <available
308                file="svnversion.exe"
309                filepath="${env.Path}"/>
310            <available
311                file="svnversion.exe"
312                filepath="${env.PATH}"/>
313             <available
314                file="svnversion"
315                filepath="${env.Path}"/>
316            <available
317                file="svnversion"
318                filepath="${env.PATH}"/>
319        </or>
320      </and>
321    </condition>
322
323    <target name="abcl.version.src" depends="abcl.version.src.3"/>
324
325    <target name="abcl.version.src.0" if="windows">
326      <exec
327          executable="svnversion.exe"
328          outputproperty="abcl.version.svn.raw"
329          failifexecutionfails="false"
330          searchpath="true" />
331    </target>
332
333    <target name="abcl.version.src.1" depends="abcl.version.src.0">
334      <exec 
335          executable="svnversion"
336          outputproperty="abcl.version.svn.raw"
337          failifexecutionfails="false"
338          searchpath="true" />
339    </target>
340
341    <target name="abcl.version.src.2" 
342            depends="abcl.version.src.1"
343            if="abcl.version.svn.p">
344
345      <!-- Transform all occurances of ":" ==> "-" in the version string -->
346      <tempfile property="version-tmp.path"/>
347      <echo message="${abcl.version.svn.raw}"
348            file="${version-tmp.path}"/>
349      <replace file="${version-tmp.path}"
350               token=":" value="-"/>
351      <loadfile property="abcl.version.svn" srcFile="${version-tmp.path}"/>
352      <delete file="${version-tmp.path}"/>
353
354      <echo>abcl.version.svn: ${abcl.version.svn}</echo>
355      <property name="abcl.version.src"
356                value="svn-${abcl.version.svn}"/>
357    </target>
358
359    <target name="abcl.version.src.3"
360            depends="abcl.version.src.2"
361            unless="abcl.version.svn.p">
362      <property name="abcl.version.src"
363                value=""/>
364    </target>
365
366    <property name="abcl.home.dir"
367              value="${src.dir}/org/armedbear/lisp/"/>
368    <property name="abcl.version.path"
369              value="${build.classes.dir}/org/armedbear/lisp/version"/>
370
371    <target name="abcl.clean.version">
372      <delete file="${abcl.version.path}"/>
373    </target>
374
375    <target name="abcl.stamp.version.uptodate">
376      <uptodate property="abcl.stamp.version.uptodate.p" 
377                targetfile="${abcl.version.path}"
378                srcfile="${build.classes.dir}/org/armedbear/lisp/Version.class"/>
379    </target>
380
381    <target name="abcl.stamp.version" 
382            depends="abcl.version.src,abcl.stamp.version.1,abcl.stamp.version.2"
383            unless="abcl.stamp.version.uptodate.p">
384      <mkdir dir="${abcl.version.path}/.."/>
385      <echo>ABCL implementation version: ${abcl.implementation.version}</echo>
386      <echo file="${abcl.version.path}">${abcl.implementation.version}</echo>
387    </target>
388   
389    <target name="abcl.stamp.version.generate" 
390            depends="abcl.compile.java"
391            unless="abcl.stamp.version.uptodate.p">
392      <java fork="true"
393            classpath="${build.classes.dir}"
394            outputproperty="abcl.version"
395            classname="org.armedbear.lisp.Version"
396            logerror="yes"/> <!-- Don't catch stderr output -->
397    </target>
398
399    <target name="abcl.stamp.version.0" 
400            depends="abcl.stamp.version.uptodate,abcl.stamp.version.generate">
401    </target>
402
403    <target name="abcl.stamp.version.1"
404            depends="abcl.stamp.version.0"
405            unless="abcl.version.svn.p">
406      <property name="abcl.implementation.version"
407                value="${abcl.version}"/>
408    </target>
409
410    <target name="abcl.stamp.version.2" 
411            depends="abcl.stamp.version.0"
412            if="abcl.version.svn.p">
413      <property name="abcl.implementation.version"
414                value="${abcl.version}-${abcl.version.src}"/>
415    </target>
416
417    <target name="abcl.stamp.hostname" if="unix">
418      <exec executable="hostname" outputproperty="abcl.hostname"/>
419      <echo>abcl.hostname: ${abcl.hostname}</echo>
420    </target>
421
422    <target name="abcl.system.uptodate">
423      <condition property="abcl.system.needs-update.p">
424        <and>
425          <available file="${system.lisp.file}"/>
426          <available file="${abcl.startup.file}"/>
427          <uptodate
428                srcfile="${system.lisp.file}"
429                targetfile="${abcl.startup.file}"/>
430        </and>
431      </condition>
432    </target>
433   
434    <target name="abcl.system.update.maybe" depends="abcl.system.uptodate" 
435            if="abcl.system.needs-update.p">
436      <touch file="${src.dir}/org/armedbear/lisp/compile-system.lisp"/>
437    </target>
438
439    <target name="abcl.jar.uptodate" depends="abcl.compile,abcl.stamp">
440      <uptodate property="abcl.jar.uptodate.p" targetfile="${abcl.jar.path}">
441        <srcfiles dir="${build.classes.dir}">
442          <patternset refid="abcl.objects"/>
443        </srcfiles>
444      </uptodate>
445    </target>
446
447    <target name="abcl.jar" depends="abcl.jar.uptodate"
448            unless="abcl.jar.uptodate.p">
449      <mkdir dir="${dist.dir}"/>
450      <jar destfile="${abcl.jar.path}"
451           compress="true"
452           update="true"
453           basedir="${build.classes.dir}">
454        <patternset refid="abcl.objects"/>
455        <manifest>
456          <attribute name="Main-Class" value="org.armedbear.lisp.Main"/>
457          <section name="org/armedbear/lisp">
458            <attribute name="Implementation-Title" 
459                       value="ABCL"/>
460            <attribute name="Implementation-Version" 
461                       value="${abcl.implementation.version}"/>
462            <attribute name="Implementation-Build" 
463                       value="${build}"/>
464          </section>
465        </manifest>
466        <metainf dir="${src.dir}/META-INF"> 
467          <exclude name="services/javax.script.ScriptEngineFactory"
468                   unless="abcl.jsr-223.p"/>
469        </metainf>
470      </jar>
471    </target>
472   
473    <target name="abcl.wrapper" 
474            depends="abcl.jar,abcl.contrib,abcl.wrapper.unix,abcl.wrapper.windows">
475      <description>
476        Creates in-place executable shell wrapper in '${abcl.wrapper.file}'
477      </description>
478      <!-- Set from commandline or in 'build.properties' -->
479      <property name="additional.jars" value=""/>
480      <path id="abcl.runtime.classpath">
481        <pathelement location="${abcl.jar.path}"/>
482        <pathelement path="${additional.jars}"/>
483      </path>
484      <!-- set via '-Djava.options=JAVA_OPTIONS' or in 'build.properties -->
485      <property name="java.options" value=""/>
486
487      <copy file="${abcl.wrapper.in.file}" toFile="${abcl.wrapper.file}" overwrite="yes">
488        <filterset>
489          <filter token="JAVA" 
490                  value="${java.path}"/>
491          <filter token="ABCL_JAVA_OPTIONS" 
492                  value="${java.options}"/>
493          <filter token="ABCL_CLASSPATH"
494                  value="${toString:abcl.runtime.classpath}"/>
495        </filterset>
496      </copy>
497      <chmod file="${abcl.wrapper.file}" perm="a+x"/>
498
499      <echo>Created executable ABCL wrapper in '${abcl.wrapper.file}'</echo>
500      <echo>N.B. This wrapper requires '${abcl.jar.path}' not be moved.</echo>
501    </target>
502
503    <target name="abcl.wrapper.unix" if="unix">
504      <property name="abcl.wrapper.file" value="abcl"/>
505      <property name="abcl.wrapper.in.file" value="abcl.in"/>
506    </target>
507
508    <target name="abcl.wrapper.windows" if="windows">
509      <property name="abcl.wrapper.file" value="abcl.bat"/>
510      <property name="abcl.wrapper.in.file" value="abcl.bat.in"/>
511    </target>
512
513    <patternset id="abcl.contrib.source">
514          <include name="**/*.asd"/>
515          <include name="**/*.lisp"/>
516          <include name="**/README.markdown"/>
517    </patternset>
518
519    <patternset id="abcl.contrib.docs">
520          <include name="**/README.markdown"/>
521    </patternset>
522
523    <property name="abcl-contrib.jar"
524              value="${dist.dir}/abcl-contrib.jar"/>
525    <condition property="abcl.contrib.uptodate.p">
526      <uptodate targetfile="${abcl-contrib.jar}">
527        <srcfiles dir="contrib">
528          <patternset refid="abcl.contrib.source"/>
529        </srcfiles>
530      </uptodate>
531    </condition>
532
533    <target name="abcl-contrib.jar" depends="abcl.contrib"/>
534    <target name="abcl.contrib" unless="abcl.contrib.uptodate.p">
535      <jar destfile="${abcl-contrib.jar}"
536           compress="true"
537           basedir="contrib">
538        <patternset refid="abcl.contrib.source"/>
539      </jar>
540      <echo>
541Packaged contribs in ${abcl-contrib.jar}. To use contribs, ensure that
542this file is in the same directory as 'abcl.jar', and then
543
544  CL-USER> (require 'abcl-contrib)
545
546will place all the contribs in the ASDF registry.
547
548To load a contrib, something like
549
550  CL-USER> (require 'jss)
551
552will compile (if necessary) and load JSS.
553</echo>
554    </target>
555
556    <target name="abcl.contrib.javadoc.jar">
557      <mkdir dir="${dist.dir}"/>
558      <jar destfile="${dist.dir}/abcl-contrib-javadoc.jar" basedir="contrib">
559        <patternset refid="abcl.contrib.docs" />
560      </jar>
561    </target>
562
563    <target name="abcl.contrib.source.jar">
564      <mkdir dir="${dist.dir}"/>
565      <jar destfile="${dist.dir}/abcl-contrib-sources.jar" basedir="contrib">
566        <patternset refid="abcl.contrib.source" />
567      </jar>
568    </target>
569
570    <target name="abcl.debug.jpda" depends="abcl.jar">
571      <description>Invoke ABCL with JPDA listener on port 6789</description>
572      <java fork="true"
573            classpathref="abcl.classpath.dist"
574            classname="org.armedbear.lisp.Main">
575        <jvmarg 
576            value="-agentlib:jdwp=transport=dt_socket,address=6789,server=y"/>
577      </java>
578      <echo>JPDA listening on localhost:6789</echo>
579    </target>
580
581    <target name="abcl.build.debug.jpda" depends="abcl.compile.java">
582      <description>Invoke ABCL with JPDA listener on port 6789</description>
583      <java fork="true"
584            classpathref="abcl.classpath.build"
585            classname="org.armedbear.lisp.Main">
586        <jvmarg
587            value="-agentlib:jdwp=transport=dt_socket,address=6789,server=y"/>
588        <jvmarg value="-Dabcl.home=${abcl.home.dir}${file.separator}"/>
589      </java>
590      <echo>JPDA listening on localhost:6789</echo>
591    </target>
592
593    <target name="abcl.run" depends="abcl.jar">
594      <java fork="true"
595            classpathref="abcl.classpath.dist"
596            classname="org.armedbear.lisp.Main">
597      </java>
598    </target>
599
600    <target name="abcl.clean">
601      <delete dir="${build.dir}"/>
602      <delete file="${abcl.jar.path}"/>
603      <delete file="abcl"/>
604      <delete file="abcl.bat"/>
605    </target>
606
607    <property name="slime.fasls" 
608              value="${user.home}/.slime/"/>
609    <property name="quicklisp.common-lisp.fasls"
610              value="${user.home}/.cache/common-lisp/"/>
611    <target name="abcl.clean.application.fasls">
612      <echo>WARNING:  This target is removing local application inter-Lisp fasls, forcing recompilation.
613      </echo>
614      <echo>Deleting local SLIME fasls under ${slime.fasls}</echo>
615      <delete dir="${slime.fasls}"/>
616      <echo>Deleting local Quicklisp fasls under ${quicklisp.common-lisp.fasls}</echo>
617      <delete dir="${quicklisp.common-lisp.fasls}"/>
618    </target>
619
620    <target name="abcl.dist" depends="abcl.jar">
621      <copy file="${abcl.jar.path}"
622            toFile="${dist.dir}/abcl-${abcl.version}.jar"/>
623    </target>
624
625
626
627
628    <target name="abcl.distclean" depends="abcl.clean">
629      <delete dir="${dist.dir}"/>
630      <delete file="abcl"/>
631      <delete file="abcl.bat"/>
632    </target>
633
634    <target name="TAGS">
635      <delete file="TAGS"/>
636      <apply executable="etags" parallel="true" verbose="true" maxparallel="300">
637        <arg value="--append"/>
638        <arg value="--regex=|[ \t]+//[ \t]+###[ \t]+\([^ \t]+\)|\1|"/>
639        <arg value='--regex=|[ \t]*@DocString([ \t]*name=\"\([^\"]*\)|\1|'/>
640        <fileset dir="${src.dir}">
641          <patternset refid="abcl.source.java"/>
642          <patternset refid="abcl.source.lisp"/>
643        </fileset>
644      </apply>
645    </target>
646
647    <patternset id="abcl.dist.misc"
648                description="Additional includes in the source distributions relative to basedir">
649      <include name="build.xml"/>
650      <include name="abcl.properties.in"/>
651      <include name="COPYING"/>
652      <include name="README"/>
653      <include name="CHANGES"/>
654      <include name="abcl.in"/>
655      <include name="abcl.bat.in"/>
656
657      <include name="abcl.asd"/>
658     
659      <include name="examples/**"/>
660
661      <include name="contrib/**"/>
662     
663      <include name="test/**"/>
664
665      <include name="build-from-lisp.sh"/>
666     
667      <!-- The remainder of these files are used by the Lisp hosted
668           build in 'build-abcl.lisp' but not used by Ant, so include
669           them in the source distribution. -->
670      <include name="make-jar.in"/>
671      <include name="make-jar.bat.in"/>
672
673      <include name="build-abcl.lisp"/>
674      <include name="customizations.lisp.in"/>
675
676    </patternset>
677
678    <patternset 
679        id="abcl.source.misc"
680        description="Additional includes in the source distribution relative to source root">
681      <include name="org/armedbear/lisp/LICENSE"/>
682      <include name="manifest-abcl"/>
683      <include name="META-INF/services/javax.script.ScriptEngineFactory"/>
684    </patternset>
685
686    <target name="abcl.source.prepare" depends="abcl.stamp.version">
687      <property name="abcl.build.src.dir"
688                value="${build.dir}/abcl-src-${abcl.version}"/>
689      <mkdir dir="${abcl.build.src.dir}/src"/>
690      <copy todir="${abcl.build.src.dir}/src"
691            preservelastmodified="true">
692        <fileset dir="${src.dir}"
693                 id="abcl.source.src">
694            <patternset refid="abcl.source.java"/>
695            <patternset refid="abcl.source.lisp"/>
696            <patternset refid="abcl.source.misc"/>
697        </fileset>
698      </copy>
699      <copy todir="${abcl.build.src.dir}"
700            preservelastmodified="true">
701        <fileset dir="${basedir}">
702            <patternset refid="abcl.dist.misc"/>
703        </fileset>
704      </copy>
705    </target>
706
707    <!--  Files in source distribution that always get LF EOL (aka
708         'unix') -->   
709    <patternset id="abcl.dist.lf">
710      <include name="abcl.in"/>
711    </patternset>
712
713    <!--  Files in source distribution that always get CRLF EOL (aka
714         'dos') -->   
715    <patternset id="abcl.dist.crlf">
716      <include name="abcl.bat.in"/>
717    </patternset>
718
719    <target name="abcl.source.unix" depends="abcl.source.prepare">
720      <fixcrlf srcdir="${abcl.build.src.dir}"
721               preservelastmodified="true"
722               eol="lf">
723      </fixcrlf>
724
725      <fixcrlf srcdir="${abcl.build.src.dir}"
726               preservelastmodified="true"
727               eol="crlf">
728          <patternset refid="abcl.dist.crlf"/>
729      </fixcrlf>
730
731      <fixcrlf srcdir="${abcl.build.src.dir}"
732               preservelastmodified="true"
733               eol="lf">
734          <patternset refid="abcl.dist.lf"/>
735      </fixcrlf>
736    </target>
737
738    <target name="abcl.source.tar" depends="abcl.source.unix">
739      <mkdir dir="${dist.dir}"/>
740      <tar destfile="${dist.dir}/abcl-src-${abcl.version}.tar.gz"
741           compression="gzip">
742        <tarfileset dir="${build.dir}">
743          <include name="abcl-src-${abcl.version}/**"/>
744        </tarfileset>
745      </tar>
746    </target>
747
748    <target name="abcl.source.windows" depends="abcl.source.prepare">
749      <fixcrlf srcdir="${abcl.build.src.dir}"
750               preservelastmodified="true"
751               eol="crlf">
752      </fixcrlf>
753
754      <fixcrlf srcdir="${abcl.build.src.dir}"
755               preservelastmodified="true"
756               eol="crlf">
757          <patternset refid="abcl.dist.crlf"/>
758      </fixcrlf>
759
760      <fixcrlf srcdir="${abcl.build.src.dir}"
761               preservelastmodified="true"
762               eol="lf">
763          <patternset refid="abcl.dist.lf"/>
764      </fixcrlf>
765    </target>
766
767    <target name="abcl.source.zip" depends="abcl.source.windows">
768      <mkdir dir="${dist.dir}"/>
769      <zip destfile="${dist.dir}/abcl-src-${abcl.version}.zip"
770           compress="true">
771        <zipfileset dir="${abcl.build.src.dir}" prefix="abcl-src-${abcl.version}"/>
772      </zip>
773    </target>
774
775    <target name="abcl.source.jar" depends="abcl.source.unix">
776      <mkdir dir="${dist.dir}"/>
777      <jar destfile="${dist.dir}/abcl-${abcl.version}-sources.jar">
778        <metainf dir="${abcl.build.src.dir}">
779          <include name="COPYING"/>
780        </metainf>
781        <fileset dir="${abcl.build.src.dir}/src">
782          <include name="**/*.java"/>
783          <include name="**/*.lisp"/>
784        </fileset>
785      </jar>
786    </target>
787
788    <property name="abcl.javadoc.dir" value="${build.dir}/javadoc"/>
789
790    <target name="abcl.javadoc">
791      <mkdir dir="${abcl.javadoc.dir}"/>
792      <javadoc destdir="${abcl.javadoc.dir}"
793               sourcepath="${src.dir}"/>
794    </target>
795   
796    <target name="abcl.javadoc.jar" depends="abcl.stamp.version,abcl.javadoc">
797      <mkdir dir="${dist.dir}"/>
798      <jar destfile="${dist.dir}/abcl-${abcl.version}-javadoc.jar">
799        <fileset dir="${abcl.javadoc.dir}"/>
800      </jar>
801    </target>
802
803    <target name="abcl.binary.prepare" depends="abcl.jar,abcl.contrib,abcl.stamp.version">
804      <property name="abcl.build.binary.dir"
805                value="${build.dir}/abcl-bin-${abcl.version}"/>
806      <mkdir dir="${abcl.build.binary.dir}"/>
807      <copy todir="${abcl.build.binary.dir}"
808            preservelastmodified="true">
809        <fileset dir="${basedir}/dist">
810          <patternset>
811            <include name="abcl.jar"/>
812            <include name="abcl-contrib.jar"/>
813          </patternset>
814        </fileset>
815        <fileset dir="${basedir}">
816          <patternset>
817            <include name="README"/>
818            <include name="CHANGES"/>
819          </patternset>
820        </fileset>
821      </copy>
822    </target>
823
824    <target name="abcl.binary.tar" depends="abcl.binary.prepare">
825      <tar destfile="${dist.dir}/abcl-bin-${abcl.version}.tar.gz"
826           compression="gzip">
827        <tarfileset dir="${build.dir}">
828          <include name="abcl-bin-${abcl.version}/**"/>
829          </tarfileset>
830      </tar>
831    </target>
832
833    <target name="abcl.binary.zip" depends="abcl.binary.prepare">
834      <zip destfile="${dist.dir}/abcl-bin-${abcl.version}.zip"
835           compress="true">
836        <zipfileset dir="${abcl.build.binary.dir}" prefix="abcl-bin-${abcl.version}"/>
837      </zip>
838    </target>
839
840    <target name="help.test">
841      <echo>
842The following Ant targets run various test suites:
843 
844  abcl.test
845    --  Run all available tests.
846  abcl.test.java
847    --  Run the ABCL junit Java tests under ${basedir}/test/src
848  abcl.test.lisp
849    --  Run the 'test.ansi.compiled', 'test.abcl', 'test.cl-bench' targets
850  test.ansi.compiled
851    --  Run the compiled version of the ANSI test suite
852  test.abcl
853    --  Run the Lisp RT tests collected in ${basedir}/test/lisp/abcl
854  test.cl-bench
855    --  Run the cl-bench test suite.
856
857The ANSI tests require that the [ansi-tests][1] be manually installed in
858${basedir}/../ansi-tests.
859
860[1]: svn://common-lisp.net/project/ansi-test/svn/trunk/ansi-tests
861
862The CL-BENCH tests require that [cl-bench][2] be manually installed in
863${basedir}/../cl-bench
864
865[2]: http://www.chez.com/emarsden/downloads/cl-bench.tar.gz
866      </echo>
867    </target>
868
869    <property name="abcl.test.classes.dir"
870              value="${build.dir}/classes-test"/>
871
872    <property name="abcl.test.src.dir"
873              value="${basedir}/test/src"/>
874
875    <patternset id="abcl.test.source.java">
876      <!-- For now, we list tests explicitly, because we have to
877           enumerate them later to the JUnit test runner. -->
878      <include name="org/armedbear/lisp/*.java"/>
879    </patternset>
880
881    <property name="junit.path"
882              value="${abcl.ext.dir}/junit-4.8.1.jar"/>
883
884
885    <path id="abcl.test.compile.classpath">
886      <pathelement location="${junit.path}"/>
887      <pathelement location="${build.classes.dir}"/>
888    </path>
889
890    <target name="abcl.test.pre-compile" depends="abcl.ext"/>
891
892    <target name="abcl.ext.p">
893      <!--XXX generalize over enumeration of all contributions to
894           abcl.ext if we get more of them.  -->
895      <available file="${junit.path}" property="abcl.ext.p"/>
896    </target>
897    <target name="abcl.ext" depends="abcl.ext.p" unless="abcl.ext.p">
898
899      <mkdir dir="${abcl.ext.dir}"/>
900      <get 
901          src="http://cloud.github.com/downloads/KentBeck/junit/junit-4.8.1.jar"
902          usetimestamp="true"
903          dest="${junit.path}"/>
904    </target>
905       
906    <target name="abcl.test.compile" 
907            depends="abcl.test.pre-compile">
908      <mkdir dir="${abcl.test.classes.dir}"/>
909      <javac destdir="${abcl.test.classes.dir}"
910             classpathref="abcl.test.compile.classpath"
911             debug="true"
912             target="1.5">
913        <src path="${abcl.test.src.dir}"/>
914        <patternset refid="abcl.test.source.java"/>
915      </javac>
916    </target>
917
918    <path id="abcl.test.run.classpath">
919      <path refid="abcl.test.compile.classpath"/>
920      <pathelement location="${abcl.test.classes.dir}"/>
921    </path>
922
923    <target name="abcl.test" 
924            depends="abcl.test.java,abcl.test.lisp"/>
925       
926    <target name="abcl.test.java" depends="abcl.test.compile">
927      <java fork="true"
928            classpathref="abcl.test.run.classpath"
929            classname="org.junit.runner.JUnitCore">
930        <arg value="org.armedbear.lisp.PathnameTest"/>
931        <arg value="org.armedbear.lisp.StreamTest"/>
932        <arg value="org.armedbear.lisp.UtilitiesTest"/>
933      </java>
934    </target>
935
936    <target name="abcl.test.lisp" 
937            depends="test.ansi.compiled,test.abcl,test.cl-bench"/>
938
939    <target name="test.ansi.interpreted" depends="abcl.jar">
940      <echo>Recording test output in ${abcl.test.log.file}.</echo>
941      <record name="${abcl.test.log.file}" emacsmode="true" action="start" append="yes"/>
942      <java fork="true" dir="${basedir}"
943            classpathref="abcl.classpath.dist"
944            classname="org.armedbear.lisp.Main">
945        <arg value="--noinit"/> 
946        <arg value="--eval"/><arg value="(require (quote asdf))"/>
947        <arg value="--eval"/><arg value="(asdf:operate (quote asdf:load-op) :abcl)"/>
948        <arg value="--eval"/><arg value="(asdf:operate (quote asdf:test-op) :ansi-interpreted)"/>
949        <arg value="--eval"/><arg value="(ext:exit)"/>
950      </java>
951      <record name="${abcl.test.log.file}" emacsmode="true" action="stop"/>
952      <echo>Finished recording test output in ${abcl.test.log.file}.</echo>
953    </target>
954
955    <target name="test.ansi.compiled" depends="abcl.jar">
956      <echo>Recording test output in ${abcl.test.log.file}.</echo>
957      <record name="${abcl.test.log.file}" emacsmode="true" action="start" append="yes"/>
958      <java fork="true" dir="${basedir}"
959            classpathref="abcl.classpath.dist"
960            classname="org.armedbear.lisp.Main">
961        <!-- Run in 64bit mode-->
962        <jvmarg value="-d64"/> 
963
964        <!-- Enable JVM assertions -->
965        <jvmarg value="-ea"/> 
966       
967        <!-- (Possibly) unload classes when reference count reaches zero -->
968        <jvmarg value="-XX:+CMSClassUnloadingEnabled"/> 
969
970        <!-- Increase the size of the space used to store JVM class metadata. -->
971        <jvmarg value="-XX:MaxPermSize=768m"/> 
972
973        <arg value="--noinit"/> 
974        <arg value="--eval"/><arg value="(require (quote asdf))"/>
975        <arg value="--eval"/><arg value="(asdf:operate (quote asdf:load-op) :abcl)"/>
976        <arg value="--eval"/><arg value="(asdf:operate (quote asdf:test-op) :ansi-compiled)"/>
977        <arg value="--eval"/><arg value="(ext:exit)"/>
978      </java>
979      <record name="${abcl.test.log.file}" emacsmode="true" action="stop"/>
980      <echo>Finished recording test output in ${abcl.test.log.file}.</echo>
981    </target>
982
983    <target name="test.abcl" depends="abcl.jar">
984      <echo>Recording test output in ${abcl.test.log.file}.</echo>
985      <record name="${abcl.test.log.file}" emacsmode="true" action="start" append="yes"/>
986      <java fork="true" dir="${basedir}"
987            classpathref="abcl.classpath.dist"
988            classname="org.armedbear.lisp.Main">
989        <arg value="--noinit"/> 
990        <arg value="--eval"/><arg value="(require (quote asdf))"/>
991        <arg value="--eval"/><arg value="(asdf:operate (quote asdf:load-op) :abcl)"/>
992        <arg value="--eval"/><arg value="(asdf:operate (quote asdf:test-op) :abcl-test-lisp)"/>
993        <arg value="--eval"/><arg value="(ext:exit)"/>
994      </java>
995      <record name="${abcl.test.log.file}" emacsmode="true" action="stop"/>
996      <echo>Finished recording test output in ${abcl.test.log.file}.</echo>
997    </target>
998
999    <target name="test.cl-bench" depends="abcl.jar">
1000      <echo>Recording test output in ${abcl.test.log.file}.</echo>
1001      <record name="${abcl.test.log.file}" emacsmode="true" action="start" append="yes"/>
1002      <java fork="true" dir="${basedir}"
1003            classpathref="abcl.classpath.dist"
1004            classname="org.armedbear.lisp.Main">
1005        <arg value="--noinit"/> 
1006        <arg value="--eval"/><arg value="(require (quote asdf))"/>
1007        <arg value="--eval"/><arg value="(asdf:operate (quote asdf:load-op) :abcl)"/>
1008        <arg value="--eval"/><arg value="(asdf:operate (quote asdf:test-op) :cl-bench)"/>
1009        <arg value="--eval"/><arg value="(ext:exit)"/>
1010      </java>
1011      <record name="${abcl.test.log.file}" emacsmode="true" action="stop"/>
1012      <echo>Finished recording test output in ${abcl.test.log.file}.</echo>
1013    </target>
1014
1015
1016<target name="abcl.diagnostic" 
1017        description="Emit diagnostics describing available hosting JVM properties."
1018        depends="abcl.build.diagnostic"/>
1019<!--
1020
1021urn:org.abcl.build.ant.targets.diagnostic
1022
1023"Possible JVM values from"
1024
1025http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#getProperties
1026
1027.
1028
1029
1030java.version  Java Runtime Environment version
1031java.vendor   Java Runtime Environment vendor
1032java.vendor.url   Java vendor URL
1033java.home   Java installation directory
1034java.vm.specification.version   Java Virtual Machine specification version
1035java.vm.specification.vendor  Java Virtual Machine specification vendor
1036java.vm.specification.name  Java Virtual Machine specification name
1037java.vm.version   Java Virtual Machine implementation version
1038java.vm.vendor  Java Virtual Machine implementation vendor
1039java.vm.name  Java Virtual Machine implementation name
1040java.specification.version  Java Runtime Environment specification version
1041java.specification.vendor   Java Runtime Environment specification vendor
1042java.specification.name   Java Runtime Environment specification name
1043java.class.version  Java class format version number
1044java.class.path   Java class path
1045java.library.path   List of paths to search when loading libraries
1046java.io.tmpdir  Default temp file path
1047java.compiler   Name of JIT compiler to use
1048java.ext.dirs   Path of extension directory or directories
1049os.name   Operating system name
1050os.arch   Operating system architecture
1051os.version  Operating system version
1052file.separator  File separator ("/" on UNIX)
1053path.separator  Path separator (":" on UNIX)
1054line.separator  Line separator ("\n" on UNIX)
1055user.name   User's account name
1056user.home   User's home directory
1057user.dir
1058
1059-->
1060
1061<target name="abcl.build.diagnostic" description="Emit diagnostics describing available hosting JVM properties.">
1062  <echo>:java.version    ${java.version}</echo>
1063  <echo>:java.vendor     ${java.vendor}</echo>
1064  <echo>:java.vm.vendor  ${java.vm.vendor}</echo>
1065  <echo>:java.vm.name    ${java.vm.name}</echo>
1066
1067  <echo>:os.name    ${os.name}</echo>
1068  <echo>:os.arch    ${os.arch}</echo>
1069  <echo>:os.version ${os.version}</echo>
1070 
1071  <echo>:java.specification.version       ${java.specification.version}</echo>
1072  <echo>:java.vm.specification.version    ${java.vm.specification.version}</echo>
1073</target>
1074
1075    <target name="abcl.release" 
1076            depends="abcl.clean,abcl.binary.tar,abcl.source.tar,abcl.binary.zip,abcl.source.zip">
1077      <copy file="${abcl.jar.path}"
1078            tofile="${dist.dir}/abcl-${abcl.version}.jar"/>
1079      <copy file="${abcl-contrib.jar}"
1080            tofile="${dist.dir}/abcl-contrib-${abcl.version}.jar"/>
1081    </target>
1082
1083    <import file="netbeans-build.xml" optional="true"/> 
1084<!--    <import file="j-build.xml" optional="true"/>  -->
1085    <import file="not.org-build.xml" optional="true"/> 
1086   
1087    <import file="build-snapshot.xml" optional="true"/>
1088</project>
1089
1090
1091
1092
Note: See TracBrowser for help on using the repository browser.