source: trunk/abcl/build.xml @ 14917

Last change on this file since 14917 was 14917, checked in by Mark Evenson, 5 years ago

build: 'abcl.clean.application.fasls' now cleans only ABCL fasls

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