summaryrefslogtreecommitdiff
path: root/src/build
diff options
context:
space:
mode:
authormichelou <michelou@epfl.ch>2008-02-26 15:12:00 +0000
committermichelou <michelou@epfl.ch>2008-02-26 15:12:00 +0000
commitcf6f492cc7a52de05fb21c3acdc054039a301cd6 (patch)
tree8c39266c0b4b60b2c7ef416eb98a966fa7a5958b /src/build
parentfe0b578001f1f9a47c6e8d375382194474c75736 (diff)
downloadscala-cf6f492cc7a52de05fb21c3acdc054039a301cd6.tar.gz
scala-cf6f492cc7a52de05fb21c3acdc054039a301cd6.tar.bz2
scala-cf6f492cc7a52de05fb21c3acdc054039a301cd6.zip
added new Ant build script (beta)
Diffstat (limited to 'src/build')
-rw-r--r--src/build/build-android.xml195
-rw-r--r--src/build/build-cldc.xml249
-rw-r--r--src/build/build-imports.xml589
-rw-r--r--src/build/build-jvm14.xml346
-rw-r--r--src/build/build-jvm15.xml302
-rw-r--r--src/build/build-msil.xml215
6 files changed, 1896 insertions, 0 deletions
diff --git a/src/build/build-android.xml b/src/build/build-android.xml
new file mode 100644
index 0000000000..25d24c1186
--- /dev/null
+++ b/src/build/build-android.xml
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Id: $ -->
+
+<project name="scala-android" basedir="../.." default="build">
+
+<!-- ===========================================================================
+PROPERTIES
+============================================================================ -->
+
+ <import file="build-jvm15.xml"/>
+
+ <!-- Loads custom properties definitions -->
+ <property file="${basedir}/scripts/build-android.properties"/>
+
+ <!-- Sets location of build folders -->
+ <property name="build.dir" value="${basedir}/build"/>
+ <property name="android.dir" value="${build.dir}/android"/>
+ <property name="dist.dir" value="${basedir}/dists"/>
+
+<!-- ===========================================================================
+SETUP
+============================================================================ -->
+
+ <target name="android.init" depends="init">
+ <condition property="android.home" value="${unix.android.home}">
+ <and><os family="unix"/><isset property="unix.android.home"/></and>
+ </condition>
+ <condition property="android.home" value="${win.android.home}">
+ <and><os family="windows"/><isset property="win.android.home"/></and>
+ </condition>
+ <property name="android.home" value="${env.ANDROID_HOME}"/>
+
+ <fail message="Android home is not set or could not find android.jar in ${android.home}">
+ <condition><not><and>
+ <available file="${android.home}/android.jar"/>
+ <available file="${android.home}/tools/lib/dx.jar"/>
+ </and></not></condition>
+ </fail>
+ <property name="android.jar" value="${android.home}/android.jar"/>
+ <property name="tools.lib.dir" value="${android.home}/tools/lib"/>
+ <property name="dx.jar" value="${tools.lib.dir}/dx.jar"/>
+ <property file="${number.file}"/>
+ <property
+ name="version.number"
+ value="${version.major}.${version.minor}.${version.patch}.r${svn.number}-b${time.short}"/>
+ <echo level="verbose" message="${version.number}"/>
+ </target>
+
+ <target name="android.sources" depends="android.init"
+ description="Create the source directory for Android library"
+ >
+ <mkdir dir="${android.dir}/src"/>
+ <copy todir="${android.dir}/src">
+ <fileset dir="${src.dir}/library"
+ includes="**/*.scala, **/*.java"
+ excludes="scala/reflect/ScalaBeanInfo.scala">
+ <not>
+ <present targetdir="${src.dir}/android-library"/>
+ </not>
+ </fileset>
+ </copy>
+
+ <copy todir="${android.dir}/src">
+ <fileset dir="${src.dir}/android-library">
+ <include name="**/*.scala"/>
+ <include name="**/*.java"/>
+ </fileset>
+ </copy>
+ </target>
+
+ <target name="android.libraries" depends="android.sources"
+ description="Builds the Scala library for Android">
+ <antcall target="build.quick"/>
+ <property name="quick.dir" value="${build.dir}/quick"/>
+ <path id="quick.classpath">
+ <pathelement location="${quick.dir}/lib/library"/>
+ <pathelement location="${quick.dir}/lib/compiler"/>
+ <pathelement location="${fjbg.jar}"/>
+ <pathelement location="${msil.jar}"/>
+ </path>
+ <taskdef
+ name="quick" classname="scala.tools.ant.Scalac"
+ classpathref="quick.classpath"/>
+ <mkdir dir="${android.dir}/lib/library"/>
+ <javac
+ srcdir="${android.dir}/src"
+ destdir="${android.dir}/lib/library"
+ deprecation="${jc.deprecation}"
+ >
+ <bootclasspath>
+ <pathelement location="${android.jar}"/>
+ </bootclasspath>
+ <include name="**/*.java"/>
+ </javac>
+
+ <quick
+ srcdir="${android.dir}/src"
+ destdir="${android.dir}/lib/library"
+ usepredefs="no"
+ deprecation="yes" unchecked="yes"
+ addparams="${nsc.params}"
+ extdirs=""
+ scalacdebugging="${nsc.log-files}"
+ >
+ <bootclasspath>
+ <pathelement location="${android.jar}"/>
+ </bootclasspath>
+ <include name="scala/Predef.scala"/>
+ </quick>
+
+ <quick
+ srcdir="${android.dir}/src"
+ destdir="${android.dir}/lib/library"
+ deprecation="yes" unchecked="yes"
+ extdirs=""
+ addparams="${nsc.params}"
+ scalacdebugging="${nsc.log-files}"
+ >
+ <bootclasspath>
+ <pathelement location="${android.jar}"/>
+ </bootclasspath>
+ <classpath>
+ <pathelement location="${android.dir}"/>
+ </classpath>
+ <include name="**/*.scala"/>
+ <exclude name="scala/Predef.scala"/>
+ <excludesfile name="${nsc.excludes}" if="excludes.avail"/>
+ </quick>
+ </target>
+
+ <target name="android.build" depends="android.libraries"
+ description="Convert this project's .class files into .dex files">
+ <java jar="${dx.jar}" fork="true" failonerror="true">
+ <jvmarg value="-Djava.ext.dirs=${tools.lib.dir}"/>
+ <jvmarg value="-Xmx384M"/>
+ <arg value="--dex"/>
+ <arg value="--output=${android.dir}/lib/scala.dex"/>
+ <arg value="--locals=full"/>
+ <arg value="--positions=lines"/>
+ <arg value="${android.dir}/lib/library"/>
+ </java>
+ <jar
+ destfile="${android.dir}/lib/scala-dex.jar"
+ basedir="${android.dir}/lib"
+ includes="scala.dex"
+ />
+ <jar
+ destfile="${android.dir}/lib/scala-android.jar"
+ basedir="${android.dir}/lib/library"
+ includes="scala/**/*.class"
+ />
+ </target>
+
+ <target name="android.dist" depends="android.build">
+ <antcall target="binaries"/>
+ <property name="dist.current.dir" value="${dist.dir}/scala-android-${version.number}"/>
+ <mkdir dir="${dist.current.dir}"/>
+<!--
+ <copy todir="${dist.current.dir}/bin">
+ <fileset dir="${dist.dir}/latest/bin"/>
+ </copy>
+ <chmod perm="ugo+rx" dir="${dist.current.dir}/bin"/>
+ <copy todir="${dist.current.dir}/lib">
+ <fileset dir="${lib.dir}" includes="cldc*.jar,midp*.jar"/>
+ </copy>
+-->
+ <!-- Recreate the 'latest' link to point to this distribution -->
+ <if><isset property="os.win"/>
+ <then>
+ <copy todir="${dist.dir}/latest-android">
+ <fileset dir="${dist.current.dir}"/>
+ </copy>
+ </then>
+ <else>
+ <symlink
+ link="${dist.dir}/latest-android"
+ resource="${dist.current.dir}"
+ overwrite="yes" failonerror="no"/>
+ </else>
+ </if>
+ </target>
+
+<!-- ===========================================================================
+CLEAN
+============================================================================ -->
+
+ <target name="android.clean" depends="ant-init">
+ <remove dir="${build.dir}/android"/>
+ <delete includeemptydirs="true" quiet="yes" failonerror="no">
+ <fileset dir="@{dist.dir}" includes="**/scala-android*"/>
+ </delete>
+ <delete file="${dist.dir}/latest-android" quiet="yes" failonerror="no"/>
+ </target>
+
+</project>
diff --git a/src/build/build-cldc.xml b/src/build/build-cldc.xml
new file mode 100644
index 0000000000..7f9964af57
--- /dev/null
+++ b/src/build/build-cldc.xml
@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Id: $ -->
+
+<project name="scala-cldc" basedir="../.." default="build">
+
+<!-- ===========================================================================
+PROPERTIES
+============================================================================ -->
+
+ <import file="build-jvm14.xml"/>
+
+ <!-- Loads custom properties definitions -->
+ <property file="${scripts.dir}/scripts/build-cldc.properties"/>
+
+ <!-- Sets location of build folders -->
+ <property name="build.dir" value="${basedir}/build"/>
+ <property name="cldc.dir" value="${build.dir}/cldc"/>
+ <property name="dist.dir" value="${basedir}/dists"/>
+
+ <property name="cldcapi.jar" value="${lib.dir}/cldcapi10.jar"/>
+ <property name="midpapi.jar" value="${lib.dir}/midpapi10.jar"/>
+
+<!-- ===========================================================================
+SETUP
+============================================================================ -->
+
+ <target name="cldc.init" depends="init">
+ <!-- Sets preverify command (Java WTK) -->
+ <condition property="preverify.cmd" value="${unix.wtk.home}/bin/preverify">
+ <and>
+ <os family="unix"/><isset property="unix.wtk.home"/>
+ <available file="${unix.wtk.home}/bin/preverify"/>
+ </and>
+ </condition>
+ <condition property="preverify.cmd" value="${win.wtk.home}/preverify">
+ <and>
+ <os family="windows"/><isset property="win.wtk.home"/>
+ <available file="${win.wtk.home}/bin/preverify.exe"/>
+ </and>
+ </condition>
+ <echo level="verbose" message="Found: ${preverify.cmd}"/>
+ <condition property="preverify.cmd" value="preverify">
+ <and><available file="preverify" filepath="${env.PATH}"/></and>
+ </condition>
+ <fail message="Command 'preverify' not found">
+ <condition><not><isset property="preverify.cmd"/></not></condition>
+ </fail>
+ <property file="${number.file}"/>
+ <property
+ name="version.number"
+ value="${version.major}.${version.minor}.${version.patch}.r${svn.number}-b${time.short}"/>
+ <echo level="verbose" message="${version.number}"/>
+ </target>
+
+ <target name="cldc.sources" depends="cldc.init"
+ description="Create the source directory for the J2ME (CLDC) library"
+ >
+ <mkdir dir="${cldc.dir}/src"/>
+
+ <copy todir="${cldc.dir}/src">
+ <fileset dir="${src.dir}/library" includes="**/*.scala, **/*.java">
+ <not>
+ <present targetdir="${src.dir}/cldc-library"/>
+ </not>
+ <exclude name="**/jcl/**"/>
+ <exclude name="**/ref/**"/>
+ <exclude name="**/compat/**"/>
+ <exclude name="**/concurrent/**"/>
+ <exclude name="**/runtime/RichFloat.scala"/>
+ <exclude name="**/runtime/RichDouble.scala"/>
+ <exclude name="**/util/**"/>
+ <exclude name="**/xml/**"/>
+ </fileset>
+ </copy>
+
+ <copy todir="${cldc.dir}/src">
+ <fileset dir="${src.dir}/cldc-library">
+ <include name="**/*.scala"/>
+ <include name="**/*.java"/>
+ </fileset>
+ </copy>
+
+ </target>
+
+ <target name="cldc.libraries" depends="cldc.sources"
+ description="Builds the Scala library for J2ME (CLDC)"
+ >
+ <antcall target="build.quick"/>
+ <mkdir dir="${cldc.dir}/lib/library"/>
+ <!-- javac versions > 1.4 do not support 1.1 target anymore -->
+ <javac
+ srcdir="${cldc.dir}/src"
+ destdir="${cldc.dir}/lib/library"
+ compiler="javac1.4"
+ source="1.1"
+ target="1.1"
+ deprecation="${jc.deprecation}"
+ >
+ <bootclasspath>
+ <pathelement location="${cldcapi.jar}"/>
+ </bootclasspath>
+ <include name="**/*.java"/>
+ <exclude name="scala/runtime/FloatRef.java"/>
+ <exclude name="scala/runtime/DoubleRef.java"/>
+ </javac>
+ <property name="quick.dir" value="${build.dir}/quick"/>
+ <path id="quick.classpath">
+ <pathelement location="${quick.dir}/lib/library"/>
+ <pathelement location="${quick.dir}/lib/compiler"/>
+ <pathelement location="${fjbg.jar}"/>
+ <pathelement location="${msil.jar}"/>
+ </path>
+ <taskdef
+ name="quick" classname="scala.tools.ant.Scalac"
+ classpathref="quick.classpath"/>
+ <quick
+ srcdir="${cldc.dir}/src"
+ destdir="${cldc.dir}/lib/library"
+ usepredefs="no"
+ addparams="${nsc.params}"
+ target="cldc"
+ scalacdebugging="${nsc.log-files}"
+ >
+ <bootclasspath>
+ <pathelement location="${cldcapi.jar}"/>
+ </bootclasspath>
+ <classpath>
+ <pathelement location="${cldc.dir}"/>
+ </classpath>
+ <include name="scala/Predef.scala"/>
+ </quick>
+ <quick
+ srcdir="${cldc.dir}/src"
+ destdir="${cldc.dir}/lib/library"
+ target="cldc"
+ addparams="${nsc.params}"
+ scalacdebugging="${nsc.log-files}"
+ >
+ <bootclasspath>
+ <pathelement location="${cldcapi.jar}"/>
+ </bootclasspath>
+ <classpath>
+ <pathelement location="${cldc.dir}"/>
+ </classpath>
+ <include name="**/*.scala"/>
+ <exclude name="scala/Predef.scala"/>
+ <exclude name="scala/BigDecimal.scala"/>
+ <exclude name="scala/BigInt.scala"/>
+ <exclude name="scala/collection/mutable/JavaMapAdaptor.scala"/>
+ <exclude name="scala/collection/mutable/JavaSetAdaptor.scala"/>
+ <exclude name="scala/collection/mutable/LinkedHashSet.scala"/>
+ <exclude name="scala/util/Fluid.scala"/>
+ <exclude name="scala/runtime/BoxedFloatArray.scala"/>
+ <exclude name="scala/runtime/BoxedDoubleArray.scala"/>
+ <exclude name="scala/io/**"/>
+ <exclude name="scala/mobile/**"/>
+ <exclude name="scala/reflect/**"/>
+ <exclude name="scala/text/**"/>
+ <exclude name="scala/testing/**"/>
+ <exclude name="scala/xml/**"/>
+ <excludesfile name="${nsc.excludes}" if="excludes.avail"/>
+ </quick>
+ <macrodef name="preverify">
+ <attribute name="srcdir"/>
+ <attribute name="destdir"/>
+ <sequential>
+ <exec executable="${preverify.cmd}" failonerror="false">
+ <arg line="-classpath ${cldcapi.jar}${path.separator}${midpapi.jar}"/>
+ <arg line="-target cldc1.0"/>
+ <arg line="-d @{destdir}"/>
+ <arg value="@{srcdir}"/>
+ </exec>
+ </sequential>
+ </macrodef>
+ <mkdir dir="${cldc.dir}/lib/preverified"/>
+ <preverify
+ srcdir="${cldc.dir}/lib/library"
+ destdir="${cldc.dir}/lib/preverified"
+ />
+ <jar
+ destfile="${cldc.dir}/lib/scalaapi10-unverified.jar"
+ basedir="${cldc.dir}/lib/library"
+ includes="scala/**/*.class">
+ <manifest>
+ <attribute name="Created-By" value="${version.number} (${vendor.name})"/>
+ </manifest>
+ </jar>
+ <!-- see http://java.sun.com/j2me/docs/uei_specs.pdf -->
+ <jar
+ destfile="${cldc.dir}/lib/scalaapi10.jar"
+ basedir="${cldc.dir}/lib/preverified"
+ includes="scala/**/*.class">
+ <manifest>
+ <attribute name="Created-By" value="${version.number} (${vendor.name})"/>
+ <attribute name="API-Specification-Version" value="1.0"/>
+ <attribute name="API" value="Scala CLDC"/>
+ <attribute name="API-Name" value="Scala Connected Limited Device Configuration"/>
+ <attribute name="API-Type" value="Configuration"/>
+ </manifest>
+ </jar>
+ </target>
+
+ <target name="cldc.build" depends="cldc.libraries">
+ <!-- exemples ? -->
+ </target>
+
+ <target name="cldc.dist" depends="cldc.build">
+ <antcall target="binaries"/>
+ <property name="dist.current.dir" value="${dist.dir}/scala-cldc-${version.number}"/>
+ <mkdir dir="${dist.current.dir}"/>
+ <copy todir="${dist.current.dir}/bin">
+ <fileset dir="${dist.dir}/latest-jvm14/bin"/>
+ </copy>
+ <chmod perm="ugo+rx" dir="${dist.current.dir}/bin"/>
+ <copy todir="${dist.current.dir}/lib">
+ <fileset dir="${lib.dir}" includes="cldc*.jar,midp*.jar"/>
+ </copy>
+ <copy todir="${dist.current.dir}/lib">
+ <fileset dir="${dist.dir}/latest-jvm14/lib" includes="scala*.jar"/>
+ </copy>
+ <!-- Recreate the 'latest' link to point to this distribution -->
+ <if><isset property="os.win"/>
+ <then>
+ <copy todir="${dist.dir}/latest-cldc">
+ <fileset dir="${dist.current.dir}"/>
+ </copy>
+ </then>
+ <else>
+ <symlink
+ link="${dist.dir}/latest-cldc"
+ resource="${dist.current.dir}"
+ overwrite="yes" failonerror="no"/>
+ </else>
+ </if>
+ </target>
+
+<!-- ===========================================================================
+CLEAN
+============================================================================ -->
+
+ <target name="cldc.clean" depends="ant-init">
+ <remove dir="${build.dir}/cldc"/>
+ <delete includeemptydirs="true" quiet="yes" failonerror="no">
+ <fileset dir="@{dist.dir}" includes="**/scala-cldc*"/>
+ </delete>
+ <delete file="${dist.dir}/latest-cldc" quiet="yes" failonerror="no"/>
+ </target>
+
+</project>
diff --git a/src/build/build-imports.xml b/src/build/build-imports.xml
new file mode 100644
index 0000000000..9009967a33
--- /dev/null
+++ b/src/build/build-imports.xml
@@ -0,0 +1,589 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Id: $ -->
+
+<project name="build-imports" basedir="../.." default=".">
+
+ <property environment="env"/>
+
+ <!-- Prevents system classpath from being used -->
+ <property name="build.sysclasspath" value="ignore"/>
+
+ <!-- Defines the repository layout -->
+ <property name="lib.dir" value="${basedir}/lib"/>
+ <property name="src.dir" value="${basedir}/src"/>
+ <property name="test.dir" value="${basedir}/test"/>
+ <property name="docs.dir" value="${basedir}/docs"/>
+ <property name="scripts.dir" value="${src.dir}/build"/>
+
+ <!-- Loads custom properties definitions -->
+ <property file="${scripts.dir}/build-imports.properties"/>
+
+ <!-- Defines the product being built -->
+ <property name="vendor.name" value="LAMP/EPFL"/>
+ <property name="copyright.string" value="(c) 2002-2008 ${vendor.name}"/>
+ <property name="java.flags" value="-Xmx768M -Xms16M"/>
+ <property name="number.file" value="${basedir}/build.number"/>
+
+ <!-- Sets location of pre-compiled libraries -->
+ <property name="lib.starr.jar" value="${lib.dir}/scala-library.jar"/>
+ <property name="comp.starr.jar" value="${lib.dir}/scala-compiler.jar"/>
+ <property name="fjbg.jar" value="${lib.dir}/fjbg.jar"/>
+ <property name="msil.jar" value="${lib.dir}/msil.jar"/>
+ <property name="jline.jar" value="${lib.dir}/jline.jar"/>
+ <property name="ant.jar" value="${ant.home}/lib/ant.jar"/>
+ <property name="ant-contrib.jar" value="${lib.dir}/ant-contrib.jar"/>
+
+ <property name="lib.jar.name" value="scala-library.jar"/>
+ <property name="dbc.jar.name" value="scala-dbc.jar"/>
+ <property name="comp.jar.name" value="scala-compiler.jar"/>
+ <property name="partest.jar.name" value="scala-partest.jar"/>
+ <property name="libsrc.jar.name" value="scala-library-src.jar"/>
+ <property name="dbcsrc.jar.name" value="scala-dbc-src.jar"/>
+ <property name="parsrc.jar.name" value="scala-partest-src.jar"/>
+ <property name="compsrc.jar.name" value="scala-compiler-src.jar"/>
+ <property name="scala.exec.name" value="scala"/>
+ <property name="scalac.exec.name" value="scalac"/>
+ <property name="scaladoc.exec.name" value="scaladoc"/>
+ <property name="fsc.exec.name" value="fsc"/>
+ <property name="comp.prop.name" value="compiler.properties"/>
+ <property name="lib.prop.name" value="library.properties"/>
+ <property name="par.prop.name" value="partest.properties"/>
+
+ <!-- if available, faster stability checking -->
+ <property name="stability.tool" value="/home/linuxsoft/apps/stability/stability"/>
+
+<!-- ===========================================================================
+ANT INITIALISATION
+============================================================================ -->
+
+ <target name="ant-init" unless="ant-init.avail">
+ <!-- Making sure lib/ contains everything that is needed -->
+ <fail message="A required library is missing in 'lib/'. The README file describes what should be there.">
+ <condition><not><and>
+ <available file="${lib.starr.jar}"/>
+ <available file="${comp.starr.jar}"/>
+ <available file="${fjbg.jar}"/>
+ <available file="${msil.jar}"/>
+ <available file="${jline.jar}"/>
+ <available file="${ant-contrib.jar}"/>
+ </and></not></condition>
+ </fail>
+ <!-- Setting-up Ant contrib tasks -->
+ <taskdef resource="net/sf/antcontrib/antlib.xml"
+ classpath="${ant-contrib.jar}"/>
+ <fail message="External library ${ant-contrib.jar} requires the optional Ant tasks to be installed">
+ <condition><not><and>
+ <available file="${ant.home}/lib/ant-nodeps.jar"/>
+ </and></not></condition>
+ </fail>
+ <property name="ant-init.avail" value="yes"/>
+ </target>
+
+<!-- ===========================================================================
+INITIALISATION
+============================================================================ -->
+
+ <target name="init" depends="ant-init" unless="init.avail">
+ <!-- Making sure enough memory is available -->
+ <propertyregex
+ property="memory.set" input="${env.ANT_OPTS}" select="\1"
+ regexp="-Xmx([1-9][0-9]{3,}|[6-9][0-9]{2}|5[2-9][0-9]|51[2-9])(M|m)"/>
+ <fail
+ unless="memory.set"
+ message="SABBUS requires additional memory. Please set the 'ANT_OPTS' environment property to '-Xmx512M' or more."/>
+ <propertyregex
+ property="memory.info" input="${env.ANT_OPTS}" defaultValue=""
+ select=" (raise to 600 MB for performance)"
+ regexp="-Xmx([1-5][0-9]{2})(M|m)"/>
+ <!-- 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"/>
+ </tstamp>
+ <!-- Finding out what system architecture is being used -->
+ <condition property="os.win"><os family="windows"/></condition>
+ <if><isset property="os.win"/><then>
+ <exec
+ executable="cygpath" vmlauncher="no"
+ errorproperty="cygpath.err" outputproperty="cygpath.out">
+ <arg value="--windir"/>
+ </exec>
+ <condition property="os.cygwin">
+ <equals arg1="${cygpath.err}" arg2=""/>
+ </condition>
+ </then></if>
+ <condition property="os.unix"><or>
+ <os family="unix"/>
+ <os family="mac"/>
+ <isset property="os.cygwin"/>
+ </or></condition>
+ <if><isset property="os.cygwin"/>
+ <then><property name="os.type" value="Cygwin"/></then>
+ <elseif><isset property="os.win"/>
+ <then><property name="os.type" value="Windows"/></then>
+ </elseif>
+ <elseif><isset property="os.unix"/>
+ <then><property name="os.type" value="UNIX"/></then>
+ </elseif>
+ <else><fail>System environment could not be determined</fail></else>
+ </if>
+ <!-- Finding out SVN revision -->
+ <exec
+ executable="svn" vmlauncher="no"
+ errorproperty="svn.err" outputproperty="svn.out">
+ <arg line=" info ${basedir}"/>
+ </exec>
+ <propertyregex
+ property="svn.number" input="${svn.out}" select="\1"
+ regexp="Revision: ([0-9]+)"
+ defaultValue="x"/>
+ <property name="init.avail" value="yes"/>
+ <!-- Printing out some information about what environment I am running in -->
+ <echo level="info"
+ message="OS: ${os.type} (${os.name} ${os.arch} ${os.version});"/>
+ <echo level="info"
+ message="Java: ${java.vm.name} ${java.vm.version} ('${java.home}');"/>
+ <echo level="info"
+ message="Memory: ${memory.set} MB${memory.info};"/>
+ <echo level="info"
+ message="Ant: ${ant.version}."/>
+ </target>
+
+<!-- ===========================================================================
+DIST
+============================================================================ -->
+
+ <target name="dist.devel" depends="init">
+ <property file="${number.file}"/>
+ <property name="version.number"
+ value="${version.major}.${version.minor}.${version.patch}.r${svn.number}"/>
+ <runtarget target="pack"/>
+ </target>
+
+ <target name="dist.patch" depends="init">
+ <property file="${number.file}"/>
+ <property name="version.number"
+ value="${version.major}.${version.minor}.${version.patch}.${version.suffix}"/>
+ <runtarget target="pack"/>
+ </target>
+
+ <target name="dist.minor" depends="init">
+ <property file="${number.file}"/>
+ <property name="version.number"
+ value="${version.major}.${version.minor}.${version.patch}.${version.suffix}"/>
+ <runtarget target="pack"/>
+ </target>
+
+ <target name="pack"
+ depends="build.archive"
+ description="Packs a distribution for SBaz and ZIP/TAR"/>
+
+ <target name="build.dist" depends="binaries"
+ description="Creates the latest Scala distribution">
+ <!-- Copy the API, examples and man -->
+ <copy todir="${dist.current.dir}/doc/scala">
+ <fileset dir="${docs.dir}" includes="README,LICENSE"/>
+ </copy>
+ <!--
+ <copy todir="${dist.current.dir}/doc/scala/api">
+ <fileset dir="${api-lib.dir}"/>
+ </copy>
+ -->
+ <copy todir="${dist.current.dir}/doc/scala/examples">
+ <fileset dir="${docs.dir}/examples"/>
+ </copy>
+ <!--
+ <copy todir="${dist.current.dir}/man/man1">
+ <fileset dir="${tooldocs.dir}" includes="**/*.1"/>
+ </copy>
+ <copy todir="${dist.current.dir}/doc/scala/tools">
+ <fileset dir="${tooldocs.dir}">
+ <include name="**/*.html"/>
+ <include name="**/*.css"/>
+ <include name="**/*.gif"/>
+ <include name="**/*.png"/>
+ </fileset>
+ </copy>
+ -->
+ <stopwatch name="timer.dist" action="total"/>
+ </target>
+
+ <target name="build.archive" depends="build.dist">
+ <tar
+ destfile="${dist.dir}/scala-${version.number}.tgz"
+ compression="gzip">
+ <tarfileset
+ prefix="scala-${version.number}"
+ dir="${dist.current.dir}"
+ includes="bin/**" mode="755"
+ />
+ <tarfileset
+ prefix="scala-${version.number}"
+ dir="${dist.current.dir}"
+ excludes="bin/**"
+ />
+ </tar>
+ <checksum
+ file="${dist.dir}/scala-${version.number}.tgz"
+ forceOverwrite="yes"
+ fileext=".md5"/>
+ <!-- Create zip archive -->
+ <zip
+ destfile="${dist.dir}/scala-${version.number}.zip">
+ <zipfileset
+ prefix="scala-${version.number}"
+ dir="${dist.current.dir}"
+ />
+ </zip>
+ <checksum
+ file="${dist.dir}/scala-${version.number}.zip"
+ forceOverwrite="yes"
+ fileext=".md5"/>
+ <!-- Create source archive -->
+ <copy todir="${dist.dir}/scala-${version.number}">
+ <fileset
+ dir="${basedir}"
+ excludes="build,build/**,dists/**"
+ />
+ </copy>
+ <tar basedir="${dist.dir}"
+ destfile="${dist.dir}/scala-${version.number}-sources.tgz"
+ compression="gzip"
+ includes="scala-${version.number}/**"
+ />
+ </target>
+
+<!-- ===========================================================================
+TEST
+============================================================================ -->
+
+ <target name="test" depends="test.stability"
+ description="Tests the build for stability"/>
+
+ <!-- Compares quick and test level -->
+ <target name="test.stability" depends="build.strap">
+ <if><available file="${stability.tool}"/>
+ <then> <!-- use stability tool for fast checking -->
+ <exec executable="${stability.tool}" failonerror="true">
+ <arg value="${quick.dir}"/>
+ <arg value="${strap.dir}"/>
+ </exec>
+ </then><else> <!-- check stability the slow way -->
+ <checksum totalproperty="quick.md5">
+ <fileset dir="${quick.dir}/lib">
+ <include name="library/**"/>
+ <include name="compiler/**"/>
+ </fileset>
+ </checksum>
+ <delete quiet="yes" failonerror="no">
+ <fileset dir="${quick.dir}" includes="**/*.MD5"/>
+ </delete>
+ <checksum totalproperty="strap.md5">
+ <fileset dir="${strap.dir}/lib">
+ <include name="library/**"/>
+ <include name="compiler/**"/>
+ </fileset>
+ </checksum>
+ <delete quiet="yes" failonerror="no">
+ <fileset dir="${strap.dir}" includes="**/*.MD5"/>
+ </delete>
+ <fail message="Build ${version.number} is not stable">
+ <condition><not>
+ <equals arg1="${quick.md5}" arg2="${strap.md5}"/>
+ </not></condition>
+ </fail>
+ <echo level="info" message="Build ${version.number} is stable."/>
+ </else></if>
+ </target>
+
+<!-- ===========================================================================
+CLEAN
+============================================================================ -->
+
+ <macrodef name="remove">
+ <attribute name="dir"/>
+ <sequential>
+ <if>
+ <available file="@{dir}/is_symlink"/>
+ <then>
+ <delete includeemptydirs="true" quiet="yes" failonerror="no">
+ <fileset dir="@{dir}" includes="**/*"/>
+ </delete>
+ </then></if>
+ <delete dir="@{dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/>
+ </sequential>
+ </macrodef>
+
+ <target name="clean" depends="ant-init" description="Removes QUICK, STRAP and API build products">
+ <remove dir="${quick.dir}"/>
+ <remove dir="${strap.dir}"/>
+ <remove dir="${api.dir}"/>
+ </target>
+
+ <target name="clean.build" depends="ant-init"
+ description="Removes all build products">
+ <remove dir="${build.dir}"/>
+ </target>
+
+ <target name="clean.all" depends="ant-init"
+ description="Removes all build products and distributions">
+ <remove dir="${build.dir}"/>
+ <remove dir="${dist.dir}"/>
+ </target>
+
+ <target name="clean.unfreeze" depends="init">
+ <delete file="${locker.dir}/complete" quiet="yes" failonerror="no"/>
+ <remove dir="${quick.dir}"/>
+ </target>
+
+<!-- ===========================================================================
+MACROS
+============================================================================ -->
+
+ <macrodef name="build.support">
+ <attribute name="outputdir"/>
+ <sequential>
+ <copy todir="@{outputdir}/lib/library">
+ <fileset dir="${src.dir}/library">
+ <include name="**/*.tmpl"/>
+ <include name="**/*.xml"/>
+ <include name="**/*.js"/>
+ <include name="**/*.css"/>
+ </fileset>
+ </copy>
+ <copy todir="@{outputdir}/lib/compiler">
+ <fileset dir="${src.dir}/compiler">
+ <include name="**/*.tmpl"/>
+ <include name="**/*.xml"/>
+ <include name="**/*.js"/>
+ <include name="**/*.css"/>
+ </fileset>
+ </copy>
+ </sequential>
+ </macrodef>
+
+ <macrodef name="buildlayer">
+ <attribute name="name"/>
+ <attribute name="libpath"/>
+ <attribute name="comppath"/>
+ <attribute name="outputdir"/>
+ <attribute name="buildall" default=""/>
+ <sequential>
+ <property name="built.@{name}" value="yes"/>
+ <stopwatch name="timer.@{name}"/>
+ <!-- Create layer-specific task 'scalac' -->
+ <path id="starr.classpath">
+ <pathelement location="@{libpath}"/>
+ <pathelement location="@{comppath}"/>
+ <pathelement location="${fjbg.jar}"/>
+ <pathelement location="${msil.jar}"/>
+ <pathelement location="${jline.jar}"/>
+ <pathelement location="${ant.jar}"/>
+ </path>
+ <taskdef
+ name="scalac"
+ classname="scala.tools.ant.Scalac"
+ classpathref="starr.classpath"
+ />
+ <!-- Build library -->
+ <mkdir dir="@{outputdir}/lib/library"/>
+ <javac
+ srcdir="${src.dir}/library"
+ destdir="@{outputdir}/lib/library"
+ source="1.4" target="1.4" deprecation="yes"
+ classpath="@{outputdir}/lib/library"
+ includes="**/*.java"/>
+ <scalac
+ srcdir="${src.dir}/library"
+ destdir="@{outputdir}/lib/library"
+ usepredefs="no"
+ addparams="${nsc.params}" target="${nsc.target}"
+ deprecation="yes" unchecked="yes"
+ classpath="@{outputdir}/lib/library"
+ includes="scala/Predef.scala"/>
+ <scalac
+ srcdir="${src.dir}/library"
+ destdir="@{outputdir}/lib/library"
+ addparams="${nsc.params}" target="${nsc.target}"
+ deprecation="yes" unchecked="yes"
+ classpath="@{outputdir}/lib/library">
+ <include name="**/*.scala"/>
+ <exclude name="scala/Predef.scala"/>
+ <exclude name="scala/dbc/**"/>
+ <exclude name="scala/actors/**"/>
+ <excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
+ </scalac>
+ <echo
+ file="@{outputdir}/lib/library/${lib.prop.name}"
+ message="version.number=${version.number}${line.separator}"
+ append="false"
+ />
+ <echo
+ file="@{outputdir}/lib/library/${lib.prop.name}"
+ message="copyright.string=${copyright.string}${line.separator}"
+ append="true"
+ />
+ <!-- Build compiler -->
+ <mkdir dir="@{outputdir}/lib/compiler"/>
+ <scalac
+ srcdir="${src.dir}/compiler"
+ destdir="@{outputdir}/lib/compiler"
+ addparams="${nsc.params}" target="${nsc.target}"
+ deprecation="yes" unchecked="yes">
+ <classpath>
+ <pathelement location="@{outputdir}/lib/library"/>
+ <pathelement location="@{outputdir}/lib/compiler"/>
+ <pathelement location="${fjbg.jar}"/>
+ <pathelement location="${msil.jar}"/>
+ <pathelement location="${jline.jar}"/>
+ <pathelement location="${ant.jar}"/>
+ </classpath>
+ <include name="**/*.scala"/>
+ <excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
+ </scalac>
+ <echo
+ file="@{outputdir}/lib/compiler/${comp.prop.name}"
+ message="version.number=${version.number}${line.separator}"
+ append="false"
+ />
+ <echo
+ file="@{outputdir}/lib/compiler/${comp.prop.name}"
+ message="copyright.string=${copyright.string}${line.separator}"
+ append="true"
+ />
+ <if>
+ <length string="@{buildall}" when="greater" length="0"/>
+ <then>
+ <!-- Build DBC library -->
+ <mkdir dir="@{outputdir}/lib/dbc"/>
+ <scalac
+ srcdir="${src.dir}/dbc"
+ destdir="@{outputdir}/lib/dbc"
+ addparams="${nsc.params}" target="${nsc.target}"
+ deprecation="yes" unchecked="yes"
+ scalacdebugging="${nsc.log-files}">
+ <classpath>
+ <pathelement location="@{outputdir}/lib/library"/>
+ <pathelement location="@{outputdir}/lib/dbc"/>
+ </classpath>
+ <include name="scala/dbc/**/*.scala"/>
+ <excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
+ </scalac>
+ <!-- Build actors library -->
+ <mkdir dir="@{outputdir}/lib/actors"/>
+ <javac
+ srcdir="${src.dir}/actors"
+ destdir="@{outputdir}/lib/actors"
+ source="1.4" target="1.4" deprecation="yes"
+ classpath="@{build.dir}/lib/actors"
+ includes="scala/actors/**/*.java"/>
+ <scalac
+ srcdir="${src.dir}/actors"
+ destdir="@{outputdir}/lib/actors"
+ addparams="${nsc.params}" target="${nsc.target}"
+ deprecation="yes" unchecked="yes"
+ scalacdebugging="${nsc.log-files}">
+ <classpath>
+ <pathelement location="@{outputdir}/lib/library"/>
+ <pathelement location="@{outputdir}/lib/actors"/>
+ </classpath>
+ <include name="scala/actors/**/*.scala"/>
+ <excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
+ </scalac>
+ <!-- Build partest -->
+ <mkdir dir="@{outputdir}/lib/partest"/>
+ <javac
+ srcdir="${src.dir}/partest"
+ destdir="@{outputdir}/lib/partest"
+ source="1.4" target="1.4" deprecation="yes"
+ classpath="@{outputdir}/lib/partest"
+ includes="scala/tools/partest/**/*.java"/>
+ <scalac
+ srcdir="${src.dir}/partest"
+ destdir="@{outputdir}/lib/partest"
+ addparams="${nsc.params}" target="${nsc.target}"
+ deprecation="yes" unchecked="yes">
+ <classpath>
+ <pathelement location="@{outputdir}/lib/library"/>
+ <pathelement location="@{outputdir}/lib/compiler"/>
+ <pathelement location="@{outputdir}/lib/actors"/>
+ </classpath>
+ </scalac>
+ <echo
+ file="@{outputdir}/lib/partest/${par.prop.name}"
+ message="version.number=${version.number}${line.separator}"
+ append="false"
+ />
+ <echo
+ file="@{outputdir}/lib/partest/${par.prop.name}"
+ message="copyright.string=${copyright.string}${line.separator}"
+ append="true"
+ />
+ </then>
+ </if>
+ <!-- Timing the build -->
+ <stopwatch name="timer.@{name}" action="total"/>
+ <!-- Copy support files to build folder and links external libraries-->
+ <build.support outputdir="@{outputdir}"/>
+ <!-- Build executable files -->
+ <path id="build.classpath">
+ <pathelement location="@{outputdir}/lib/library"/>
+ <pathelement location="@{outputdir}/lib/compiler"/>
+ <pathelement location="${fjbg.jar}"/>
+ <pathelement location="${msil.jar}"/>
+ <pathelement location="${jline.jar}"/>
+ <pathelement location="${ant.jar}"/>
+ </path>
+ <taskdef
+ name="scalatool"
+ classname="scala.tools.ant.ScalaTool"
+ classpathref="build.classpath"/>
+ <mkdir dir="@{outputdir}/bin"/>
+ <scalatool
+ file="@{outputdir}/bin/${scala.exec.name}"
+ version="${version.number}"
+ copyright="${copyright.string}"
+ name="Scala code runner"
+ class="scala.tools.nsc.MainGenericRunner"
+ javaFlags="${java.flags}"/>
+ <scalatool
+ file="@{outputdir}/bin/${scalac.exec.name}"
+ name="Scala compiler"
+ class="scala.tools.nsc.Main"
+ version="${version.number}"
+ copyright="${copyright.string}"
+ javaFlags="${java.flags}"/>
+ <scalatool
+ file="@{outputdir}/bin/${scaladoc.exec.name}"
+ name="Scala doc generator"
+ class="scala.tools.nsc.Main"
+ toolflags="-Ydoc"
+ version="${version.number}"
+ copyright="${copyright.string}"
+ javaFlags="${java.flags}"/>
+ <scalatool
+ file="@{outputdir}/bin/${fsc.exec.name}"
+ name="Fast Scala compiler"
+ class="scala.tools.nsc.CompileClient"
+ version="${version.number}"
+ copyright="${copyright.string}"
+ javaFlags="${java.flags}"/>
+ <chmod perm="ugo+rx"
+ file="@{outputdir}/bin/${scalac.exec.name}"/>
+ <chmod perm="ugo+rx"
+ file="@{outputdir}/bin/${scala.exec.name}"/>
+ <chmod perm="ugo+rx"
+ file="@{outputdir}/bin/${scaladoc.exec.name}"/>
+ <chmod perm="ugo+rx"
+ file="@{outputdir}/bin/${fsc.exec.name}"/>
+ <fixcrlf
+ srcdir="@{outputdir}/bin"
+ eol="dos"
+ includes="**/*.bat"/>
+ <!-- Mark layer as being completely built -->
+ <touch file="@{outputdir}/complete" verbose="no"/>
+ </sequential>
+ </macrodef>
+
+</project>
diff --git a/src/build/build-jvm14.xml b/src/build/build-jvm14.xml
new file mode 100644
index 0000000000..e3d97f2ff6
--- /dev/null
+++ b/src/build/build-jvm14.xml
@@ -0,0 +1,346 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Id: $ -->
+
+<project name="scala-jvm14" basedir="../.." default="build">
+
+<!-- ===========================================================================
+PROPERTIES
+============================================================================ -->
+
+ <import file="build-imports.xml"/>
+
+ <!-- Loads custom properties definitions -->
+ <property file="${scripts.dir}/build-jvm14.properties"/>
+
+ <!-- Configuring how the compiler is run -->
+ <property name="nsc.log-files" value="no"/>
+ <property name="nsc.excludes.file" value="${basedir}/build.excludes"/>
+ <property name="nsc.params" value=""/>
+ <fail message="Use Ant script 'build-jvm15.xml' for targeting the Java 1.5+ platform">
+ <condition>
+ <not><contains string="${ant.java.version}" substring="1.4"/></not>
+ </condition>
+ </fail>
+ <property name="nsc.target" value="jvm-1.4"/>
+
+ <!-- Sets location of build folders -->
+ <property name="build.dir" value="${basedir}/build"/>
+ <property name="locker.dir" value="${build.dir}/locker-jvm14"/>
+ <property name="quick.dir" value="${build.dir}/quick-jvm14"/>
+ <property name="strap.dir" value="${build.dir}/strap-jvm14"/>
+ <property name="dist.dir" value="${basedir}/dists"/>
+
+<!-- ===========================================================================
+SETUP
+============================================================================ -->
+
+ <target name="setup.weave">
+ <!-- Sets location of RetroWeaver installation -->
+ <condition property="retroweaver.home" value="${unix.retroweaver.home}">
+ <and><os family="unix"/><isset property="unix.retroweaver.home"/></and>
+ </condition>
+ <condition property="retroweaver.home" value="${win.retroweaver.home}">
+ <and><os family="windows"/><isset property="win.retroweaver.home"/></and>
+ </condition>
+ <property name="retroweaver.home" value="${env.RETROWEAVER_HOME}"/>
+
+ <fail message="Set property 'retroweaver.home' to a valid RetroWeaver installation">
+ <condition><not><and>
+ <available file="${retroweaver.home}/lib" type="dir"/>
+ <available file="${retroweaver.home}/release" type="dir"/>
+ </and></not></condition>
+ </fail>
+ <taskdef name="retroweaver" classname="net.sourceforge.retroweaver.ant.RetroWeaverTask">
+ <classpath>
+ <fileset dir="${retroweaver.home}/lib" includes="**/*.jar"/>
+ <fileset dir="${retroweaver.home}/release" includes="**/*-all-*jar"/>
+ </classpath>
+ </taskdef>
+ <property name="lib.starr14.jar" value="${build.dir}/starr-jvm14/scala-library.jar"/>
+ <property name="comp.starr14.jar" value="${build.dir}/starr-jvm14/scala-compiler.jar"/>
+ <uptodate property="weave.notRequired"
+ targetfile="${lib.starr14.jar}"
+ srcfile= "${lib.starr.jar}"
+ />
+ <if>
+ <not><isset property="weave.notRequired"/></not>
+ <then>
+ <mkdir dir="${build.dir}/starr-jvm14"/>
+ <retroweaver
+ inputjar="${lib.starr.jar}"
+ outputjar="${lib.starr14.jar}"
+ />
+ <retroweaver
+ inputjar="${comp.starr.jar}"
+ outputjar="${comp.starr14.jar}"
+ />
+ </then>
+ </if>
+ </target>
+
+ <target name="setup" depends="init, setup.weave">
+ <!-- Removing any outdated stuff -->
+ <if>
+ <and>
+ <available file="${locker.dir}/complete"/>
+ <not><uptodate targetfile="${locker.dir}/complete">
+ <srcfiles dir="${lib.dir}" includes="scala-*.jar"/>
+ </uptodate></not>
+ </and>
+ <then>
+ <echo level="warning"
+ message="STARR updated: LOCKER is obsolete and will be rebuilt."/>
+ <runtarget target="clean.build"/>
+ </then>
+ </if>
+ <!-- Finding out what is available -->
+ <available property="excludes.avail" file="${nsc.excludes.file}"/>
+ <condition property="locker.avail">
+ <available file="${locker.dir}/complete"/>
+ </condition>
+ <!-- Generating version number -->
+ <property file="${number.file}"/>
+ <property
+ name="version.number"
+ value="${version.major}.${version.minor}.${version.patch}.r${svn.number}-b${time.short}"/>
+ <!-- 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}"/>
+ </target>
+
+<!-- ===========================================================================
+BUILD
+============================================================================ -->
+
+ <target name="newlocker"
+ depends="clean.unfreeze, build.locker"
+ description="Rebuilds LOCKER from the current sources"/>
+
+ <!-- Build the locker layer -->
+ <target name="build.locker" depends="setup" unless="locker.avail">
+ <buildlayer
+ name="locker"
+ libpath="${lib.starr14.jar}"
+ comppath="${comp.starr14.jar}"
+ outputdir="${locker.dir}"
+ />
+ <touch file="${locker.dir}/complete" verbose="no"/>
+ </target>
+
+ <target name="build" depends="build.quick"/>
+
+ <!-- Build the quick layer -->
+ <target name="build.quick" depends="build.locker"
+ description="Builds a quick-test (QUICK) version of the compiler">
+ <buildlayer
+ name="quick"
+ libpath="${locker.dir}/lib/library"
+ comppath="${locker.dir}/lib/compiler"
+ outputdir="${quick.dir}"
+ buildall="true"
+ />
+ </target>
+
+ <!-- Build the bootstrap layer -->
+ <target name="build.strap" depends="build.quick">
+ <buildlayer
+ name="strap"
+ libpath="${quick.dir}/lib/library"
+ comppath="${quick.dir}/lib/compiler"
+ outputdir="${strap.dir}"
+ buildall="true"
+ />
+ </target>
+
+<!-- ===========================================================================
+GENERATES A DISTRIBUTION
+============================================================================ -->
+
+ <target name="dist"
+ depends="clean.build, test, binaries"
+ description="Creates a (stability-)tested, complete Scala distribution *from scratch*"/>
+
+ <target name="binaries"
+ depends="setup, build.strap"
+ description="Creates a binary Scala distribution">
+ <property name="dist.current.dir"
+ value="${dist.dir}/scala-jvm14-${version.number}"/>
+ <if><and>
+ <isset property="os.unix"/>
+ <isset property="dist.resource"/></and>
+ <then>
+ <symlink
+ link="${dist.dir}"
+ resource="${dist.resource}" overwrite="yes" failonerror="no"/>
+ <touch file="${dist.dir}/is_symlink" verbose="no"/>
+ </then></if>
+ <mkdir dir="${dist.current.dir}"/>
+ <!-- Copy all requires libraries -->
+ <mkdir dir="${dist.current.dir}/lib"/>
+ <property name="ant.version.number" value="[1.6"/>
+ <!-- version ::= major('.'minor('.'micro('.'qualifier)?)?)? -->
+ <!-- see http://www2.osgi.org/javadoc/r4/org/osgi/framework/Version.html -->
+ <propertyregex
+ property="osgi.version.number" input="${version.number}"
+ regexp="([^-]*)(-.*)?" select="\1"
+ />
+ <echo level="verbose" message="OSGi version: ${osgi.version.number}"/>
+ <jar destfile="${dist.current.dir}/lib/${comp.jar.name}">
+ <fileset dir="${strap.dir}/lib/compiler"/>
+ <zipfileset src="${fjbg.jar}"/>
+ <zipfileset src="${msil.jar}"/>
+ <manifest>
+ <attribute name="Signature-Version" value="${version.number}"/>
+ <attribute name="Built-By" value="${user.name}"/>
+ <attribute name="Main-Class" value="scala.tools.nsc.Main"/>
+ <attribute name="Class-Path" value="${lib.jar.name}"/>
+ <section name="scala/tools/nsc">
+ <attribute name="Extension-Name" value="scala.tools.nsc"/>
+ <attribute name="Specification-Title" value="Scala Compiler"/>
+ <attribute name="Specification-Version" value="${version.number}"/>
+ <attribute name="Specification-Vendor" value="${vendor.name}"/>
+ <attribute name="Implementation-Title" value="scala.tools.nsc"/>
+ <attribute name="Implementation-Version" value="${version.number}"/>
+ <attribute name="Implementation-Vendor" value="${vendor.name}"/>
+ </section>
+ <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
+ <attribute name="Bundle-ManifestVersion" value="2"/>
+ <attribute name="Bundle-Name" value="Scala Compiler Bundle"/>
+ <attribute name="Bundle-SymbolicName" value="scala_compiler"/>
+ <attribute name="Bundle-Version" value="${osgi.version.number}"/>
+ <attribute name="Bundle-Vendor" value="${vendor.name}"/>
+ <attribute name="Export-Package" value="scala.tools.ant;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.ast;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.ast.parser;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.backend;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.doc;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.io;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.matching;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.models;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.symtab;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.symtab.classfile;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.symtab.clr;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.transform;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.typechecker;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.util;version=&#34;${osgi.version.number}&#34;,scala.tools.util;version=&#34;${osgi.version.number}&#34;"/>
+ <attribute name="Import-Package" value="org.apachge.ant.tools;version=&#34;${ant.version.number}&#34;,org.apachge.ant.tools.taskdefs;version=&#34;${ant.version.number}&#34;,org.apachge.ant.types;version=&#34;${ant.version.number}&#34;,org.apachge.ant.tools.util;version=&#34;${ant.version.number}&#34;,org.xml.sax"/>
+ <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
+ </manifest>
+ </jar>
+ <jar destfile="${dist.current.dir}/lib/${lib.jar.name}">
+ <fileset dir="${strap.dir}/lib/library"/>
+ <fileset dir="${strap.dir}/lib/actors"/>
+ <manifest>
+ <attribute name="Signature-Version" value="${version.number}"/>
+ <attribute name="Built-By" value="${user.name}"/>
+ <attribute name="Main-Class" value="scala.util.Properties"/>
+ <section name="scala">
+ <attribute name="Extension-Name" value="scala"/>
+ <attribute name="Specification-Title" value="Scala Library"/>
+ <attribute name="Specification-Version" value="${version.number}"/>
+ <attribute name="Specification-Vendor" value="${vendor.name}"/>
+ <attribute name="Implementation-Title" value="scala"/>
+ <attribute name="Implementation-Version" value="${version.number}"/>
+ <attribute name="Implementation-Vendor" value="${vendor.name}"/>
+ </section>
+ <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
+ <attribute name="Bundle-ManifestVersion" value="2"/>
+ <attribute name="Bundle-Name" value="Scala Library Bundle"/>
+ <attribute name="Bundle-SymbolicName" value="scala_library"/>
+ <attribute name="Bundle-Version" value="${osgi.version.number}"/>
+ <attribute name="Bundle-Vendor" value="${vendor.name}"/>
+ <attribute name="Export-Package" value="scala;version=&#34;${osgi.version.number}&#34;,scala.actors;version=&#34;${osgi.version.number}&#34;,scala.actors.remote;version=&#34;${osgi.version.number}&#34;,scala.collection;version=&#34;${osgi.version.number}&#34;,scala.collection.immutable;version=&#34;${osgi.version.number}&#34;,scala.collection.jcl;version=&#34;${osgi.version.number}&#34;,scala.collection.mutable;version=&#34;${osgi.version.number}&#34;,scala.compat;version=&#34;${osgi.version.number}&#34;,scala.concurrent;version=&#34;${osgi.version.number}&#34;,scala.io;version=&#34;${osgi.version.number}&#34;,scala.mobile;version=&#34;${osgi.version.number}&#34;,scala.ref;version=&#34;${osgi.version.number}&#34;,scala.reflect;version=&#34;${osgi.version.number}&#34;,scala.runtime;version=&#34;${osgi.version.number}&#34;,scala.testing;version=&#34;${osgi.version.number}&#34;,scala.text;version=&#34;${osgi.version.number}&#34;,scala.util;version=&#34;${osgi.version.number}&#34;,scala.util.automata;version=&#34;${osgi.version.number}&#34;,scala.util.grammar;version=&#34;${osgi.version.number}&#34;,scala.util.logging;version=&#34;${osgi.version.number}&#34;,scala.util.parsing;version=&#34;${osgi.version.number}&#34;,scala.util.regexp;version=&#34;${osgi.version.number}&#34;,scala.xml;version=&#34;${osgi.version.number}&#34;,scala.xml.dtd;version=&#34;${osgi.version.number}&#34;,scala.xml.factory;version=&#34;${osgi.version.number}&#34;,scala.xml.parsing;version=&#34;${osgi.version.number}&#34;,scala.xml.path;version=&#34;${osgi.version.number}&#34;,scala.xml.pull;version=&#34;${osgi.version.number}&#34;,scala.xml.transform;version=&#34;${osgi.version.number}&#34;"/>
+ <attribute name="Import-Package" value="javax.xml.parsers,org.xml.sax,org.xml.sax.helpers"/>
+ <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
+ </manifest>
+ </jar>
+ <jar destfile="${dist.current.dir}/lib/${dbc.jar.name}">
+ <fileset dir="${strap.dir}/lib/dbc"/>
+ <manifest>
+ <attribute name="Signature-Version" value="${version.number}"/>
+ <attribute name="Built-By" value="${user.name}"/>
+ <attribute name="Class-Path" value="${lib.jar.name}"/>
+ <section name="scala/dbc">
+ <attribute name="Extension-Name" value="scala.dbc"/>
+ <attribute name="Specification-Title" value="Scala DBC Library"/>
+ <attribute name="Specification-Version" value="${version.number}"/>
+ <attribute name="Specification-Vendor" value="${vendor.name}"/>
+ <attribute name="Implementation-Title" value="scala.dbc"/>
+ <attribute name="Implementation-Version" value="${version.number}"/>
+ <attribute name="Implementation-Vendor" value="${vendor.name}"/>
+ </section>
+ <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
+ <attribute name="Bundle-ManifestVersion" value="2"/>
+ <attribute name="Bundle-Name" value="Scala DBC Library Bundle"/>
+ <attribute name="Bundle-SymbolicName" value="scala_dbc_library"/>
+ <attribute name="Bundle-Version" value="${osgi.version.number}"/>
+ <attribute name="Bundle-Vendor" value="${vendor.name}"/>
+ <attribute name="Export-Package" value="scala.dbc;version=&#34;${osgi.version.number}&#34;,scala.dbc.datatype;version=&#34;${osgi.version.number}&#34;,scala.dbc.exception;version=&#34;${osgi.version.number}&#34;,scala.dbc.result;version=&#34;${osgi.version.number}&#34;,scala.dbc.statement;version=&#34;${osgi.version.number}&#34;,scala.dbc.statement.expression;version=&#34;${osgi.version.number}&#34;,scala.dbc.syntax;version=&#34;${osgi.version.number}&#34;,scala.dbc.value;version=&#34;${osgi.version.number}&#34;,scala.dbc.vendor;version=&#34;${osgi.version.number}&#34;"/>
+ <attribute name="Import-Package" value="scala;version=&#34;${osgi.version.number}&#34;,scala.compat;version=&#34;${osgi.version.number}&#34;"/>
+ <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
+ </manifest>
+ </jar>
+ <jar destfile="${dist.current.dir}/lib/${partest.jar.name}">
+ <fileset dir="${strap.dir}/lib/partest"/>
+ <manifest>
+ <attribute name="Signature-Version" value="${version.number}"/>
+ <attribute name="Built-By" value="${user.name}"/>
+ <attribute name="Main-Class" value="scala.tools.partest.TestRunner"/>
+ <attribute name="Class-Path" value="${lib.jar.name}"/>
+ <section name="scala/tools/partest">
+ <attribute name="Extension-Name" value="scala.tools.partest"/>
+ <attribute name="Specification-Title" value="Scala Test Utility"/>
+ <attribute name="Specification-Version" value="${version.number}"/>
+ <attribute name="Specification-Vendor" value="${vendor.name}"/>
+ <attribute name="Implementation-Title" value="scala.tools.partest"/>
+ <attribute name="Implementation-Version" value="${version.number}"/>
+ <attribute name="Implementation-Vendor" value="${vendor.name}"/>
+ </section>
+ <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
+ <attribute name="Bundle-ManifestVersion" value="2"/>
+ <attribute name="Bundle-Name" value="Scala Test Bundle"/>
+ <attribute name="Bundle-SymbolicName" value="scala_compiler"/>
+ <attribute name="Bundle-Version" value="${osgi.version.number}"/>
+ <attribute name="Bundle-Vendor" value="${vendor.name}"/>
+ <attribute name="Export-Package" value="scala.tools.partest;version=&#34;${osgi.version.number}&#34;,scala.tools.partest.utils;version=&#34;${osgi.version.number}&#34;"/>
+ <attribute name="Import-Package" value="javax.swing"/>
+ <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
+ </manifest>
+ </jar>
+
+ <!-- build source jars -->
+ <mkdir dir="${dist.current.dir}/src"/>
+ <jar
+ destfile="${dist.current.dir}/src/${libsrc.jar.name}">
+ <fileset dir="${src.dir}/library"/>
+ <fileset dir="${src.dir}/actors"/>
+ </jar>
+ <jar
+ destfile="${dist.current.dir}/src/${dbcsrc.jar.name}"
+ basedir="${src.dir}/dbc"
+ includes="**/*.scala"
+ />
+ <jar
+ destfile="${dist.current.dir}/src/${parsrc.jar.name}"
+ basedir="${src.dir}/partest"
+ includes="**/*.scala"
+ />
+ <jar
+ destfile="${dist.current.dir}/src/${compsrc.jar.name}"
+ basedir="${src.dir}/compiler"
+ includes="**/*.scala"
+ />
+
+ <!-- Copy executable files -->
+ <mkdir dir="${dist.current.dir}/bin"/>
+ <copy todir="${dist.current.dir}/bin">
+ <fileset dir="${strap.dir}/bin"/>
+ </copy>
+ <chmod perm="ugo+rx" file="${dist.current.dir}/bin/${scalac.exec.name}"/>
+ <chmod perm="ugo+rx" file="${dist.current.dir}/bin/${scala.exec.name}"/>
+ <chmod perm="ugo+rx" file="${dist.current.dir}/bin/${scaladoc.exec.name}"/>
+ <chmod perm="ugo+rx" file="${dist.current.dir}/bin/${fsc.exec.name}"/>
+ <!-- Recreate the 'latest' link to point to this distribution -->
+ <if><isset property="os.win"/>
+ <then>
+ <copy todir="${dist.dir}/latest-jvm14">
+ <fileset dir="${dist.current.dir}"/>
+ </copy>
+ </then>
+ <else>
+ <symlink
+ link="${dist.dir}/latest-jvm14"
+ resource="${dist.current.dir}"
+ overwrite="yes" failonerror="no"/>
+ </else>
+ </if>
+ </target>
+
+</project>
diff --git a/src/build/build-jvm15.xml b/src/build/build-jvm15.xml
new file mode 100644
index 0000000000..821f67395e
--- /dev/null
+++ b/src/build/build-jvm15.xml
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Id: $ -->
+
+<project name="scala-jvm15" basedir="../.." default="build">
+
+<!-- ===========================================================================
+PROPERTIES
+============================================================================ -->
+
+ <import file="build-imports.xml"/>
+
+ <!-- Loads custom properties definitions -->
+ <property file="${scripts.dir}/build-jvm15.properties"/>
+
+ <!-- Configuring how the compiler is run -->
+ <property name="nsc.log-files" value="no"/>
+ <property name="nsc.excludes.file" value="${basedir}/build.excludes"/>
+ <property name="nsc.params" value=""/>
+ <fail message="Use Ant script 'build-jvm14.xml' for targeting the Java 1.4 platform">
+ <condition>
+ <contains string="${ant.java.version}" substring="1.4"/>
+ </condition>
+ </fail>
+ <property name="nsc.target" value="jvm-1.5"/>
+
+ <!-- Sets location of build folders -->
+ <property name="build.dir" value="${basedir}/build"/>
+ <property name="locker.dir" value="${build.dir}/locker"/>
+ <property name="quick.dir" value="${build.dir}/quick"/>
+ <property name="strap.dir" value="${build.dir}/strap"/>
+ <property name="dist.dir" value="${basedir}/dists"/>
+
+<!-- ===========================================================================
+SETUP
+============================================================================ -->
+
+ <target name="setup" depends="init">
+ <!-- Removing any outdated stuff -->
+ <if>
+ <and>
+ <available file="${locker.dir}/complete"/>
+ <not><uptodate targetfile="${locker.dir}/complete">
+ <srcfiles dir="${lib.dir}" includes="scala-*.jar"/>
+ </uptodate></not>
+ </and>
+ <then>
+ <echo level="warning"
+ message="STARR updated: LOCKER is obsolete and will be rebuilt."/>
+ <runtarget target="clean.build"/>
+ </then>
+ </if>
+ <!-- Finding out what is available -->
+ <available property="excludes.avail" file="${nsc.excludes.file}"/>
+ <condition property="locker.avail">
+ <available file="${locker.dir}/complete"/>
+ </condition>
+ <!-- Generating version number -->
+ <property file="${number.file}"/>
+ <property
+ name="version.number"
+ value="${version.major}.${version.minor}.${version.patch}.r${svn.number}-b${time.short}"/>
+ <!-- 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}"/>
+ </target>
+
+<!-- ===========================================================================
+BUILD
+============================================================================ -->
+
+ <target name="newlocker"
+ depends="clean.unfreeze, build.locker"
+ description="Rebuilds LOCKER from the current sources"/>
+
+ <!-- Build the locker layer -->
+ <target name="build.locker" depends="setup" unless="locker.avail">
+ <buildlayer
+ name="locker"
+ libpath="${lib.dir}/${lib.jar.name}"
+ comppath="${lib.dir}/${comp.jar.name}"
+ outputdir="${locker.dir}"
+ />
+ <touch file="${locker.dir}/complete" verbose="no"/>
+ </target>
+
+ <target name="build" depends="build.quick"/>
+
+ <!-- Build the quick layer -->
+ <target name="build.quick" depends="build.locker"
+ description="Builds a quick-test (QUICK) version of the compiler">
+ <buildlayer
+ name="quick"
+ libpath="${locker.dir}/lib/library"
+ comppath="${locker.dir}/lib/compiler"
+ outputdir="${quick.dir}"
+ buildall="true"
+ />
+ </target>
+
+ <!-- Build the bootstrap layer -->
+ <target name="build.strap" depends="build.quick">
+ <buildlayer
+ name="strap"
+ libpath="${quick.dir}/lib/library"
+ comppath="${quick.dir}/lib/compiler"
+ outputdir="${strap.dir}"
+ buildall="true"
+ />
+ </target>
+
+<!-- ===========================================================================
+DIST
+============================================================================ -->
+
+ <target name="dist"
+ depends="clean.build, test, binaries"
+ description="Creates a (stability-)tested, complete Scala distribution *from scratch*"/>
+
+ <target name="binaries"
+ depends="setup, build.strap"
+ description="Creates a binary Scala distribution">
+ <property name="dist.current.dir"
+ value="${dist.dir}/scala-${version.number}"/>
+ <if><and>
+ <isset property="os.unix"/>
+ <isset property="dist.resource"/></and>
+ <then>
+ <symlink
+ link="${dist.dir}"
+ resource="${dist.resource}" overwrite="yes" failonerror="no"/>
+ <touch file="${dist.dir}/is_symlink" verbose="no"/>
+ </then></if>
+ <mkdir dir="${dist.current.dir}"/>
+ <!-- Copy all requires libraries -->
+ <mkdir dir="${dist.current.dir}/lib"/>
+ <property name="ant.version.number" value="[1.6"/>
+ <!-- version ::= major('.'minor('.'micro('.'qualifier)?)?)? -->
+ <!-- see http://www2.osgi.org/javadoc/r4/org/osgi/framework/Version.html -->
+ <propertyregex
+ property="osgi.version.number" input="${version.number}"
+ regexp="([^-]*)(-.*)?" select="\1"
+ />
+ <echo level="verbose" message="OSGi version: ${osgi.version.number}"/>
+ <jar destfile="${dist.current.dir}/lib/${comp.jar.name}">
+ <fileset dir="${strap.dir}/lib/compiler"/>
+ <zipfileset src="${fjbg.jar}"/>
+ <zipfileset src="${msil.jar}"/>
+ <manifest>
+ <attribute name="Signature-Version" value="${version.number}"/>
+ <attribute name="Built-By" value="${user.name}"/>
+ <attribute name="Main-Class" value="scala.tools.nsc.Main"/>
+ <attribute name="Class-Path" value="${lib.jar.name}"/>
+ <section name="scala/tools/nsc">
+ <attribute name="Extension-Name" value="scala.tools.nsc"/>
+ <attribute name="Specification-Title" value="Scala Compiler"/>
+ <attribute name="Specification-Version" value="${version.number}"/>
+ <attribute name="Specification-Vendor" value="${vendor.name}"/>
+ <attribute name="Implementation-Title" value="scala.tools.nsc"/>
+ <attribute name="Implementation-Version" value="${version.number}"/>
+ <attribute name="Implementation-Vendor" value="${vendor.name}"/>
+ </section>
+ <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
+ <attribute name="Bundle-ManifestVersion" value="2"/>
+ <attribute name="Bundle-Name" value="Scala Compiler Bundle"/>
+ <attribute name="Bundle-SymbolicName" value="scala_compiler"/>
+ <attribute name="Bundle-Version" value="${osgi.version.number}"/>
+ <attribute name="Bundle-Vendor" value="${vendor.name}"/>
+ <attribute name="Export-Package" value="scala.tools.ant;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.ast;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.ast.parser;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.backend;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.doc;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.io;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.matching;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.models;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.symtab;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.symtab.classfile;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.symtab.clr;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.transform;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.typechecker;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.util;version=&#34;${osgi.version.number}&#34;,scala.tools.util;version=&#34;${osgi.version.number}&#34;"/>
+ <attribute name="Import-Package" value="org.apachge.ant.tools;version=&#34;${ant.version.number}&#34;,org.apachge.ant.tools.taskdefs;version=&#34;${ant.version.number}&#34;,org.apachge.ant.types;version=&#34;${ant.version.number}&#34;,org.apachge.ant.tools.util;version=&#34;${ant.version.number}&#34;,org.xml.sax"/>
+ <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
+ </manifest>
+ </jar>
+ <jar destfile="${dist.current.dir}/lib/${lib.jar.name}">
+ <fileset dir="${strap.dir}/lib/library"/>
+ <fileset dir="${strap.dir}/lib/actors"/>
+ <manifest>
+ <attribute name="Signature-Version" value="${version.number}"/>
+ <attribute name="Built-By" value="${user.name}"/>
+ <attribute name="Main-Class" value="scala.util.Properties"/>
+ <section name="scala">
+ <attribute name="Extension-Name" value="scala"/>
+ <attribute name="Specification-Title" value="Scala Library"/>
+ <attribute name="Specification-Version" value="${version.number}"/>
+ <attribute name="Specification-Vendor" value="${vendor.name}"/>
+ <attribute name="Implementation-Title" value="scala"/>
+ <attribute name="Implementation-Version" value="${version.number}"/>
+ <attribute name="Implementation-Vendor" value="${vendor.name}"/>
+ </section>
+ <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
+ <attribute name="Bundle-ManifestVersion" value="2"/>
+ <attribute name="Bundle-Name" value="Scala Library Bundle"/>
+ <attribute name="Bundle-SymbolicName" value="scala_library"/>
+ <attribute name="Bundle-Version" value="${osgi.version.number}"/>
+ <attribute name="Bundle-Vendor" value="${vendor.name}"/>
+ <attribute name="Export-Package" value="scala;version=&#34;${osgi.version.number}&#34;,scala.actors;version=&#34;${osgi.version.number}&#34;,scala.actors.remote;version=&#34;${osgi.version.number}&#34;,scala.collection;version=&#34;${osgi.version.number}&#34;,scala.collection.immutable;version=&#34;${osgi.version.number}&#34;,scala.collection.jcl;version=&#34;${osgi.version.number}&#34;,scala.collection.mutable;version=&#34;${osgi.version.number}&#34;,scala.compat;version=&#34;${osgi.version.number}&#34;,scala.concurrent;version=&#34;${osgi.version.number}&#34;,scala.io;version=&#34;${osgi.version.number}&#34;,scala.mobile;version=&#34;${osgi.version.number}&#34;,scala.ref;version=&#34;${osgi.version.number}&#34;,scala.reflect;version=&#34;${osgi.version.number}&#34;,scala.runtime;version=&#34;${osgi.version.number}&#34;,scala.testing;version=&#34;${osgi.version.number}&#34;,scala.text;version=&#34;${osgi.version.number}&#34;,scala.util;version=&#34;${osgi.version.number}&#34;,scala.util.automata;version=&#34;${osgi.version.number}&#34;,scala.util.grammar;version=&#34;${osgi.version.number}&#34;,scala.util.logging;version=&#34;${osgi.version.number}&#34;,scala.util.parsing;version=&#34;${osgi.version.number}&#34;,scala.util.regexp;version=&#34;${osgi.version.number}&#34;,scala.xml;version=&#34;${osgi.version.number}&#34;,scala.xml.dtd;version=&#34;${osgi.version.number}&#34;,scala.xml.factory;version=&#34;${osgi.version.number}&#34;,scala.xml.parsing;version=&#34;${osgi.version.number}&#34;,scala.xml.path;version=&#34;${osgi.version.number}&#34;,scala.xml.pull;version=&#34;${osgi.version.number}&#34;,scala.xml.transform;version=&#34;${osgi.version.number}&#34;"/>
+ <attribute name="Import-Package" value="javax.xml.parsers,org.xml.sax,org.xml.sax.helpers"/>
+ <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
+ </manifest>
+ </jar>
+ <jar destfile="${dist.current.dir}/lib/${dbc.jar.name}">
+ <fileset dir="${strap.dir}/lib/dbc"/>
+ <manifest>
+ <attribute name="Signature-Version" value="${version.number}"/>
+ <attribute name="Built-By" value="${user.name}"/>
+ <attribute name="Class-Path" value="${lib.jar.name}"/>
+ <section name="scala/dbc">
+ <attribute name="Extension-Name" value="scala.dbc"/>
+ <attribute name="Specification-Title" value="Scala DBC Library"/>
+ <attribute name="Specification-Version" value="${version.number}"/>
+ <attribute name="Specification-Vendor" value="${vendor.name}"/>
+ <attribute name="Implementation-Title" value="scala.dbc"/>
+ <attribute name="Implementation-Version" value="${version.number}"/>
+ <attribute name="Implementation-Vendor" value="${vendor.name}"/>
+ </section>
+ <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
+ <attribute name="Bundle-ManifestVersion" value="2"/>
+ <attribute name="Bundle-Name" value="Scala DBC Library Bundle"/>
+ <attribute name="Bundle-SymbolicName" value="scala_dbc_library"/>
+ <attribute name="Bundle-Version" value="${osgi.version.number}"/>
+ <attribute name="Bundle-Vendor" value="${vendor.name}"/>
+ <attribute name="Export-Package" value="scala.dbc;version=&#34;${osgi.version.number}&#34;,scala.dbc.datatype;version=&#34;${osgi.version.number}&#34;,scala.dbc.exception;version=&#34;${osgi.version.number}&#34;,scala.dbc.result;version=&#34;${osgi.version.number}&#34;,scala.dbc.statement;version=&#34;${osgi.version.number}&#34;,scala.dbc.statement.expression;version=&#34;${osgi.version.number}&#34;,scala.dbc.syntax;version=&#34;${osgi.version.number}&#34;,scala.dbc.value;version=&#34;${osgi.version.number}&#34;,scala.dbc.vendor;version=&#34;${osgi.version.number}&#34;"/>
+ <attribute name="Import-Package" value="scala;version=&#34;${osgi.version.number}&#34;,scala.compat;version=&#34;${osgi.version.number}&#34;"/>
+ <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
+ </manifest>
+ </jar>
+ <jar destfile="${dist.current.dir}/lib/${partest.jar.name}">
+ <fileset dir="${strap.dir}/lib/partest"/>
+ <manifest>
+ <attribute name="Signature-Version" value="${version.number}"/>
+ <attribute name="Built-By" value="${user.name}"/>
+ <attribute name="Main-Class" value="scala.tools.partest.TestRunner"/>
+ <attribute name="Class-Path" value="${lib.jar.name}"/>
+ <section name="scala/tools/partest">
+ <attribute name="Extension-Name" value="scala.tools.partest"/>
+ <attribute name="Specification-Title" value="Scala Test Utility"/>
+ <attribute name="Specification-Version" value="${version.number}"/>
+ <attribute name="Specification-Vendor" value="${vendor.name}"/>
+ <attribute name="Implementation-Title" value="scala.tools.partest"/>
+ <attribute name="Implementation-Version" value="${version.number}"/>
+ <attribute name="Implementation-Vendor" value="${vendor.name}"/>
+ </section>
+ <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
+ <attribute name="Bundle-ManifestVersion" value="2"/>
+ <attribute name="Bundle-Name" value="Scala Test Bundle"/>
+ <attribute name="Bundle-SymbolicName" value="scala_compiler"/>
+ <attribute name="Bundle-Version" value="${osgi.version.number}"/>
+ <attribute name="Bundle-Vendor" value="${vendor.name}"/>
+ <attribute name="Export-Package" value="scala.tools.partest;version=&#34;${osgi.version.number}&#34;,scala.tools.partest.utils;version=&#34;${osgi.version.number}&#34;"/>
+ <attribute name="Import-Package" value="javax.swing"/>
+ <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
+ </manifest>
+ </jar>
+
+ <!-- build source jars -->
+ <mkdir dir="${dist.current.dir}/src"/>
+ <jar
+ destfile="${dist.current.dir}/src/${libsrc.jar.name}">
+ <fileset dir="${src.dir}/library"/>
+ <fileset dir="${src.dir}/actors"/>
+ </jar>
+ <jar
+ destfile="${dist.current.dir}/src/${dbcsrc.jar.name}"
+ basedir="${src.dir}/dbc"
+ includes="**/*.scala"
+ />
+ <jar
+ destfile="${dist.current.dir}/src/${parsrc.jar.name}"
+ basedir="${src.dir}/partest"
+ includes="**/*.scala"
+ />
+ <jar
+ destfile="${dist.current.dir}/src/${compsrc.jar.name}"
+ basedir="${src.dir}/compiler"
+ includes="**/*.scala"
+ />
+
+ <!-- Copy executable files -->
+ <mkdir dir="${dist.current.dir}/bin"/>
+ <copy todir="${dist.current.dir}/bin">
+ <fileset dir="${strap.dir}/bin"/>
+ </copy>
+ <chmod perm="ugo+rx" file="${dist.current.dir}/bin/${scalac.exec.name}"/>
+ <chmod perm="ugo+rx" file="${dist.current.dir}/bin/${scala.exec.name}"/>
+ <chmod perm="ugo+rx" file="${dist.current.dir}/bin/${scaladoc.exec.name}"/>
+ <chmod perm="ugo+rx" file="${dist.current.dir}/bin/${fsc.exec.name}"/>
+ <!-- Recreate the 'latest' link to point to this distribution -->
+ <if><isset property="os.win"/>
+ <then>
+ <copy todir="${dist.dir}/latest">
+ <fileset dir="${dist.current.dir}"/>
+ </copy>
+ </then>
+ <else>
+ <symlink
+ link="${dist.dir}/latest"
+ resource="${dist.current.dir}"
+ overwrite="yes" failonerror="no"/>
+ </else>
+ </if>
+ </target>
+
+</project>
diff --git a/src/build/build-msil.xml b/src/build/build-msil.xml
new file mode 100644
index 0000000000..4cb6a6edc4
--- /dev/null
+++ b/src/build/build-msil.xml
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- $Id: $ -->
+
+<project name="scala-msil" basedir="../.." default="build">
+
+<!-- ===========================================================================
+PROPERTIES
+============================================================================ -->
+
+ <import file="build-jvm15.xml"/>
+
+ <property name="mono.dir" value="${src.dir}/mono"/>
+
+ <!-- Loads custom properties definitions -->
+ <property file="${scripts.dir}/scripts/build-msil.properties"/>
+
+ <!-- Sets location of build folders -->
+ <property name="build.dir" value="${basedir}/build"/>
+ <property name="msil.dir" value="${build.dir}/msil"/>
+ <property name="dist.dir" value="${basedir}/dists"/>
+
+<!-- ===========================================================================
+SETUP
+============================================================================ -->
+
+ <target name="msil.init" depends="init">
+ <!-- Sets ilasm command (either Microsoft .NET Framework or Mono) -->
+ <condition property="ilasm.cmd" value="${dotnet.home}/ilasm.exe">
+ <and>
+ <os family="windows"/><isset property="dotnet.home"/>
+ <available file="${dotnet.home}/ilasm.exe"/>
+ </and>
+ </condition>
+ <condition property="ilasm.cmd" value="${unix.mono.home}/ilasm">
+ <and>
+ <os family="unix"/><isset property="unix.mono.home"/>
+ <available file="${unix.mono.home}/ilasm"/>
+ </and>
+ </condition>
+ <condition property="ilasm.cmd" value="${win.mono.home}/ilasm">
+ <and>
+ <os family="windows"/><isset property="win.mono.home"/>
+ <available file="${win.mono.home}/lib/mono/2.0/ilasm.exe"/>
+ </and>
+ </condition>
+ <echo level="verbose" message="Found: ${ilasm.cmd}"/>
+ <condition property="ilasm.cmd" value="ilasm">
+ <and><available file="ilasm" filepath="${env.PATH}"/></and>
+ </condition>
+ <fail message="Command 'ilasm' not found">
+ <condition><not><isset property="ilasm.cmd"/></not></condition>
+ </fail>
+ <!-- Sets ilasm arguments (either Windows or Unix) -->
+ <property name="ilasm.infile" value="${msil.dir}/lib/predef.msil"/>
+ <property name="ilasm.outfile" value="${msil.dir}/lib/predef.dll"/>
+ <if>
+ <isset property="os.win"/>
+ <then>
+ <property
+ name="ilasm.args"
+ value="/quiet /dll /output=${ilasm.outfile} ${ilasm.infile}"
+ />
+ </then>
+ <else>
+ <property
+ name="ilasm.args"
+ value="/dll /output:${ilasm.outfile} ${ilasm.infile}"
+ />
+ </else>
+ </if>
+ <property file="${number.file}"/>
+ <property
+ name="version.number"
+ value="${version.major}.${version.minor}.${version.patch}.r${svn.number}-b${time.short}"/>
+ <echo level="verbose" message="${version.number}"/>
+ </target>
+
+ <target name="msil.sources" depends="msil.init">
+ <mkdir dir="${msil.dir}/src"/>
+ <copy todir="${msil.dir}/src">
+ <fileset dir="${src.dir}/library" includes="**/*.scala">
+ <not>
+ <present targetdir="${src.dir}/dotnet-library"/>
+ </not>
+ <exclude name="scala/collection/jcl/**/*.scala"/>
+ </fileset>
+ </copy>
+ <copy todir="${msil.dir}/src">
+ <fileset dir="${src.dir}/dotnet-library">
+ <include name="**/*.scala"/>
+ </fileset>
+ </copy>
+ </target>
+
+ <target name="msil.libraries" depends="msil.sources">
+ <antcall target="build.quick"/>
+ <property name="quick.dir" value="${build.dir}/quick"/>
+ <path id="quick.classpath">
+ <pathelement location="${quick.dir}/lib/library"/>
+ <pathelement location="${quick.dir}/lib/compiler"/>
+ <pathelement location="${fjbg.jar}"/>
+ <pathelement location="${msil.jar}"/>
+ </path>
+ <taskdef
+ name="quick" classname="scala.tools.ant.Scalac"
+ classpathref="quick.classpath"/>
+ <mkdir dir="${msil.dir}/lib"/>
+ <quick srcdir="${msil.dir}/src" usepredefs="no" target="msil"
+ assemname="${msil.dir}/lib/predef" assemrefs="${lib.dir}"
+ failonerror="false">
+ <include name="scala/Predef.scala"/>
+ <include name="scala/Option.scala"/>
+ <include name="scala/Pair.scala"/>
+ <include name="scala/Console.scala"/>
+ <include name="scala/Application.scala"/>
+ <include name="scala/ByNameFunction.scala"/>
+ <include name="scala/Stream.scala"/>
+ <include name="scala/*Annotation.scala"/>
+ <include name="scala/Function*.scala"/>
+ <include name="scala/Tuple*.scala"/>
+ <include name="scala/Product*.scala"/>
+ <include name="scala/cloneable.scala"/>
+ <include name="scala/deprecated.scala"/>
+ <include name="scala/native.scala"/>
+ <include name="scala/serializable.scala"/>
+ <include name="scala/transient.scala"/>
+ <include name="scala/volatile.scala"/>
+ <include name="scala/remote.scala"/>
+ <include name="scala/runtime/*.scala"/>
+ <include name="scala/collection/mutable/HashMap.scala"/>
+ <exclude name="scala/runtime/RichStringBuilder.scala"/>
+ </quick>
+ <exec executable="${ilasm.cmd}" vmlauncher="no">
+ <arg line="${ilasm.args}"/>
+ </exec>
+ </target>
+
+ <target name="msil.build" depends="msil.libraries">
+ <copy todir="${msil.dir}/bin">
+ <fileset
+ dir="${mono.dir}/bin"
+ includes="scala-net*"
+ />
+ <filterset>
+ <filter token="VERSION" value="${version.number}"/>
+ <filter token="COPYRIGHT" value="${copyright.string}"/>
+ <filter token="NAME" value="Scala code runner"/>
+ </filterset>
+ </copy>
+ <copy todir="${msil.dir}/bin">
+ <fileset
+ dir="${mono.dir}/bin"
+ includes="scalac-net*"
+ />
+ <filterset>
+ <filter token="VERSION" value="${version.number}"/>
+ <filter token="COPYRIGHT" value="${copyright.string}"/>
+ <filter token="NAME" value="Scala compiler"/>
+ </filterset>
+ </copy>
+ <chmod perm="ugo+rx" dir="${msil.dir}/bin" includes="*-net*"/>
+ <jar destfile="${msil.dir}/lib/${comp.jar.name}">
+ <fileset dir="${quick.dir}/lib/compiler"/>
+ <zipfileset src="${fjbg.jar}"/>
+ <zipfileset src="${msil.jar}"/>
+ </jar>
+ <jar destfile="${msil.dir}/lib/${lib.jar.name}">
+ <fileset dir="${strap.dir}/lib/library"/>
+ <fileset dir="${strap.dir}/lib/actors"/>
+ </jar>
+ </target>
+
+ <target name="msil.dist" depends="msil.build">
+ <antcall target="binaries"/>
+ <property name="dist.current.dir" value="${dist.dir}/scala-msil-${version.number}"/>
+ <mkdir dir="${dist.current.dir}"/>
+ <copy todir="${dist.current.dir}">
+ <fileset dir="${msil.dir}" includes="bin/**,lib/**"/>
+ </copy>
+ <chmod perm="ugo+rx" dir="${dist.current.dir}/bin" includes="*-net*"/>
+ <copy todir="${dist.current.dir}/lib">
+ <fileset dir="${lib.dir}" includes="*.dll"/>
+ </copy>
+ <copy todir="${dist.current.dir}/lib">
+ <fileset dir="${dist.dir}/latest/lib" includes="scala*.jar"/>
+ </copy>
+ <!-- Recreate the 'latest' link to point to this distribution -->
+ <if><isset property="os.win"/>
+ <then>
+ <copy todir="${dist.dir}/latest-msil">
+ <fileset dir="${dist.current.dir}"/>
+ </copy>
+ </then>
+ <else>
+ <symlink
+ link="${dist.dir}/latest-mono"
+ resource="${dist.current.dir}"
+ overwrite="yes" failonerror="no"/>
+ </else>
+ </if>
+ </target>
+
+<!-- ===========================================================================
+CLEAN
+============================================================================ -->
+
+ <target name="msil.clean" depends="ant-init">
+ <remove dir="${build.dir}/msil"/>
+ <delete includeemptydirs="true" quiet="yes" failonerror="no">
+ <fileset dir="@{dist.dir}" includes="**/scala-msil*"/>
+ </delete>
+ <delete file="${dist.dir}/latest-msil" quiet="yes" failonerror="no"/>
+ </target>
+
+</project>