source: branches/1.1.x/build.xml @ 14291

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

build: always delete intermediate "version" artifact.

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