diff options
Diffstat (limited to 'sabbus.xml')
-rw-r--r-- | sabbus.xml | 756 |
1 files changed, 491 insertions, 265 deletions
diff --git a/sabbus.xml b/sabbus.xml index 344b5453e7..e89da3ddd7 100644 --- a/sabbus.xml +++ b/sabbus.xml @@ -3,24 +3,29 @@ <project name="sabbus" default="build"> <description> - I am SuperSabbus for Scala core, the fast but simple version of Sabbus. + SuperSabbus for Scala core, builds the scala library and compiler. It can also package it as a simple distribution, + tests it for stable bootstrapping and against the Scala test suite. Use PackSabbus to package it for different install + management tools such as Sbaz. </description> <!-- =========================================================================== END-USER TARGETS ============================================================================ --> - <target name="build" depends="pack.load" - description="Builds the Scala compiler and library. Executables are in 'build/quick/bin'."/> + <target name="build" depends="pack.done" + description="Builds the Scala compiler and library. Executables are in 'build/pack/bin'."/> <target name="clean" depends="quick.clean" description="Removes binaries of compiler and library. Distributions are untouched."/> - <target name="test" depends="suite.test, stability.test" + <target name="test" depends="test.done" description="Runs test suite and bootstrapping test on Scala compiler and library."/> - <target name="docs" depends="" - description="Builds documentation for Scala library. Scaladoc is in 'build/scaladoc'."/> + <target name="docs" depends="docs.done" + description="Builds documentation for the Scala library. Scaladoc is in 'build/scaladoc/library'."/> + + <target name="docscomp" depends="docs.comp" + description="Builds documentation for the Scala compiler and library. Scaladoc is in 'build/scaladoc'."/> <target name="docsclean" depends="docs.clean" description="Removes generated documentation. Distributions are untouched."/> @@ -29,28 +34,26 @@ END-USER TARGETS description="Makes a new distribution and tests it. Will remove existing binaries and documentation."> <antcall target="locker.clean"/> <antcall target="docs.clean"/> - <antcall target="dist.load"> - <param name="dist.expected" value="yes"/> - </antcall> + <antcall target="all.done"/> </target> - <target name="distclean" depends="dists.clean" + <target name="distclean" depends="dist.clean" description="Removes all distributions. Binaries and documentation are untouched."/> <target name="newstarr" description="Replaces the Starr compiler and library by one built from current sources and tests it."> <antcall target="locker.clean"/> - <antcall target="starr.build"/> + <antcall target="starr.done"/> <antcall target="locker.clean"/> - <antcall target="test"/> + <antcall target="test.done"/> </target> <target name="newlocker" description="Replaces the Locker compiler and library by one built from current sources."> <antcall target="locker.clean"/> - <antcall target="locker.build"/> + <antcall target="locker.done"/> </target> - + <!-- =========================================================================== PROPERTIES ============================================================================ --> @@ -63,6 +66,7 @@ PROPERTIES <!-- Defines the repository layout --> <property name="docs.dir" value="${basedir}/docs"/> <property name="lib.dir" value="${basedir}/lib"/> + <property name="lib-ant.dir" value="${lib.dir}/ant"/> <property name="src.dir" value="${basedir}/src"/> <property name="test.dir" value="${basedir}/test"/> @@ -83,8 +87,8 @@ PROPERTIES <property name="build.dir" value="${basedir}/build"/> <property name="build-locker.dir" value="${build.dir}/locker"/> <property name="build-quick.dir" value="${build.dir}/quick"/> + <property name="build-pack.dir" value="${build.dir}/pack"/> <property name="build-strap.dir" value="${build.dir}/strap"/> - <property name="build-partest.dir" value="${build.dir}/partest"/> <property name="build-docs.dir" value="${build.dir}/scaladoc"/> <property name="dists.dir" value="${basedir}/dists"/> @@ -127,13 +131,7 @@ INITIALISATION <!-- And print-out what we are building --> <echo level="info" message="Build number is '${version.number}'"/> <echo level="info" message="Built ${time.human} from revision ${svn.number} with Java ${java.vm.version}"/> - </target> - -<!-- =========================================================================== -LOAD STABLE REFERENCE (STARR) LAYER -============================================================================ --> - - <target name="starr.load" depends="init"> + <!-- Define tasks that can be run with Starr --> <path id="starr.classpath"> <pathelement location="${lib.starr.jar}"/> <pathelement location="${comp.starr.jar}"/> @@ -145,18 +143,23 @@ LOAD STABLE REFERENCE (STARR) LAYER </target> <!-- =========================================================================== -BUILD LOCAL REFERENCE (LOCKER) LAYER +LOCAL REFERENCE BUILD (LOCKER) ============================================================================ --> - - <target name="locker.init" depends="starr.load"> + + <target name="locker.start" depends="init"> <condition property="locker.available"> - <available file="${build-locker.dir}/build.complete"/> + <available file="${build-locker.dir}/all.complete"/> + </condition> + </target> + + <target name="locker.pre-lib" depends="locker.start" unless="locker.available"> + <condition property="locker.lib.needed"> + <not><available file="${build-locker.dir}/library.complete"/></not> </condition> </target> - <target name="locker.build" depends="locker.init" unless="locker.available"> - <stopwatch name="locker.timer"/> - <!-- Build library --> + <target name="locker.lib" depends="locker.pre-lib" if="locker.lib.needed"> + <stopwatch name="locker.lib.timer"/> <mkdir dir="${build-locker.dir}/classes/library"/> <javac srcdir="${src.dir}/library" @@ -193,7 +196,18 @@ BUILD LOCAL REFERENCE (LOCKER) LAYER </fileset> </copy> <sabbreak id="starr.lib.scalac"/> - <!-- Build compiler --> + <touch file="${build-locker.dir}/library.complete" verbose="no"/> + <stopwatch name="locker.lib.timer" action="total"/> + </target> + + <target name="locker.pre-comp" depends="locker.lib" unless="locker.available"> + <condition property="locker.comp.needed"> + <not><available file="${build-locker.dir}/compiler.complete"/></not> + </condition> + </target> + + <target name="locker.comp" depends="locker.pre-comp" if="locker.comp.needed"> + <stopwatch name="locker.comp.timer"/> <mkdir dir="${build-locker.dir}/classes/compiler"/> <sabmake id="starr.comp.scalac" destdir="${build-locker.dir}/classes/compiler" @@ -224,12 +238,12 @@ BUILD LOCAL REFERENCE (LOCKER) LAYER </fileset> </copy> <sabbreak id="starr.comp.scalac"/> - <!-- Timing the build --> - <touch file="${build-locker.dir}/build.complete" verbose="no"/> - <stopwatch name="locker.timer" action="total"/> + <touch file="${build-locker.dir}/compiler.complete" verbose="no"/> + <stopwatch name="locker.comp.timer" action="total"/> </target> - <target name="locker.load" depends="locker.build"> + <target name="locker.done" depends="locker.comp"> + <touch file="${build-locker.dir}/all.complete" verbose="no"/> <path id="locker.classpath"> <pathelement location="${build-locker.dir}/classes/library"/> <pathelement location="${build-locker.dir}/classes/compiler"/> @@ -237,25 +251,29 @@ BUILD LOCAL REFERENCE (LOCKER) LAYER <pathelement location="${ant.jar}"/> </path> </target> + + <target name="locker.clean" depends="quick.clean"> + <delete dir="${build-locker.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> + </target> <!-- =========================================================================== -BUILD QUICK LAYER +QUICK BUILD (QUICK) ============================================================================ --> - <target name="quick.init" depends="locker.load"> - <uptodate property="quick.available" targetfile="${build-quick.dir}/build.complete"> + <target name="quick.start" depends="locker.done"/> + + <target name="quick.pre-lib" depends="quick.start"> + <uptodate property="quick.lib.available" targetfile="${build-quick.dir}/library.complete"> <srcfiles dir="${src.dir}"> <include name="library/**"/> - <include name="compiler/**"/> <include name="dbc/**"/> <include name="actors/**"/> </srcfiles> </uptodate> </target> - <target name="quick.build" depends="quick.init" unless="quick.available"> - <stopwatch name="quick.timer"/> - <!-- Build library --> + <target name="quick.lib" depends="quick.pre-lib" unless="quick.lib.available"> + <stopwatch name="quick.lib.timer"/> <mkdir dir="${build-quick.dir}/classes/library"/> <javac srcdir="${src.dir}/library" @@ -278,6 +296,17 @@ BUILD QUICK LAYER <sabuse id="locker.lib.scalac" srcdir="${src.dir}/library"> <include name="scala/Predef.scala"/> </sabuse> + <!-- --> + <sabbreak id="locker.lib.scalac"/> + <sabmake id="locker.lib.scalac" + destdir="${build-quick.dir}/classes/library" + compilerpathref="locker.classpath" + srcpath="${src.dir}/library"> + <compilationpath> + <pathelement location="${build-quick.dir}/classes/library"/> + </compilationpath> + </sabmake> + <!-- --> <sabuse id="locker.lib.scalac" srcdir="${src.dir}/library"> <include name="**/*.scala"/> <exclude name="scala/Predef.scala"/> @@ -301,7 +330,18 @@ BUILD QUICK LAYER </fileset> </copy> <sabbreak id="locker.lib.scalac"/> - <!-- Build compiler --> + <touch file="${build-quick.dir}/library.complete" verbose="no"/> + <stopwatch name="quick.lib.timer" action="total"/> + </target> + + <target name="quick.pre-comp" depends="quick.lib"> + <uptodate property="quick.comp.available" targetfile="${build-quick.dir}/compiler.complete"> + <srcfiles dir="${src.dir}/compiler"/> + </uptodate> + </target> + + <target name="quick.comp" depends="quick.pre-comp" unless="quick.comp.available"> + <stopwatch name="quick.comp.timer"/> <mkdir dir="${build-quick.dir}/classes/compiler"/> <sabmake id="locker.comp.scalac" destdir="${build-quick.dir}/classes/compiler" @@ -332,39 +372,234 @@ BUILD QUICK LAYER </fileset> </copy> <sabbreak id="locker.comp.scalac"/> - <!-- Timing the build --> - <touch file="${build-quick.dir}/build.complete" verbose="no"/> - <stopwatch name="quick.timer" action="total"/> + <touch file="${build-quick.dir}/compiler.complete" verbose="no"/> + <stopwatch name="quick.comp.timer" action="total"/> </target> - <target name="quick.load" depends="quick.build"> - <path id="quick.classpath"> - <pathelement location="${build-quick.dir}/classes/library"/> - <pathelement location="${build-quick.dir}/classes/compiler"/> + <target name="quick.pre-partest" depends="quick.comp"> + <uptodate property="quick.partest.available" targetfile="${build-quick.dir}/partest.complete"> + <srcfiles dir="${src.dir}/partest"/> + </uptodate> + </target> + + <target name="quick.partest" depends="quick.pre-partest" unless="quick.partest.available"> + <stopwatch name="quick.partest.timer"/> + <mkdir dir="${build-quick.dir}/classes/partest"/> + <javac + srcdir="${src.dir}/partest" + destdir="${build-quick.dir}/classes/partest"> + <classpath> + <pathelement location="${build-quick.dir}/classes/library"/> + <pathelement location="${build-quick.dir}/classes/compiler"/> + <pathelement location="${build-quick.dir}/classes/partest"/> + </classpath> + <include name="**/*.java"/> + </javac> + <sabmake id="locker.partest.scalac" + destdir="${build-quick.dir}/classes/partest" + compilerpathref="locker.classpath" + srcpath="${src.dir}/paartest"> + <compilationpath> + <pathelement location="${build-quick.dir}/classes/library"/> + <pathelement location="${build-quick.dir}/classes/compiler"/> + <pathelement location="${build-quick.dir}/classes/partest"/> + <pathelement location="${ant.jar}"/> + </compilationpath> + </sabmake> + <sabuse id="locker.partest.scalac" srcdir="${src.dir}/partest"> + <include name="**/*.scala"/> + </sabuse> + <copy todir="${build-quick.dir}/classes/partest"> + <fileset dir="${src.dir}/partest"> + <include name="**/*.xml"/> + </fileset> + </copy> + <sabbreak id="locker.partest.scalac"/> + <touch file="${build-quick.dir}/partest.complete" verbose="no"/> + <stopwatch name="quick.partest.timer" action="total"/> + </target> + + <target name="quick.pre-bin" depends="quick.partest"> + <condition property="quick.bin.available"> + <isset property="quick.comp.available"/> + </condition> + <path id="quick.bin.classpath"> + <pathelement location="${build-quick.dir}/classes/library"/> + <pathelement location="${build-quick.dir}/classes/compiler"/> <pathelement location="${fjbg.jar}"/> + <pathelement location="${jline.jar}"/> + </path> + </target> + + <target name="quick.bin" depends="quick.pre-bin" unless="quick.bin.available"> + <mkdir dir="${build-quick.dir}/bin"/> + <taskdef name="quick-bin" classname="scala.tools.ant.ScalaTool"> + <classpath> + <pathelement location="${build-quick.dir}/classes/library"/> + <pathelement location="${build-quick.dir}/classes/compiler"/> + </classpath> + </taskdef> + <quick-bin + file="${build-quick.dir}/bin/scala" + class="scala.tools.nsc.MainGenericRunner" + javaFlags="${java.flags}" + classpathref="quick.bin.classpath"/> + <quick-bin + file="${build-quick.dir}/bin/scalac" + class="scala.tools.nsc.Main" + javaFlags="${java.flags}" + classpathref="quick.bin.classpath"/> + <quick-bin + file="${build-quick.dir}/bin/scaladoc" + class="scala.tools.nsc.ScalaDoc" + javaFlags="${java.flags}" + classpathref="quick.bin.classpath"/> + <quick-bin + file="${build-quick.dir}/bin/fsc" + class="scala.tools.nsc.CompileClient" + javaFlags="${java.flags}" + classpathref="quick.bin.classpath"/> + <chmod perm="ugo+rx" file="${build-quick.dir}/bin/scala"/> + <chmod perm="ugo+rx" file="${build-quick.dir}/bin/scalac"/> + <chmod perm="ugo+rx" file="${build-quick.dir}/bin/scaladoc"/> + <chmod perm="ugo+rx" file="${build-quick.dir}/bin/fsc"/> + <touch file="${build-quick.dir}/bin.complete" verbose="no"/> + </target> + + <target name="quick.done" depends="quick.bin"/> + + <target name="quick.clean" depends="pack.clean"> + <delete dir="${build-quick.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> + </target> + +<!-- =========================================================================== +PACKED QUICK BUILD (PACK) +============================================================================ --> + + <target name="pack.start" depends="quick.done"/> + + <target name="pack.pre-lib" depends="pack.start"> + <uptodate + property="pack.lib.available" + targetfile="${build-pack.dir}/lib/scala-library.jar" + srcfile="${build-quick.dir}/library.complete"/> + </target> + + <target name="pack.lib" depends="pack.pre-lib" unless="pack.lib.available"> + <mkdir dir="${build-pack.dir}/lib"/> + <jar destfile="${build-pack.dir}/lib/scala-library.jar"> + <fileset dir="${build-quick.dir}/classes/library"> + <exclude name="scala/dbc/**"/> + </fileset> + </jar> + <jar destfile="${build-pack.dir}/lib/scala-dbc.jar"> + <fileset dir="${build-quick.dir}/classes/library"> + <include name="scala/dbc/**"/> + </fileset> + </jar> + </target> + + <target name="pack.pre-comp" depends="pack.lib"> + <uptodate + property="pack.comp.available" + targetfile="${build-pack.dir}/lib/scala-compiler.jar" + srcfile="${build-quick.dir}/compiler.complete"/> + </target> + + <target name="pack.comp" depends="pack.pre-comp" unless="pack.comp.available"> + <mkdir dir="${build-pack.dir}/lib"/> + <jar destfile="${build-pack.dir}/lib/scala-compiler.jar"> + <fileset dir="${build-quick.dir}/classes/compiler"/> + <zipfileset src="${fjbg.jar}"/> + <zipfileset src="${msil.jar}"/> + </jar> + </target> + + <target name="pack.pre-partest" depends="pack.comp"> + <uptodate + property="pack.partest.available" + targetfile="${build-pack.dir}/lib/scala-partest.jar" + srcfile="${build-quick.dir}/partest.complete"/> + </target> + + <target name="pack.partest" depends="pack.pre-partest" unless="pack.partest.available"> + <mkdir dir="${build-pack.dir}/lib"/> + <jar destfile="${build-pack.dir}/lib/scala-partest.jar"> + <fileset dir="${build-quick.dir}/classes/partest"/> + </jar> + </target> + + <target name="pack.pre-bin" depends="pack.partest"> + <uptodate + property="pack.bin.available" + srcfile="${build-pack.dir}/lib/scala-compiler.jar" + targetfile="${build-pack.dir}/bin.complete"/> + <taskdef name="pack-bin" classname="scala.tools.ant.ScalaTool"> + <classpath> + <pathelement location="${build-pack.dir}/lib/scala-library.jar"/> + <pathelement location="${build-pack.dir}/lib/scala-compiler.jar"/> + </classpath> + </taskdef> + </target> + + <target name="pack.bin" depends="pack.pre-bin" unless="pack.bin.available"> + <mkdir dir="${build-pack.dir}/bin"/> + <pack-bin + file="${build-pack.dir}/bin/scala" + class="scala.tools.nsc.MainGenericRunner" + javaFlags="${java.flags}"/> + <pack-bin + file="${build-pack.dir}/bin/scalac" + class="scala.tools.nsc.Main" + javaFlags="${java.flags}"/> + <pack-bin + file="${build-pack.dir}/bin/scaladoc" + class="scala.tools.nsc.ScalaDoc" + javaFlags="${java.flags}"/> + <pack-bin + file="${build-pack.dir}/bin/fsc" + class="scala.tools.nsc.CompileClient" + javaFlags="${java.flags}"/> + <chmod perm="ugo+rx" file="${build-pack.dir}/bin/scala"/> + <chmod perm="ugo+rx" file="${build-pack.dir}/bin/scalac"/> + <chmod perm="ugo+rx" file="${build-pack.dir}/bin/scaladoc"/> + <chmod perm="ugo+rx" file="${build-pack.dir}/bin/fsc"/> + <touch file="${build-pack.dir}/bin.complete" verbose="no"/> + </target> + + <target name="pack.done" depends="pack.bin"> + <path id="pack.classpath"> + <pathelement location="${build-pack.dir}/lib/scala-library.jar"/> + <pathelement location="${build-pack.dir}/lib/scala-compiler.jar"/> + <pathelement location="${build-pack.dir}/lib/scala-partest.jar"/> <pathelement location="${ant.jar}"/> </path> - <taskdef resource="scala/tools/ant/antlib.xml" classpathref="quick.classpath"/> + <taskdef resource="scala/tools/ant/antlib.xml" classpathref="pack.classpath"/> + <taskdef resource="scala/tools/partest/antlib.xml" classpathref="pack.classpath"/> + </target> + + <target name="pack.clean" depends="strap.clean"> + <delete dir="${build-pack.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> </target> <!-- =========================================================================== -BUILD STRAP LAYER +BOOTSTRAPPING BUILD (STRAP) ============================================================================ --> - <target name="strap.init" depends="quick.load"> - <uptodate property="strap.available" targetfile="${build-strap.dir}/build.complete"> + <target name="strap.start" depends="pack.done"/> + + <target name="strap.pre-lib" depends="strap.start"> + <uptodate property="strap.lib.available" targetfile="${build-strap.dir}/library.complete"> <srcfiles dir="${src.dir}"> <include name="library/**"/> - <include name="compiler/**"/> <include name="dbc/**"/> <include name="actors/**"/> </srcfiles> </uptodate> </target> - <target name="strap.build" depends="strap.init" unless="strap.available"> - <stopwatch name="strap.timer"/> - <!-- Build library --> + <target name="strap.lib" depends="strap.pre-lib" unless="strap.lib.available"> + <stopwatch name="strap.lib.timer"/> <mkdir dir="${build-strap.dir}/classes/library"/> <javac srcdir="${src.dir}/library" @@ -376,27 +611,32 @@ BUILD STRAP LAYER destdir="${build-strap.dir}/classes/library" classpath="${build-strap.dir}/classes/library" includes="**/*.java"/> - <sabmake id="quick.lib.scalac" + <scalac + srcdir="${src.dir}/library" destdir="${build-strap.dir}/classes/library" - compilerpathref="quick.classpath" - srcpath="${src.dir}/library"> - <compilationpath> - <pathelement location="${build-strap.dir}/classes/library"/> - </compilationpath> - </sabmake> - <sabuse id="quick.lib.scalac" srcdir="${src.dir}/library"> + classpath="${build-strap.dir}/classes/library" + sourcepath="${src.dir}/library"> <include name="scala/Predef.scala"/> - </sabuse> - <sabuse id="quick.lib.scalac" srcdir="${src.dir}/library"> + </scalac> + <scalac + srcdir="${src.dir}/library" + destdir="${build-strap.dir}/classes/library" + classpath="${build-strap.dir}/classes/library"> <include name="**/*.scala"/> <exclude name="scala/Predef.scala"/> - </sabuse> - <sabuse id="quick.lib.scalac" srcdir="${src.dir}/actors"> + </scalac> + <scalac + srcdir="${src.dir}/actors" + destdir="${build-strap.dir}/classes/library" + classpath="${build-strap.dir}/classes/library"> <include name="**/*.scala"/> - </sabuse> - <sabuse id="quick.lib.scalac" srcdir="${src.dir}/dbc"> + </scalac> + <scalac + srcdir="${src.dir}/dbc" + destdir="${build-strap.dir}/classes/library" + classpath="${build-strap.dir}/classes/library"> <include name="**/*.scala"/> - </sabuse> + </scalac> <propertyfile file="${build-strap.dir}/classes/library/library.properties"> <entry key="version.number" value="${version.number}"/> <entry key="copyright.string" value="${copyright.string}"/> @@ -409,25 +649,32 @@ BUILD STRAP LAYER <include name="**/*.css"/> </fileset> </copy> - <sabbreak id="quick.lib.scalac"/> - <!-- Build compiler --> + <touch file="${build-strap.dir}/library.complete" verbose="no"/> + <stopwatch name="strap.lib.timer" action="total"/> + </target> + + <target name="strap.pre-comp" depends="strap.lib"> + <uptodate property="strap.comp.available" targetfile="${build-strap.dir}/compiler.complete"> + <srcfiles dir="${src.dir}/compiler"/> + </uptodate> + </target> + + <target name="strap.comp" depends="strap.pre-comp" unless="strap.comp.available"> + <stopwatch name="strap.comp.timer"/> <mkdir dir="${build-strap.dir}/classes/compiler"/> - <sabmake id="quick.comp.scalac" - destdir="${build-strap.dir}/classes/compiler" - compilerpathref="quick.classpath" - srcpath="${src.dir}/compiler"> - <compilationpath> - <pathelement location="${build-strap.dir}/classes/library"/> - <pathelement location="${build-strap.dir}/classes/compiler"/> + <scalac + srcdir="${src.dir}/compiler" + destdir="${build-strap.dir}/classes/compiler"> + <include name="**/*.scala"/> + <classpath> + <pathelement location="${build-strap.dir}/classes/library"/> + <pathelement location="${build-strap.dir}/classes/compiler"/> <pathelement location="${fjbg.jar}"/> <pathelement location="${msil.jar}"/> <pathelement location="${jline.jar}"/> <pathelement location="${ant.jar}"/> - </compilationpath> - </sabmake> - <sabuse id="quick.comp.scalac" srcdir="${src.dir}/compiler"> - <include name="**/*.scala"/> - </sabuse> + </classpath> + </scalac> <propertyfile file="${build-strap.dir}/classes/compiler/compiler.properties"> <entry key="version.number" value="${version.number}"/> <entry key="copyright.string" value="${copyright.string}"/> @@ -440,140 +687,71 @@ BUILD STRAP LAYER <include name="**/*.css"/> </fileset> </copy> - <sabbreak id="quick.comp.scalac"/> - <!-- Timing the build --> - <touch file="${build-strap.dir}/build.complete" verbose="no"/> - <stopwatch name="strap.timer" action="total"/> + <touch file="${build-strap.dir}/compiler.complete" verbose="no"/> + <stopwatch name="strap.comp.timer" action="total"/> </target> - <target name="strap.load" depends="strap.build"/> - -<!-- =========================================================================== -BUILD PARTEST -============================================================================ --> - - <target name="partest.init" depends="quick.load"> - <uptodate property="partest.available" targetfile="${build-partest.dir}/build.complete"> + <target name="strap.pre-partest" depends="strap.comp"> + <uptodate property="strap.partest.available" targetfile="${build-strap.dir}/partest.complete"> <srcfiles dir="${src.dir}/partest"/> </uptodate> </target> - <target name="partest.build" depends="partest.init" unless="partest.available"> - <mkdir dir="${build-partest.dir}/classes"/> + <target name="strap.partest" depends="strap.pre-partest" unless="strap.partest.available"> + <stopwatch name="strap.partest.timer"/> + <mkdir dir="${build-strap.dir}/classes/partest"/> <javac srcdir="${src.dir}/partest" - destdir="${build-partest.dir}/classes"> + destdir="${build-strap.dir}/classes/partest"> <classpath> - <path refid="quick.classpath"/> - <pathelement location="${build-partest.dir}/classes"/> + <pathelement location="${build-strap.dir}/classes/library"/> + <pathelement location="${build-strap.dir}/classes/compiler"/> + <pathelement location="${build-strap.dir}/classes/partest"/> </classpath> <include name="**/*.java"/> </javac> <scalac srcdir="${src.dir}/partest" - destdir="${build-partest.dir}/classes"> + destdir="${build-strap.dir}/classes/partest"> + <include name="**/*.scala"/> <classpath> - <path refid="quick.classpath"/> - <pathelement location="${build-partest.dir}/classes"/> + <pathelement location="${build-strap.dir}/classes/library"/> + <pathelement location="${build-strap.dir}/classes/compiler"/> + <pathelement location="${build-strap.dir}/classes/partest"/> + <pathelement location="${ant.jar}"/> </classpath> - <include name="**/*.scala"/> </scalac> - <copy todir="${build-partest.dir}/classes"> + <copy todir="${build-strap.dir}/classes/partest"> <fileset dir="${src.dir}/partest"> <include name="**/*.xml"/> </fileset> </copy> - <touch file="${build-partest.dir}/build.complete" verbose="no"/> + <touch file="${build-strap.dir}/partest.complete" verbose="no"/> + <stopwatch name="strap.partest.timer" action="total"/> </target> - <target name="partest.load" depends="partest.build"/> + <target name="strap.done" depends="strap.partest"/> + + <target name="strap.clean"> + <delete dir="${build-strap.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> + </target> <!-- =========================================================================== -MAKE MODEL DISTRIBUTION +DOCUMENTATION ============================================================================ --> - <target name="pack.init" depends="quick.load, partest.load"> - <uptodate property="pack.available" targetfile="${build-quick.dir}/pack.complete"> - <srcfiles dir="${build.dir}"> - <include name="*/build.complete"/> + <target name="docs.start" depends="pack.done"> + <uptodate property="docs.available" targetfile="${build-docs.dir}/build.complete"> + <srcfiles dir="${src.dir}"> + <include name="library/**"/> + <include name="dbc/**"/> + <include name="actors/**"/> </srcfiles> </uptodate> </target> - - <target name="pack.build" depends="pack.init" unless="pack.available"> - <!-- Packages libraries --> - <mkdir dir="${build-quick.dir}/lib"/> - <jar destfile="${build-quick.dir}/lib/scala-library.jar"> - <fileset dir="${build-quick.dir}/classes/library"> - <exclude name="scala/dbc/**"/> - </fileset> - </jar> - <jar destfile="${build-quick.dir}/lib/scala-dbc.jar"> - <fileset dir="${build-quick.dir}/classes/library"> - <include name="scala/dbc/**"/> - </fileset> - </jar> - <jar destfile="${build-quick.dir}/lib/scala-compiler.jar"> - <fileset dir="${build-quick.dir}/classes/compiler"/> - <zipfileset src="${fjbg.jar}"/> - <zipfileset src="${msil.jar}"/> - </jar> - <jar destfile="${build-quick.dir}/lib/scala-partest.jar"> - <fileset dir="${build-partest.dir}/classes"/> - </jar> - <!-- Make executables --> - <mkdir dir="${build-quick.dir}/bin"/> - <scalatool - file="${build-quick.dir}/bin/scala" - name="Scala code runner" - class="scala.tools.nsc.MainGenericRunner" - version="${version.number}" - copyright="${copyright.string}" - javaFlags="${java.flags}"/> - <scalatool - file="${build-quick.dir}/bin/scalac" - name="Scala compiler" - class="scala.tools.nsc.Main" - version="${version.number}" - copyright="${copyright.string}" - javaFlags="${java.flags}"/> - <scalatool - file="${build-quick.dir}/bin/scaladoc" - name="Scala doc generator" - class="scala.tools.nsc.ScalaDoc" - version="${version.number}" - copyright="${copyright.string}" - javaFlags="${java.flags}"/> - <scalatool - file="${build-quick.dir}/bin/fsc" - name="Fast Scala compiler" - class="scala.tools.nsc.CompileClient" - version="${version.number}" - copyright="${copyright.string}" - javaFlags="${java.flags}"/> - <chmod perm="ugo+rx" file="${build-quick.dir}/bin/scala"/> - <chmod perm="ugo+rx" file="${build-quick.dir}/bin/scalac"/> - <chmod perm="ugo+rx" file="${build-quick.dir}/bin/scaladoc"/> - <chmod perm="ugo+rx" file="${build-quick.dir}/bin/fsc"/> - <!-- Point to latest --> - <touch file="${build-quick.dir}/pack.complete" verbose="no"/> - </target> - <target name="pack.load" depends="pack.build"> - <path id="pack.classpath"> - <pathelement location="${build-quick.dir}/lib/scala-library.jar"/> - <pathelement location="${build-quick.dir}/lib/scala-compiler.jar"/> - <pathelement location="${build-quick.dir}/lib/scala-partest.jar"/> - <pathelement location="${ant.jar}"/> - </path> - </target> - -<!-- =========================================================================== -BUILD DOCUMENTATION -============================================================================ --> - - <target name="docs.init" depends="quick.load"> - <uptodate property="docs.available" targetfile="${build-docs.dir}/build.complete"> + <target name="docs.pre-lib" depends="docs.start"> + <uptodate property="docs.lib.available" targetfile="${build-docs.dir}/library.complete"> <srcfiles dir="${src.dir}"> <include name="library/**"/> <include name="dbc/**"/> @@ -582,14 +760,14 @@ BUILD DOCUMENTATION </uptodate> </target> - <target name="docs.build" depends="docs.init" unless="docs.available"> - <stopwatch name="docs.timer"/> - <mkdir dir="${build-docs.dir}"/> + <target name="docs.lib" depends="docs.pre-lib" unless="docs.lib.available"> + <stopwatch name="docs.lib.timer"/> + <mkdir dir="${build-docs.dir}/library"/> <scaladoc - destdir="${build-docs.dir}" + destdir="${build-docs.dir}/library" windowtitle="Scala Library" doctitle="Scala ${version.number} API" - classpathref="quick.classpath"> + classpathref="pack.classpath"> <src> <files includes="${src.dir}/dbc"/> <files includes="${src.dir}/actors"/> @@ -597,27 +775,50 @@ BUILD DOCUMENTATION </src> <include name="**/*.scala"/> </scaladoc> - <touch file="${build-docs.dir}/build.complete" verbose="no"/> - <stopwatch name="docs.timer" action="total"/> + <touch file="${build-docs.dir}/lib.complete" verbose="no"/> + <stopwatch name="docs.lib.timer" action="total"/> </target> - <target name="docs.load" depends="docs.build"/> + <target name="docs.pre-comp" depends="docs.lib"> + <uptodate property="docs.comp.available" targetfile="${build-docs.dir}/compiler.complete"> + <srcfiles dir="${src.dir}/compiler"/> + </uptodate> + </target> + <target name="docs.comp" depends="docs.pre-comp" unless="docs.comp.available"> + <stopwatch name="docs.comp.timer"/> + <mkdir dir="${build-docs.dir}/compiler"/> + <scaladoc + destdir="${build-docs.dir}/compiler" + windowtitle="Scala Compiler" + doctitle="Scala Compiler ${version.number} API" + classpathref="pack.classpath" + srcdir="${src.dir}/compiler"> + <include name="**/*.scala"/> + </scaladoc> + <touch file="${build-docs.dir}/comp.complete" verbose="no"/> + <stopwatch name="docs.comp.timer" action="total"/> + </target> + + <target name="docs.done" depends="docs.lib"/> + + <target name="docs.clean"> + <delete dir="${build-docs.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> + </target> + <!-- =========================================================================== BOOTRAPING TEST AND TEST SUITE ============================================================================ --> - - <target name="stability.test" depends="strap.load"> + + <target name="test.stability" depends="strap.done"> <same dir="${build-quick.dir}" todir="${build-strap.dir}" failondifferent="no"> <exclude name="**/*.properties"/> <exclude name="bin/**"/> - <exclude name="lib/**"/> - <exclude name="pack.complete"/> + <exclude name="*.complete"/> </same> </target> - <target name="suite.test" depends="partest.load, pack.load"> - <taskdef resource="scala/tools/partest/antlib.xml" classpathref="pack.classpath"/> + <target name="test.suite" depends="pack.done"> <partest showlog="yes" erroronfailed="yes"> <classpath> <path refid="pack.classpath"/> @@ -633,61 +834,40 @@ BOOTRAPING TEST AND TEST SUITE <residenttests dir="${test.dir}/files/res" includes="*.res"/> </partest> </target> - -<!-- =========================================================================== -MAKE SABBUS JAR (to remove once sabbus is part of starr library) -============================================================================ --> - <target name="sabbus.build" depends="starr.load"> - <taskdef resource="scala/tools/ant/antlib.xml" classpathref="starr.classpath"/> - <mkdir dir="${build.dir}/sabbus"/> - <scalac - srcdir="${src.dir}/compiler/scala/tools/ant/sabbus/" - destdir="${build.dir}/sabbus"> - <include name="*.scala"/> - <classpath> - <pathelement location="${lib.starr.jar}"/> - <pathelement location="${comp.starr.jar}"/> - <pathelement location="${ant.jar}"/> - </classpath> - </scalac> - <copy - file="${src.dir}/compiler/scala/tools/ant/sabbus/antlib.xml" - todir="${build.dir}/sabbus/scala/tools/ant/sabbus"/> - <jar - destfile="${lib.dir}/sabbus.jar" - basedir="${build.dir}/sabbus"/> - </target> - - <target name="sabbus.load" depends="sabbus.build"/> + <target name="test.done" depends="test.suite, test.stability"/> <!-- =========================================================================== -MAKE ACTUAL DISTRIBUTION +DISTRIBUTION ============================================================================ --> - <target name="dist.init" depends="docs.load, pack.load"/> - - <target name="dist.build" depends="dist.init" unless="dist.available"> + <target name="dist.start" depends="docs.done, pack.done"> <property name="dist.dir" value="${dists.dir}/scala-${version.number}"/> - <!-- Copy model --> + </target> + + <target name="dist.base" depends="dist.start"> <mkdir dir="${dist.dir}/lib"/> <copy toDir="${dist.dir}/lib"> - <fileset dir="${build-quick.dir}/lib"/> + <fileset dir="${build-pack.dir}/lib"/> </copy> <mkdir dir="${dist.dir}/bin"/> <copy toDir="${dist.dir}/bin"> - <fileset dir="${build-quick.dir}/bin"/> + <fileset dir="${build-pack.dir}/bin"/> </copy> <chmod perm="ugo+rx" file="${dist.dir}/bin/scala"/> <chmod perm="ugo+rx" file="${dist.dir}/bin/scalac"/> <chmod perm="ugo+rx" file="${dist.dir}/bin/scaladoc"/> <chmod perm="ugo+rx" file="${dist.dir}/bin/fsc"/> - <!-- Packages doc --> + </target> + + <target name="dist.doc" depends="dist.base"> <mkdir dir="${dist.dir}/doc/api"/> <copy toDir="${dist.dir}/doc/api"> - <fileset dir="${build-docs.dir}"/> + <fileset dir="${build-docs.dir}/library"/> </copy> - <!-- Packages source --> + </target> + + <target name="dist.src" depends="dist.doc"> <mkdir dir="${dist.dir}/src"/> <jar destfile="${dist.dir}/src/scala-library-src.jar"> <fileset dir="${src.dir}/library"/> @@ -701,56 +881,102 @@ MAKE ACTUAL DISTRIBUTION </jar> </target> - <target name="dist.latest" depends="dist.build" unless="os.win"> + <target name="dist.latest" depends="dist.src" unless="os.win"> <symlink link="${dists.dir}/latest" resource="${dist.dir}" overwrite="yes"/> </target> - <target name="dist.load" depends="stability.test, suite.test, dist.latest"/> + <target name="dist.done" depends="dist.latest"/> + + <target name="dist.clean"> + <delete dir="${dists.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> + </target> + +<!-- =========================================================================== +TEST AND DISTRIBUTION BUNDLE (ALL) +============================================================================ --> + + <target name="all.done" depends="dist.done, test.done"/> + + <target name="all.clean" depends="locker.clean, docs.clean, dist.clean"/> <!-- =========================================================================== -MAKE NEW STARR +STABLE REFERENCE (STARR) ============================================================================ --> - <target name="starr.init" depends="pack.load"/> + <target name="starr.start" depends="pack.done"/> - <target name="starr.build" depends="starr.init"> + <target name="starr.clean" depends="locker.clean, starr.start"> <delete file="${lib.starr.jar}"/> <delete file="${comp.starr.jar}"/> <delete file="${lib.dir}/scala-library-src.jar"/> + </target> + + <target name="starr.lib" depends="starr.clean"> <copy file="${build-quick.dir}/lib/scala-library.jar" toFile="${lib.starr.jar}"/> - <copy file="${build-quick.dir}/lib/scala-compiler.jar" toFile="${comp.starr.jar}"/> + </target> + + <target name="starr.comp" depends="starr.lib"> + <jar destfile="${comp.starr.jar}"> + <fileset dir="${build-quick.dir}/classes/compiler"/> + </jar> + </target> + + <target name="starr.src" depends="starr.comp"> <jar destfile="${lib.dir}/scala-library-src.jar"> <fileset dir="${src.dir}/library"/> <fileset dir="${src.dir}/actors"/> </jar> </target> + + <target name="starr.done" depends="starr.src"/> <!-- =========================================================================== -CLEAN +MISCELLANEOUS ============================================================================ --> - - <target name="locker.clean" depends="quick.clean"> - <delete dir="${build-locker.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> - </target> - - <target name="quick.clean" depends="strap.clean, partest.clean"> - <delete dir="${build-quick.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> + + <target name="graph.init"> + <taskdef name="vizant" classname="vizant.Vizant" classpath="${lib-ant.dir}/vizant.jar"/> </target> - - <target name="strap.clean"> - <delete dir="${build-strap.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> + + <target name="graph.clean" depends="graph.init"> + <vizant antfile="${ant.file}" outfile="${ant.project.name}.dot" from="starr.clean"/> </target> - - <target name="partest.clean"> - <delete dir="${build-partest.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> + + <target name="graph.all" depends="graph.init"> + <vizant antfile="${ant.file}" outfile="${ant.project.name}.dot" from="all.done"/> </target> - - <target name="docs.clean"> - <delete dir="${build-docs.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> + + <target name="graph.sabbus" depends="graph.init"> + <vizant antfile="${ant.file}" outfile="${ant.project.name}.dot"/> </target> - <target name="dists.clean"> - <delete dir="${dists.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> +<!-- =========================================================================== +MAKE SABBUS JAR (to remove once sabbus is part of starr library) +============================================================================ --> + + <target name="sabbus.start" depends="init"/> + + <target name="sabbus.build" depends="sabbus.start"> + <taskdef resource="scala/tools/ant/antlib.xml" classpathref="starr.classpath"/> + <mkdir dir="${build.dir}/sabbus"/> + <scalac + srcdir="${src.dir}/compiler/scala/tools/ant/sabbus/" + destdir="${build.dir}/sabbus"> + <include name="*.scala"/> + <classpath> + <pathelement location="${lib.starr.jar}"/> + <pathelement location="${comp.starr.jar}"/> + <pathelement location="${ant.jar}"/> + </classpath> + </scalac> + <copy + file="${src.dir}/compiler/scala/tools/ant/sabbus/antlib.xml" + todir="${build.dir}/sabbus/scala/tools/ant/sabbus"/> + <jar + destfile="${lib.dir}/sabbus.jar" + basedir="${build.dir}/sabbus"/> </target> - + + <target name="sabbus.done" depends="sabbus.build"/> + </project> |