diff options
-rw-r--r-- | sabbus.xml | 484 | ||||
-rw-r--r-- | src/partest/scala/tools/partest/PartestTask.scala | 21 | ||||
-rw-r--r-- | src/partest/scala/tools/partest/nest/ConsoleFileManager.scala | 12 | ||||
-rw-r--r-- | src/partest/scala/tools/partest/nest/ReflectiveRunner.scala | 11 | ||||
-rw-r--r-- | src/partest/scala/tools/partest/nest/StreamAppender.scala | 5 | ||||
-rw-r--r-- | src/partest/scala/tools/partest/nest/Worker.scala | 23 | ||||
-rw-r--r-- | test/files/res/bug597.res | 4 | ||||
-rw-r--r-- | test/files/res/bug687.check | 2 | ||||
-rw-r--r-- | test/files/res/bug687.res | 6 | ||||
-rw-r--r-- | test/files/res/bug722.res | 4 | ||||
-rw-r--r-- | test/files/res/bug735.res | 4 | ||||
-rw-r--r-- | test/files/res/bug743.res | 4 | ||||
-rw-r--r-- | test/files/res/bug785.res | 4 | ||||
-rw-r--r-- | test/files/res/bug831.res | 4 | ||||
-rwxr-xr-x | test/scalatest | 4 |
15 files changed, 355 insertions, 237 deletions
diff --git a/sabbus.xml b/sabbus.xml index de9fd149da..a215d060b8 100644 --- a/sabbus.xml +++ b/sabbus.xml @@ -5,8 +5,37 @@ <description> I am SuperSABBUS for Scala core, the fast but simple version of SABBUS. </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="clean" depends="quick.clean" + description="Removes binaries of compiler and library. Distributions are untouched."/> + + <target name="test" depends="suite.test, stability.test" + description="Runs test suite and bootstrapping test on Scala compiler and library."/> - <echo message="SuperSABBUS is BETA: quality cannot be inferred from its result"/> + <target name="docs" depends="" + description="Builds documentation for Scala library. Scaladoc is in 'build/scaladoc'."/> + + <target name="docsclean" depends="docs.clean" + description="Removes generated documentation. Distributions are untouched."/> + + <target name="dist" + 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> + </target> + + <target name="distclean" depends="dists.clean" + description="Removes all distributions. Binaries and documentation are untouched."/> <!-- =========================================================================== PROPERTIES @@ -41,12 +70,14 @@ PROPERTIES <property name="build-locker.dir" value="${build.dir}/locker"/> <property name="build-quick.dir" value="${build.dir}/quick"/> <property name="build-strap.dir" value="${build.dir}/strap"/> - <property name="build-docs.dir" value="${build.dir}/scaladoc"/> <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"/> <property name="copyright.string" value="Copyright 2002-2008, LAMP/EPFL"/> + + <property name="java.flags" value="-Xmx256M -Xms16M"/> <!-- =========================================================================== INITIALISATION @@ -57,7 +88,6 @@ INITIALISATION <taskdef resource="net/sf/antcontrib/antlib.xml" classpath="${ant-contrib.jar}"/> <!-- This is the start time for the distribution --> - <stopwatch name="timer.dist"/> <tstamp prefix="time"> <format property="human" pattern="EEEE, d MMMM yyyy, HH:mm:ss (zz)"/> <format property="short" pattern="yyyyMMddHHmmss"/> @@ -81,7 +111,13 @@ 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 SVN revision ${svn.number}"/> - <!-- Creating class-pathes --> + </target> + +<!-- =========================================================================== +LOAD STABLE REFERENCE (STARR) LAYER +============================================================================ --> + + <target name="starr.load" depends="init"> <path id="starr.classpath"> <pathelement location="${lib.starr.jar}"/> <pathelement location="${comp.starr.jar}"/> @@ -89,41 +125,34 @@ INITIALISATION <pathelement location="${fjbg.jar}"/> <pathelement location="${ant.jar}"/> </path> - <!-- Creating boot-level tasks --> <taskdef resource="scala/tools/ant/sabbus/antlib.xml" classpathref="starr.classpath"/> </target> <!-- =========================================================================== -BUILD EVERYTHING -============================================================================ --> - - <target name="build" depends="test, distribution.build"/> - -<!-- =========================================================================== BUILD LOCAL REFERENCE (LOCKER) LAYER ============================================================================ --> - <target name="locker.check" depends="init"> + <target name="locker.init" depends="starr.load"> <condition property="locker.available"> - <available file="${build-locker.dir}/complete"/> + <available file="${build-locker.dir}/build.complete"/> </condition> </target> - <target name="locker.build" depends="locker.check" unless="locker.available"> + <target name="locker.build" depends="locker.init" unless="locker.available"> <stopwatch name="locker.timer"/> <!-- Build library --> - <mkdir dir="${build-locker.dir}/lib/library"/> + <mkdir dir="${build-locker.dir}/classes/library"/> <javac srcdir="${src.dir}/library" - destdir="${build-locker.dir}/lib/library" - classpath="${build-locker.dir}/lib/library" + destdir="${build-locker.dir}/classes/library" + classpath="${build-locker.dir}/classes/library" includes="**/*.java"/> <sabmake id="starr.lib.scalac" - destdir="${build-locker.dir}/lib/library" + destdir="${build-locker.dir}/classes/library" compilerpathref="starr.classpath" srcpath="${src.dir}/library"> <compilationpath> - <pathelement location="${build-locker.dir}/lib/library"/> + <pathelement location="${build-locker.dir}/classes/library"/> </compilationpath> </sabmake> <sabuse id="starr.lib.scalac" srcdir="${src.dir}/library"> @@ -135,11 +164,11 @@ BUILD LOCAL REFERENCE (LOCKER) LAYER <exclude name="scala/dbc/**"/> <exclude name="scala/actors/**"/> </sabuse> - <propertyfile file="${build-locker.dir}/lib/library/library.properties"> + <propertyfile file="${build-locker.dir}/classes/library/library.properties"> <entry key="version.number" value="${version.number}"/> <entry key="copyright.string" value="${copyright.string}"/> </propertyfile> - <copy todir="${build-locker.dir}/lib/library"> + <copy todir="${build-locker.dir}/classes/library"> <fileset dir="${src.dir}/library"> <include name="**/*.tmpl"/> <include name="**/*.xml"/> @@ -147,17 +176,17 @@ BUILD LOCAL REFERENCE (LOCKER) LAYER <include name="**/*.css"/> </fileset> </copy> - <symlink link="${build-locker.dir}/lib/fjbg.jar" resource="${fjbg.jar}" overwrite="yes"/> + <symlink link="${build-locker.dir}/classes/fjbg.jar" resource="${fjbg.jar}" overwrite="yes"/> <sabbreak id="starr.lib.scalac"/> <!-- Build compiler --> - <mkdir dir="${build-locker.dir}/lib/compiler"/> + <mkdir dir="${build-locker.dir}/classes/compiler"/> <sabmake id="starr.comp.scalac" - destdir="${build-locker.dir}/lib/compiler" + destdir="${build-locker.dir}/classes/compiler" compilerpathref="starr.classpath" srcpath="${src.dir}/compiler"> <compilationpath> - <pathelement location="${build-locker.dir}/lib/library"/> - <pathelement location="${build-locker.dir}/lib/compiler"/> + <pathelement location="${build-locker.dir}/classes/library"/> + <pathelement location="${build-locker.dir}/classes/compiler"/> <pathelement location="${fjbg.jar}"/> <pathelement location="${msil.jar}"/> <pathelement location="${jline.jar}"/> @@ -167,11 +196,11 @@ BUILD LOCAL REFERENCE (LOCKER) LAYER <sabuse id="starr.comp.scalac" srcdir="${src.dir}/compiler"> <include name="**/*.scala"/> </sabuse> - <propertyfile file="${build-locker.dir}/lib/compiler/compiler.properties"> + <propertyfile file="${build-locker.dir}/classes/compiler/compiler.properties"> <entry key="version.number" value="${version.number}"/> <entry key="copyright.string" value="${copyright.string}"/> </propertyfile> - <copy todir="${build-locker.dir}/lib/compiler"> + <copy todir="${build-locker.dir}/classes/compiler"> <fileset dir="${src.dir}/compiler"> <include name="**/*.tmpl"/> <include name="**/*.xml"/> @@ -181,14 +210,14 @@ BUILD LOCAL REFERENCE (LOCKER) LAYER </copy> <sabbreak id="starr.comp.scalac"/> <!-- Timing the build --> - <touch file="${build-locker.dir}/complete" verbose="no"/> + <touch file="${build-locker.dir}/build.complete" verbose="no"/> <stopwatch name="locker.timer" action="total"/> </target> - <target name="locker.init" depends="locker.build"> + <target name="locker.load" depends="locker.build"> <path id="locker.classpath"> - <pathelement location="${build-locker.dir}/lib/library"/> - <pathelement location="${build-locker.dir}/lib/compiler"/> + <pathelement location="${build-locker.dir}/classes/library"/> + <pathelement location="${build-locker.dir}/classes/compiler"/> <pathelement location="${fjbg.jar}"/> <pathelement location="${ant.jar}"/> </path> @@ -198,8 +227,8 @@ BUILD LOCAL REFERENCE (LOCKER) LAYER BUILD QUICK LAYER ============================================================================ --> - <target name="quick.check" depends="locker.init"> - <uptodate property="quick.available" targetfile="${build-quick.dir}/complete"> + <target name="quick.init" depends="locker.load"> + <uptodate property="quick.available" targetfile="${build-quick.dir}/build.complete"> <srcfiles dir="${src.dir}"> <include name="library/**"/> <include name="compiler/**"/> @@ -209,25 +238,25 @@ BUILD QUICK LAYER </uptodate> </target> - <target name="quick.build" depends="quick.check" unless="quick.available"> + <target name="quick.build" depends="quick.init" unless="quick.available"> <stopwatch name="quick.timer"/> <!-- Build library --> - <mkdir dir="${build-quick.dir}/lib/library"/> + <mkdir dir="${build-quick.dir}/classes/library"/> <javac srcdir="${src.dir}/library" - destdir="${build-quick.dir}/lib/library" - classpath="${build-quick.dir}/lib/library" + destdir="${build-quick.dir}/classes/library" + classpath="${build-quick.dir}/classes/library" includes="**/*.java"/> <javac srcdir="${src.dir}/actors" - destdir="${build-quick.dir}/lib/library" - classpath="${build-quick.dir}/lib/library" + destdir="${build-quick.dir}/classes/library" + classpath="${build-quick.dir}/classes/library" includes="**/*.java"/> <sabmake id="locker.lib.scalac" - destdir="${build-quick.dir}/lib/library" + destdir="${build-quick.dir}/classes/library" compilerpathref="locker.classpath" srcpath="${src.dir}/library"> <compilationpath> - <pathelement location="${build-quick.dir}/lib/library"/> + <pathelement location="${build-quick.dir}/classes/library"/> </compilationpath> </sabmake> <sabuse id="locker.lib.scalac" srcdir="${src.dir}/library"> @@ -243,11 +272,11 @@ BUILD QUICK LAYER <sabuse id="locker.lib.scalac" srcdir="${src.dir}/dbc"> <include name="**/*.scala"/> </sabuse> - <propertyfile file="${build-quick.dir}/lib/library/library.properties"> + <propertyfile file="${build-quick.dir}/classes/library/library.properties"> <entry key="version.number" value="${version.number}"/> <entry key="copyright.string" value="${copyright.string}"/> </propertyfile> - <copy todir="${build-quick.dir}/lib/library"> + <copy todir="${build-quick.dir}/classes/library"> <fileset dir="${src.dir}/library"> <include name="**/*.tmpl"/> <include name="**/*.xml"/> @@ -255,17 +284,17 @@ BUILD QUICK LAYER <include name="**/*.css"/> </fileset> </copy> - <symlink link="${build-quick.dir}/lib/fjbg.jar" resource="${fjbg.jar}" overwrite="yes"/> + <symlink link="${build-quick.dir}/classes/fjbg.jar" resource="${fjbg.jar}" overwrite="yes"/> <sabbreak id="locker.lib.scalac"/> <!-- Build compiler --> - <mkdir dir="${build-quick.dir}/lib/compiler"/> + <mkdir dir="${build-quick.dir}/classes/compiler"/> <sabmake id="locker.comp.scalac" - destdir="${build-quick.dir}/lib/compiler" + destdir="${build-quick.dir}/classes/compiler" compilerpathref="locker.classpath" srcpath="${src.dir}/compiler"> <compilationpath> - <pathelement location="${build-quick.dir}/lib/library"/> - <pathelement location="${build-quick.dir}/lib/compiler"/> + <pathelement location="${build-quick.dir}/classes/library"/> + <pathelement location="${build-quick.dir}/classes/compiler"/> <pathelement location="${fjbg.jar}"/> <pathelement location="${msil.jar}"/> <pathelement location="${jline.jar}"/> @@ -275,11 +304,11 @@ BUILD QUICK LAYER <sabuse id="locker.comp.scalac" srcdir="${src.dir}/compiler"> <include name="**/*.scala"/> </sabuse> - <propertyfile file="${build-quick.dir}/lib/compiler/compiler.properties"> + <propertyfile file="${build-quick.dir}/classes/compiler/compiler.properties"> <entry key="version.number" value="${version.number}"/> <entry key="copyright.string" value="${copyright.string}"/> </propertyfile> - <copy todir="${build-quick.dir}/lib/compiler"> + <copy todir="${build-quick.dir}/classes/compiler"> <fileset dir="${src.dir}/compiler"> <include name="**/*.tmpl"/> <include name="**/*.xml"/> @@ -289,14 +318,14 @@ BUILD QUICK LAYER </copy> <sabbreak id="locker.comp.scalac"/> <!-- Timing the build --> - <touch file="${build-quick.dir}/complete" verbose="no"/> + <touch file="${build-quick.dir}/build.complete" verbose="no"/> <stopwatch name="quick.timer" action="total"/> </target> - <target name="quick.init" depends="quick.build"> + <target name="quick.load" depends="quick.build"> <path id="quick.classpath"> - <pathelement location="${build-quick.dir}/lib/library"/> - <pathelement location="${build-quick.dir}/lib/compiler"/> + <pathelement location="${build-quick.dir}/classes/library"/> + <pathelement location="${build-quick.dir}/classes/compiler"/> <pathelement location="${fjbg.jar}"/> <pathelement location="${ant.jar}"/> </path> @@ -307,8 +336,8 @@ BUILD QUICK LAYER BUILD STRAP LAYER ============================================================================ --> - <target name="strap.check" depends="quick.init"> - <uptodate property="strap.available" targetfile="${build-strap.dir}/complete"> + <target name="strap.init" depends="quick.load"> + <uptodate property="strap.available" targetfile="${build-strap.dir}/build.complete"> <srcfiles dir="${src.dir}"> <include name="library/**"/> <include name="compiler/**"/> @@ -318,25 +347,25 @@ BUILD STRAP LAYER </uptodate> </target> - <target name="strap.build" depends="strap.check" unless="strap.available"> + <target name="strap.build" depends="strap.init" unless="strap.available"> <stopwatch name="strap.timer"/> <!-- Build library --> - <mkdir dir="${build-strap.dir}/lib/library"/> + <mkdir dir="${build-strap.dir}/classes/library"/> <javac srcdir="${src.dir}/library" - destdir="${build-strap.dir}/lib/library" - classpath="${build-strap.dir}/lib/library" + destdir="${build-strap.dir}/classes/library" + classpath="${build-strap.dir}/classes/library" includes="**/*.java"/> <javac srcdir="${src.dir}/actors" - destdir="${build-strap.dir}/lib/library" - classpath="${build-strap.dir}/lib/library" + destdir="${build-strap.dir}/classes/library" + classpath="${build-strap.dir}/classes/library" includes="**/*.java"/> <sabmake id="quick.lib.scalac" - destdir="${build-strap.dir}/lib/library" + destdir="${build-strap.dir}/classes/library" compilerpathref="quick.classpath" srcpath="${src.dir}/library"> <compilationpath> - <pathelement location="${build-strap.dir}/lib/library"/> + <pathelement location="${build-strap.dir}/classes/library"/> </compilationpath> </sabmake> <sabuse id="quick.lib.scalac" srcdir="${src.dir}/library"> @@ -352,11 +381,11 @@ BUILD STRAP LAYER <sabuse id="quick.lib.scalac" srcdir="${src.dir}/dbc"> <include name="**/*.scala"/> </sabuse> - <propertyfile file="${build-strap.dir}/lib/library/library.properties"> + <propertyfile file="${build-strap.dir}/classes/library/library.properties"> <entry key="version.number" value="${version.number}"/> <entry key="copyright.string" value="${copyright.string}"/> </propertyfile> - <copy todir="${build-strap.dir}/lib/library"> + <copy todir="${build-strap.dir}/classes/library"> <fileset dir="${src.dir}/library"> <include name="**/*.tmpl"/> <include name="**/*.xml"/> @@ -364,17 +393,17 @@ BUILD STRAP LAYER <include name="**/*.css"/> </fileset> </copy> - <symlink link="${build-strap.dir}/lib/fjbg.jar" resource="${fjbg.jar}" overwrite="yes"/> + <symlink link="${build-strap.dir}/classes/fjbg.jar" resource="${fjbg.jar}" overwrite="yes"/> <sabbreak id="quick.lib.scalac"/> <!-- Build compiler --> - <mkdir dir="${build-strap.dir}/lib/compiler"/> + <mkdir dir="${build-strap.dir}/classes/compiler"/> <sabmake id="quick.comp.scalac" - destdir="${build-strap.dir}/lib/compiler" + destdir="${build-strap.dir}/classes/compiler" compilerpathref="quick.classpath" srcpath="${src.dir}/compiler"> <compilationpath> - <pathelement location="${build-strap.dir}/lib/library"/> - <pathelement location="${build-strap.dir}/lib/compiler"/> + <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}"/> @@ -384,11 +413,11 @@ BUILD STRAP LAYER <sabuse id="quick.comp.scalac" srcdir="${src.dir}/compiler"> <include name="**/*.scala"/> </sabuse> - <propertyfile file="${build-strap.dir}/lib/compiler/compiler.properties"> + <propertyfile file="${build-strap.dir}/classes/compiler/compiler.properties"> <entry key="version.number" value="${version.number}"/> <entry key="copyright.string" value="${copyright.string}"/> </propertyfile> - <copy todir="${build-strap.dir}/lib/compiler"> + <copy todir="${build-strap.dir}/classes/compiler"> <fileset dir="${src.dir}/compiler"> <include name="**/*.tmpl"/> <include name="**/*.xml"/> @@ -398,195 +427,179 @@ BUILD STRAP LAYER </copy> <sabbreak id="quick.comp.scalac"/> <!-- Timing the build --> - <touch file="${build-strap.dir}/complete" verbose="no"/> + <touch file="${build-strap.dir}/build.complete" verbose="no"/> <stopwatch name="strap.timer" action="total"/> </target> + + <target name="strap.load" depends="strap.build"/> <!-- =========================================================================== -BUILD DOCUMENTATION +BUILD PARTEST ============================================================================ --> - <target name="doc.check" depends="quick.init"> - <uptodate property="doc.available" targetfile="${build-docs.dir}/complete"> - <srcfiles dir="${src.dir}"> - <include name="library/**"/> - <include name="dbc/**"/> - <include name="actors/**"/> - </srcfiles> + <target name="partest.init" depends="quick.load"> + <uptodate property="partest.available" targetfile="${build-partest.dir}/build.complete"> + <srcfiles dir="${src.dir}/partest"/> </uptodate> </target> - - <target name="doc.build" depends="doc.check" unless="doc.available"> - <stopwatch name="doc.timer"/> - <mkdir dir="${build-docs.dir}"/> - <scaladoc - srcdir="${src.dir}" - destdir="${build-docs.dir}" - windowtitle="Scala Library" - doctitle="Scala ${version.number} API" - classpathref="quick.classpath"> - <include name="dbc/**/*.scala"/> - <include name="actors/**/*.scala"/> - <include name="library/**/*.scala"/> - </scaladoc> - <touch file="${build-docs.dir}/complete" verbose="no"/> - <stopwatch name="doc.timer" action="total"/> + + <target name="partest.build" depends="partest.init" unless="partest.available"> + <mkdir dir="${build-partest.dir}/classes"/> + <javac + srcdir="${src.dir}/partest" + destdir="${build-partest.dir}/classes"> + <classpath> + <path refid="quick.classpath"/> + <pathelement location="${build-partest.dir}/classes"/> + </classpath> + <include name="**/*.java"/> + </javac> + <scalac + srcdir="${src.dir}/partest" + destdir="${build-partest.dir}/classes"> + <classpath> + <path refid="quick.classpath"/> + <pathelement location="${build-partest.dir}/classes"/> + </classpath> + <include name="**/*.scala"/> + </scalac> + <copy todir="${build-partest.dir}/classes"> + <fileset dir="${src.dir}/partest"> + <include name="**/*.xml"/> + </fileset> + </copy> + <touch file="${build-partest.dir}/build.complete" verbose="no"/> </target> + + <target name="partest.load" depends="partest.build"/> <!-- =========================================================================== -MAKE SMALL DISTRIBUTION +MAKE MODEL DISTRIBUTION ============================================================================ --> - <target name="dist.check" depends="quick.init, partest.build"> - <uptodate property="dist.available" targetfile="${dists.dir}/complete"> - <srcfiles file="${build-quick.dir}/complete"/> - <srcfiles file="${build-partest.dir}/complete"/> + <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"/> + </srcfiles> </uptodate> </target> - <target name="dist.build" depends="dist.check" unless="dist.available"> - <property name="dist.dir" value="${dists.dir}/scala-${version.number}"/> + <target name="pack.build" depends="pack.init" unless="pack.available"> <!-- Packages libraries --> - <mkdir dir="${dist.dir}/lib"/> - <jar destfile="${dist.dir}/lib/scala-library.jar" update="true"> - <fileset dir="${build-quick.dir}/lib/library"> + <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="${dist.dir}/lib/scala-dbc.jar" update="true"> - <fileset dir="${build-quick.dir}/lib/library"> + <jar destfile="${build-quick.dir}/lib/scala-dbc.jar"> + <fileset dir="${build-quick.dir}/classes/library"> <include name="scala/dbc/**"/> </fileset> </jar> - <jar destfile="${dist.dir}/lib/scala-compiler.jar" update="true"> - <fileset dir="${build-quick.dir}/lib/compiler"/> + <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="${dist.dir}/lib/scala-partest.jar" update="true"> - <fileset dir="${build-partest.dir}/lib"/> + <jar destfile="${build-quick.dir}/lib/scala-partest.jar"> + <fileset dir="${build-partest.dir}/classes"/> </jar> <!-- Make executables --> - <mkdir dir="${dist.dir}/bin"/> + <mkdir dir="${build-quick.dir}/bin"/> <scalatool - file="${dist.dir}/bin/scala" + file="${build-quick.dir}/bin/scala" name="Scala code runner" class="scala.tools.nsc.MainGenericRunner" - version="${version.number}"/> + version="${version.number}" + javaFlags="${java.flags}"/> <scalatool - file="${dist.dir}/bin/scalac" + file="${build-quick.dir}/bin/scalac" name="Scala compiler" class="scala.tools.nsc.Main" - version="${version.number}"/> + version="${version.number}" + javaFlags="${java.flags}"/> <scalatool - file="${dist.dir}/bin/scaladoc" + file="${build-quick.dir}/bin/scaladoc" name="Scala doc generator" class="scala.tools.nsc.Main" toolflags="-Ydoc" - version="${version.number}"/> + version="${version.number}" + javaFlags="${java.flags}"/> <scalatool - file="${dist.dir}/bin/fsc" + file="${build-quick.dir}/bin/fsc" name="Fast Scala compiler" class="scala.tools.nsc.CompileClient" - version="${version.number}"/> - <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"/> + version="${version.number}" + 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 --> - <symlink link="${dists.dir}/latest" resource="${dist.dir}" overwrite="yes"/> - <touch file="${dists.dir}/complete" verbose="no"/> + <touch file="${build-quick.dir}/pack.complete" verbose="no"/> </target> - <target name="dist.init" depends="dist.build"> - <path id="dist.classpath"> - <pathelement location="${dists.dir}/latest/lib/scala-library.jar"/> - <pathelement location="${dists.dir}/latest/lib/scala-compiler.jar"/> - <pathelement location="${dists.dir}/latest/lib/scala-partest.jar"/> + <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> <!-- =========================================================================== -COMPLETE SMALL DISTRIBUTION +BUILD DOCUMENTATION ============================================================================ --> - <target name="distribution.check" depends="doc.build, dist.build"> - </target> - - <target name="distribution.build" depends="distribution.check" unless="distribution.available"> - <!-- Packages doc --> - <mkdir dir="${dist.dir}/doc/api"/> - <copy toDir="${dist.dir}/doc/api"> - <fileset dir="${build-docs.dir}"/> - </copy> - <!-- Packages source --> - <mkdir dir="${dist.dir}/src"/> - <jar destfile="${dist.dir}/src/scala-library-src.jar" update="true"> - <fileset dir="${src.dir}/library"/> - <fileset dir="${src.dir}/actors"/> - </jar> - <jar destfile="${dist.dir}/src/scala-dbc-src.jar" update="true"> - <fileset dir="${src.dir}/dbc"/> - </jar> - <jar destfile="${dist.dir}/src/scala-compiler-src.jar" update="true"> - <fileset dir="${src.dir}/compiler"/> - </jar> - <touch file="${dists.dir}/complete-all" verbose="no"/> + <target name="docs.init" depends="quick.load"> + <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> -<!-- =========================================================================== -BUILD PARTEST -============================================================================ --> - - <target name="partest.check" depends="quick.init"> - </target> - - <target name="partest.build" depends="partest.check" unless="partest.available"> - <mkdir dir="${build-partest.dir}/lib"/> - <javac - srcdir="${src.dir}/partest" - destdir="${build-partest.dir}/lib"> - <classpath> - <path refid="quick.classpath"/> - <pathelement location="${build-partest.dir}/lib"/> - </classpath> - <include name="**/*.java"/> - </javac> - <scalac - srcdir="${src.dir}/partest" - destdir="${build-partest.dir}/lib"> - <classpath> - <path refid="quick.classpath"/> - <pathelement location="${build-partest.dir}/lib"/> - </classpath> - <include name="**/*.scala"/> - </scalac> - <copy todir="${build-partest.dir}/lib"> - <fileset dir="${src.dir}/partest"> - <include name="**/*.xml"/> - </fileset> - </copy> - <touch file="${build-partest.dir}/complete" verbose="no"/> + <target name="docs.build" depends="docs.init" unless="docs.available"> + <stopwatch name="docs.timer"/> + <mkdir dir="${build-docs.dir}"/> + <scaladoc + srcdir="${src.dir}" + destdir="${build-docs.dir}" + windowtitle="Scala Library" + doctitle="Scala ${version.number} API" + classpathref="quick.classpath"> + <include name="dbc/**/*.scala"/> + <include name="actors/**/*.scala"/> + <include name="library/**/*.scala"/> + </scaladoc> + <touch file="${build-docs.dir}/build.complete" verbose="no"/> + <stopwatch name="docs.timer" action="total"/> </target> - <target name="partest.init" depends="partest.build"/> + <target name="docs.load" depends="docs.build"/> <!-- =========================================================================== -TEST DISTRIBUTION +BOOTRAPING TEST AND TEST SUITE ============================================================================ --> - <target name="stability.test" depends="strap.build"> - <stopwatch name="stability.timer"/> + <target name="stability.test" depends="strap.load"> <same dir="${build-quick.dir}" todir="${build-strap.dir}" failondifferent="no"> <exclude name="**/*.properties"/> </same> - <stopwatch name="stability.timer" action="total"/> </target> - <target name="suite.test" depends="partest.init, dist.init"> - <taskdef resource="scala/tools/partest/antlib.xml" classpathref="dist.classpath"/> - <partest classpathref="dist.classpath" showlog="yes"> + <target name="suite.test" depends="partest.load, pack.load"> + <taskdef resource="scala/tools/partest/antlib.xml" classpathref="pack.classpath"/> + <partest showlog="yes"> + <classpath> + <path refid="pack.classpath"/> + <fileset dir="${test.dir}/files/lib" includes="*.jar"/> + </classpath> <postests dir="${test.dir}/files/pos" includes="*.scala"/> <negtests dir="${test.dir}/files/neg" includes="*.scala"/> <runtests dir="${test.dir}/files"> @@ -594,16 +607,15 @@ TEST DISTRIBUTION <include name="jvm/**/*.scala"/> <include name="jvm5/**/*.scala"/> </runtests> + <residenttests dir="${test.dir}/files/res" includes="*.res"/> </partest> </target> - <target name="test" depends="stability.test, suite.test"/> - <!-- =========================================================================== MAKE SABBUS JAR (to remove once sabbus is part of starr library) ============================================================================ --> - <target name="sabbus.build" depends="quick.init"> + <target name="sabbus.build" depends="quick.load"> <mkdir dir="${build.dir}/sabbus"/> <scalac srcdir="${src.dir}/compiler/scala/tools/ant/sabbus/" @@ -623,22 +635,76 @@ MAKE SABBUS JAR (to remove once sabbus is part of starr library) basedir="${build.dir}/sabbus"/> </target> - <target name="sabbus.init" depends="sabbus.build"> + <target name="sabbus.load" depends="sabbus.build"/> + +<!-- =========================================================================== +MAKE ACTUAL DISTRIBUTION +============================================================================ --> + + <target name="dist.init" depends="docs.load, pack.load"/> + <target name="dist.build" depends="dist.init" unless="dist.available"> + <property name="dist.dir" value="${dists.dir}/scala-${version.number}"/> + <!-- Copy model --> + <mkdir dir="${dist.dir}/lib"/> + <copy toDir="${dist.dir}/lib"> + <fileset dir="${build-quick.dir}/lib"/> + </copy> + <mkdir dir="${dist.dir}/bin"/> + <copy toDir="${dist.dir}/bin"> + <fileset dir="${build-quick.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 --> + <mkdir dir="${dist.dir}/doc/api"/> + <copy toDir="${dist.dir}/doc/api"> + <fileset dir="${build-docs.dir}"/> + </copy> + <!-- Packages source --> + <mkdir dir="${dist.dir}/src"/> + <jar destfile="${dist.dir}/src/scala-library-src.jar"> + <fileset dir="${src.dir}/library"/> + <fileset dir="${src.dir}/actors"/> + </jar> + <jar destfile="${dist.dir}/src/scala-dbc-src.jar"> + <fileset dir="${src.dir}/dbc"/> + </jar> + <jar destfile="${dist.dir}/src/scala-compiler-src.jar"> + <fileset dir="${src.dir}/compiler"/> + </jar> + <symlink link="${dists.dir}/latest" resource="${dist.dir}" overwrite="yes"/> </target> + + <target name="dist.load" depends="stability.test, suite.test, dist.build"/> <!-- =========================================================================== CLEAN ============================================================================ --> - <target name="build.clean" - description="Removes all build products"> - <delete dir="${build.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> + <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> + + <target name="strap.clean"> + <delete dir="${build-strap.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> + </target> + + <target name="partest.clean"> + <delete dir="${build-partest.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> + </target> + + <target name="docs.clean"> + <delete dir="${build-docs.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> </target> - <target name="clean" - description="Removes all build products and distributions"> - <delete dir="${build.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> + <target name="dists.clean"> <delete dir="${dists.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/> </target> diff --git a/src/partest/scala/tools/partest/PartestTask.scala b/src/partest/scala/tools/partest/PartestTask.scala index 6a6a0662c5..336272ccb2 100644 --- a/src/partest/scala/tools/partest/PartestTask.scala +++ b/src/partest/scala/tools/partest/PartestTask.scala @@ -27,6 +27,9 @@ class PartestTask extends Task { def addConfiguredRunTests(input: FileSet): Unit = runFiles = Some(input) + def addConfiguredResidentTests(input: FileSet): Unit = + residentFiles = Some(input) + def setClasspath(input: Path): Unit = if (classpath.isEmpty) classpath = Some(input) @@ -55,6 +58,7 @@ class PartestTask extends Task { private var posFiles: Option[FileSet] = None private var negFiles: Option[FileSet] = None private var runFiles: Option[FileSet] = None + private var residentFiles: Option[FileSet] = None private def getPosFiles: Array[File] = if (!posFiles.isEmpty) { @@ -80,6 +84,14 @@ class PartestTask extends Task { else Array() + private def getResidentFiles: Array[File] = + if (!residentFiles.isEmpty) { + val files = residentFiles.get + (files.getDirectoryScanner(getProject).getIncludedFiles map { fs => new File(files.getDir(getProject), fs) }) + } + else + Array() + override def execute(): Unit = { @@ -157,7 +169,14 @@ class PartestTask extends Task { allFailures += failures } - if ((getPosFiles.size + getNegFiles.size + getRunFiles.size) == 0) + if (getResidentFiles.size > 0) { + log("Running resident compiler scenarii") + val (successes, failures) = runTestsForFiles(getResidentFiles, "res") + allSucesses += successes + allFailures += failures + } + + if ((getPosFiles.size + getNegFiles.size + getRunFiles.size + getResidentFiles.size) == 0) log("There where no tests to run.") else if (allFailures == 0) log("Test suite finished with no failures.") diff --git a/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala b/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala index e68f3383b2..df7e2f78dc 100644 --- a/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala +++ b/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala @@ -64,6 +64,7 @@ else val bin = new File(PREFIX, "bin") if (dists.isDirectory) { + NestUI.verbose("Running on DISTRIBUTION") latestFile = prefixFile("dists/latest/bin") latestLibFile = prefixFile("dists/latest/lib/scala-library.jar") latestActFile = prefixFile("dists/latest/lib/scala-library.jar") @@ -71,7 +72,17 @@ else latestPartestFile = prefixFile("dists/latest/lib/scala-partest.jar") latestFjbgFile = prefixFile("lib/fjbg.jar") // starr } + else if (build.isDirectory && (new File(build, "quick/lib/scala-library.jar")).exists) { + NestUI.verbose("Running on SuperSABBUS QUICK") + latestFile = prefixFile("build/quick/bin") + latestLibFile = prefixFile("build/quick/lib/scala-library.jar") + latestActFile = prefixFile("build/quick/lib/scala-library.jar") + latestCompFile = prefixFile("build/quick/lib/scala-compiler.jar") + latestPartestFile = prefixFile("build/quick/lib/scala-partest.jar") + latestFjbgFile = prefixFile("lib/fjbg.jar") // starr + } else if (build.isDirectory) { + NestUI.verbose("Running on SABBUS QUICK") latestFile = prefixFile("build/quick/bin") latestLibFile = prefixFile("build/quick/lib/library") latestActFile = prefixFile("build/quick/lib/actors") @@ -80,6 +91,7 @@ else latestFjbgFile = prefixFile("lib/fjbg.jar") // starr } else if (bin.isDirectory) { + NestUI.verbose("Running on INSTALLED DIST") latestFile = prefixFile("bin") latestLibFile = prefixFile("lib/scala-library.jar") latestActFile = prefixFile("lib/scala-library.jar") diff --git a/src/partest/scala/tools/partest/nest/ReflectiveRunner.scala b/src/partest/scala/tools/partest/nest/ReflectiveRunner.scala index e65012c4f3..4b06d677ac 100644 --- a/src/partest/scala/tools/partest/nest/ReflectiveRunner.scala +++ b/src/partest/scala/tools/partest/nest/ReflectiveRunner.scala @@ -29,6 +29,12 @@ class ReflectiveRunner { latestFjbgFile.toURL) val sepLoader = new java.net.URLClassLoader(sepUrls, null) + val debug = System.getProperty("partest.debug", "false") equals "true" + if (debug) { + println("Loading classes from:") + sepUrls foreach { url => println(url) } + } + val sepRunnerClass = sepLoader.loadClass("scala.tools.partest.nest.ConsoleRunner") val sepRunner = sepRunnerClass.newInstance() @@ -39,11 +45,6 @@ class ReflectiveRunner { def main(args: String) { val cargs: Array[AnyRef] = Array(args) - val debug = System.getProperty("partest.debug", "false") equals "true" - if (debug) { - println("Loading classes from:") - sepUrls foreach { url => println(url) } - } sepMainMethod.invoke(sepRunner, cargs) } } diff --git a/src/partest/scala/tools/partest/nest/StreamAppender.scala b/src/partest/scala/tools/partest/nest/StreamAppender.scala index ffaa2dee53..62fd92b70d 100644 --- a/src/partest/scala/tools/partest/nest/StreamAppender.scala +++ b/src/partest/scala/tools/partest/nest/StreamAppender.scala @@ -74,11 +74,12 @@ object StreamAppender { } class StreamAppender(reader: BufferedReader, writer: PrintWriter) extends Runnable { - override def run() { + override def run() = runAndMap(identity) + def runAndMap(f:String=>String): Unit = { try { var line = reader.readLine() while (line != null) { - writer.println(line) + writer.println(f(line)) line = reader.readLine() } } catch { diff --git a/src/partest/scala/tools/partest/nest/Worker.scala b/src/partest/scala/tools/partest/nest/Worker.scala index 8a9af3a29d..ff55d8f06b 100644 --- a/src/partest/scala/tools/partest/nest/Worker.scala +++ b/src/partest/scala/tools/partest/nest/Worker.scala @@ -272,9 +272,10 @@ class Worker(val fileManager: FileManager) extends Actor { case "pos" => for (file <- files) { runInContext(file, kind, (logFile: File, outDir: File) => { - if (!compileMgr.shouldCompile(file, kind, logFile)) + if (!compileMgr.shouldCompile(file, kind, logFile)) { NestUI.verbose("compilation of "+file+" failed\n") succeeded = false + } }) } case "neg" => @@ -352,6 +353,7 @@ class Worker(val fileManager: FileManager) extends Actor { // create compiler val settings = new Settings(error) settings.sourcepath.value = sourcepath + settings.classpath.value = fileManager.CLASSPATH reporter = new ConsoleReporter(settings, Console.in, logConsoleWriter) val command = new CompilerCommand(argList, settings, error, false) object compiler extends Global(command.settings, reporter) @@ -361,7 +363,7 @@ class Worker(val fileManager: FileManager) extends Actor { val resCompile = (line: String) => { NestUI.verbose("compiling "+line) - val cmdArgs = List.fromString(line, ' ') + val cmdArgs = List.fromString(line, ' ') map { fs => new File(dir, fs).getAbsolutePath } val sett = new Settings(error) sett.sourcepath.value = sourcepath val command = new CompilerCommand(cmdArgs, sett, error, true) @@ -388,6 +390,23 @@ class Worker(val fileManager: FileManager) extends Actor { System.setOut(oldStdOut) System.setErr(oldStdErr) + val tempLogFile = new File(dir, ".temp.log") + val logFileReader = new BufferedReader(new FileReader(logFile)) + val tempLogFilePrinter = new PrintWriter(tempLogFile) + val appender = + new StreamAppender(logFileReader, tempLogFilePrinter) + appender.runAndMap({ s => s.replaceAll(dir.getAbsolutePath.replace(File.separatorChar,'/')+File.separator, "") }) + logFileReader.close() + tempLogFilePrinter.close() + + val tempLogFileReader = new BufferedReader(new FileReader(tempLogFile)) + val logFilePrinter = new PrintWriter(logFile) + (new StreamAppender(tempLogFileReader, logFilePrinter)).run + tempLogFileReader.close() + logFilePrinter.close() + + tempLogFile.delete() + diff = compareOutput(dir, fileBase, kind, logFile) if (!diff.equals("")) { NestUI.verbose("output differs from log file\n") diff --git a/test/files/res/bug597.res b/test/files/res/bug597.res index 1314e7b40b..0db355cd0f 100644 --- a/test/files/res/bug597.res +++ b/test/files/res/bug597.res @@ -1,2 +1,2 @@ -files/res/bug597/Test.scala -files/res/bug597/Main.scala +bug597/Test.scala +bug597/Main.scala diff --git a/test/files/res/bug687.check b/test/files/res/bug687.check index 8d3d3178cd..92e5e4e75d 100644 --- a/test/files/res/bug687.check +++ b/test/files/res/bug687.check @@ -1,6 +1,6 @@ nsc> -nsc> files/res/bug687/QueryB.scala:3: error: name clash between defined and inherited member: +nsc> bug687/QueryB.scala:3: error: name clash between defined and inherited member: method equals:(java.lang.Object)Boolean and method equals:(Any)Boolean in class Any have same type after erasure: (java.lang.Object)Boolean diff --git a/test/files/res/bug687.res b/test/files/res/bug687.res index 4421977bdc..ba8ba76995 100644 --- a/test/files/res/bug687.res +++ b/test/files/res/bug687.res @@ -1,3 +1,3 @@ -files/res/bug687/QueryA.scala -files/res/bug687/QueryB.scala -files/res/bug687/QueryA.scala +bug687/QueryA.scala +bug687/QueryB.scala +bug687/QueryA.scala diff --git a/test/files/res/bug722.res b/test/files/res/bug722.res index bc72066285..dbc785c171 100644 --- a/test/files/res/bug722.res +++ b/test/files/res/bug722.res @@ -1,2 +1,2 @@ -files/res/bug722/Parser.scala files/res/bug722/IfElse.scala -files/res/bug722/Parser.scala files/res/bug722/IfElse.scala +bug722/Parser.scala bug722/IfElse.scala +bug722/Parser.scala bug722/IfElse.scala diff --git a/test/files/res/bug735.res b/test/files/res/bug735.res index fa544ad080..d477e6fd47 100644 --- a/test/files/res/bug735.res +++ b/test/files/res/bug735.res @@ -1,2 +1,2 @@ -files/res/bug735/ScalaTyper.scala -files/res/bug735/ScalaTyper.scala +bug735/ScalaTyper.scala +bug735/ScalaTyper.scala diff --git a/test/files/res/bug743.res b/test/files/res/bug743.res index c8312a69bd..f1dd2462e4 100644 --- a/test/files/res/bug743.res +++ b/test/files/res/bug743.res @@ -1,2 +1,2 @@ -files/res/bug743/ParserXXX.scala -files/res/bug743/BracesXXX.scala +bug743/ParserXXX.scala +bug743/BracesXXX.scala diff --git a/test/files/res/bug785.res b/test/files/res/bug785.res index 6abf7ed236..7e5da1c453 100644 --- a/test/files/res/bug785.res +++ b/test/files/res/bug785.res @@ -1,2 +1,2 @@ -files/res/bug785/ScalaTrees.scala -files/res/bug785/ScalaTrees.scala +bug785/ScalaTrees.scala +bug785/ScalaTrees.scala diff --git a/test/files/res/bug831.res b/test/files/res/bug831.res index 807455d7da..0cc6c398ab 100644 --- a/test/files/res/bug831.res +++ b/test/files/res/bug831.res @@ -1,2 +1,2 @@ -files/res/bug831/NewScalaTestXXX.scala -files/res/bug831/NewScalaTestXXX.scala +bug831/NewScalaTestXXX.scala +bug831/NewScalaTestXXX.scala diff --git a/test/scalatest b/test/scalatest index 38bf934d94..ab823047f8 100755 --- a/test/scalatest +++ b/test/scalatest @@ -248,8 +248,8 @@ test_run_neg() { test_run_res() { rm -rf "$dstbase".obj && mkdir -p "$dstbase".obj && - #(cd "$srcdir" && cat "$testname".res | $SCALAC -d "$os_dstbase".obj -Xresident -sourcepath . "$@"; ); - (cd "$TESTROOT" && cat "$srcdir/$testname".res | $SCALAC -d "$os_dstbase".obj -Xresident -sourcepath "$srcdir" "$@"; ); + (cd "$srcdir" && cat "$testname".res | $SCALAC -d "$os_dstbase".obj -Xresident -sourcepath . "$@"; ); + #(cd "$TESTROOT" && cat "$srcdir/$testname".res | $SCALAC -d "$os_dstbase".obj -Xresident -sourcepath "$srcdir" "$@"; ); rm -rf "$dstbase".obj; } |