diff options
-rw-r--r-- | build-new.properties.SAMPLE | 11 | ||||
-rw-r--r-- | build-new.xml | 84 | ||||
-rw-r--r-- | src/build/build-android.xml | 195 | ||||
-rw-r--r-- | src/build/build-cldc.xml | 249 | ||||
-rw-r--r-- | src/build/build-imports.xml | 589 | ||||
-rw-r--r-- | src/build/build-jvm14.xml | 346 | ||||
-rw-r--r-- | src/build/build-jvm15.xml | 302 | ||||
-rw-r--r-- | src/build/build-msil.xml | 215 |
8 files changed, 1991 insertions, 0 deletions
diff --git a/build-new.properties.SAMPLE b/build-new.properties.SAMPLE new file mode 100644 index 0000000000..1e3a9e1fd9 --- /dev/null +++ b/build-new.properties.SAMPLE @@ -0,0 +1,11 @@ +unix.android.home=/home/linuxsoft/apps/android +unix.mono.home=/home/linuxsoft/apps/mono +unix.retroweaver.home=/home/linuxsoft/apps/retroweaver +unix.wtk.home=/home/linuxsoft/apps/java-wtk + +win.android.home=c:/Progra~1/Android +win.mono.home=c:/Progra~1/Mono +win.retroweaver.home=c:/Progra~1/Retroweaver +win.wtk.home=c:/Progra~1/Java/wtk2.5.2 + +dotnet.home=c:/Windows/Micros~1.NET/Framew~1/v2.0.50727 diff --git a/build-new.xml b/build-new.xml new file mode 100644 index 0000000000..6e0f540392 --- /dev/null +++ b/build-new.xml @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- $Id: $ --> + +<project name="scala" basedir="." default="build"> + + <property name="scripts.dir" value="${basedir}/src/build"/> + + <target name="build"> + <ant antfile="${scripts.dir}/build-jvm15.xml"/> + </target> + + <target name="binaries"> + <ant antfile="${scripts.dir}/build-jvm15.xml" target="binaries"/> + </target> + + <target name="dist"> + <ant antfile="${scripts.dir}/build-jvm15.xml" target="dist"/> + </target> + + <target name="clean"> + <ant antfile="${scripts.dir}/build-jvm15.xml" target="clean"/> + </target> + + <target name="clean.all"> + <ant antfile="${scripts.dir}/build-jvm15.xml" target="clean.all"/> + </target> + + <!-- JVM-14 --> + + <target name="build.jvm14"> + <ant antfile="${scripts.dir}/build-jvm14.xml"/> + </target> + + <target name="jvm14"> + <ant antfile="${scripts.dir}/build-jvm14.xml" target="dist"/> + </target> + + <target name="clean.jvm14"> + <ant antfile="${scripts.dir}/build-jvm14.xml" target="clean"/> + </target> + + <!-- Android --> + + <target name="build.android"> + <ant antfile="${scripts.dir}/build-android.xml" target="android.build"/> + </target> + + <target name="android"> + <ant antfile="${scripts.dir}/build-android.xml" target="android.dist"/> + </target> + + <target name="clean.android"> + <ant antfile="${scripts.dir}/build-android.xml" target="android.clean"/> + </target> + + <!-- .NET Framework / Mono --> + + <target name="build.msil"> + <ant antfile="${scripts.dir}/build-msil.xml" target="msil.build"/> + </target> + + <target name="msil"> + <ant antfile="${scripts.dir}/build-msil.xml" target="msil.dist"/> + </target> + + <target name="clean.msil"> + <ant antfile="${scripts.dir}/build-msil.xml" target="msil.clean"/> + </target> + + <!-- CLDC --> + + <target name="build.cldc"> + <ant antfile="${scripts.dir}/build-cldc.xml" target="cldc.build"/> + </target> + + <target name="cldc"> + <ant antfile="${scripts.dir}/build-cldc.xml" target="cldc.dist"/> + </target> + + <target name="clean.cldc"> + <ant antfile="${scripts.dir}/build-cldc.xml" target="cldc.clean"/> + </target> + +</project> 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="${osgi.version.number}",scala.tools.nsc;version="${osgi.version.number}",scala.tools.nsc.ast;version="${osgi.version.number}",scala.tools.nsc.ast.parser;version="${osgi.version.number}",scala.tools.nsc.backend;version="${osgi.version.number}",scala.tools.nsc.doc;version="${osgi.version.number}",scala.tools.nsc.io;version="${osgi.version.number}",scala.tools.nsc.matching;version="${osgi.version.number}",scala.tools.nsc.models;version="${osgi.version.number}",scala.tools.nsc.symtab;version="${osgi.version.number}",scala.tools.nsc.symtab.classfile;version="${osgi.version.number}",scala.tools.nsc.symtab.clr;version="${osgi.version.number}",scala.tools.nsc.transform;version="${osgi.version.number}",scala.tools.nsc.typechecker;version="${osgi.version.number}",scala.tools.nsc.util;version="${osgi.version.number}",scala.tools.util;version="${osgi.version.number}""/> + <attribute name="Import-Package" value="org.apachge.ant.tools;version="${ant.version.number}",org.apachge.ant.tools.taskdefs;version="${ant.version.number}",org.apachge.ant.types;version="${ant.version.number}",org.apachge.ant.tools.util;version="${ant.version.number}",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="${osgi.version.number}",scala.actors;version="${osgi.version.number}",scala.actors.remote;version="${osgi.version.number}",scala.collection;version="${osgi.version.number}",scala.collection.immutable;version="${osgi.version.number}",scala.collection.jcl;version="${osgi.version.number}",scala.collection.mutable;version="${osgi.version.number}",scala.compat;version="${osgi.version.number}",scala.concurrent;version="${osgi.version.number}",scala.io;version="${osgi.version.number}",scala.mobile;version="${osgi.version.number}",scala.ref;version="${osgi.version.number}",scala.reflect;version="${osgi.version.number}",scala.runtime;version="${osgi.version.number}",scala.testing;version="${osgi.version.number}",scala.text;version="${osgi.version.number}",scala.util;version="${osgi.version.number}",scala.util.automata;version="${osgi.version.number}",scala.util.grammar;version="${osgi.version.number}",scala.util.logging;version="${osgi.version.number}",scala.util.parsing;version="${osgi.version.number}",scala.util.regexp;version="${osgi.version.number}",scala.xml;version="${osgi.version.number}",scala.xml.dtd;version="${osgi.version.number}",scala.xml.factory;version="${osgi.version.number}",scala.xml.parsing;version="${osgi.version.number}",scala.xml.path;version="${osgi.version.number}",scala.xml.pull;version="${osgi.version.number}",scala.xml.transform;version="${osgi.version.number}""/> + <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="${osgi.version.number}",scala.dbc.datatype;version="${osgi.version.number}",scala.dbc.exception;version="${osgi.version.number}",scala.dbc.result;version="${osgi.version.number}",scala.dbc.statement;version="${osgi.version.number}",scala.dbc.statement.expression;version="${osgi.version.number}",scala.dbc.syntax;version="${osgi.version.number}",scala.dbc.value;version="${osgi.version.number}",scala.dbc.vendor;version="${osgi.version.number}""/> + <attribute name="Import-Package" value="scala;version="${osgi.version.number}",scala.compat;version="${osgi.version.number}""/> + <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="${osgi.version.number}",scala.tools.partest.utils;version="${osgi.version.number}""/> + <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="${osgi.version.number}",scala.tools.nsc;version="${osgi.version.number}",scala.tools.nsc.ast;version="${osgi.version.number}",scala.tools.nsc.ast.parser;version="${osgi.version.number}",scala.tools.nsc.backend;version="${osgi.version.number}",scala.tools.nsc.doc;version="${osgi.version.number}",scala.tools.nsc.io;version="${osgi.version.number}",scala.tools.nsc.matching;version="${osgi.version.number}",scala.tools.nsc.models;version="${osgi.version.number}",scala.tools.nsc.symtab;version="${osgi.version.number}",scala.tools.nsc.symtab.classfile;version="${osgi.version.number}",scala.tools.nsc.symtab.clr;version="${osgi.version.number}",scala.tools.nsc.transform;version="${osgi.version.number}",scala.tools.nsc.typechecker;version="${osgi.version.number}",scala.tools.nsc.util;version="${osgi.version.number}",scala.tools.util;version="${osgi.version.number}""/> + <attribute name="Import-Package" value="org.apachge.ant.tools;version="${ant.version.number}",org.apachge.ant.tools.taskdefs;version="${ant.version.number}",org.apachge.ant.types;version="${ant.version.number}",org.apachge.ant.tools.util;version="${ant.version.number}",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="${osgi.version.number}",scala.actors;version="${osgi.version.number}",scala.actors.remote;version="${osgi.version.number}",scala.collection;version="${osgi.version.number}",scala.collection.immutable;version="${osgi.version.number}",scala.collection.jcl;version="${osgi.version.number}",scala.collection.mutable;version="${osgi.version.number}",scala.compat;version="${osgi.version.number}",scala.concurrent;version="${osgi.version.number}",scala.io;version="${osgi.version.number}",scala.mobile;version="${osgi.version.number}",scala.ref;version="${osgi.version.number}",scala.reflect;version="${osgi.version.number}",scala.runtime;version="${osgi.version.number}",scala.testing;version="${osgi.version.number}",scala.text;version="${osgi.version.number}",scala.util;version="${osgi.version.number}",scala.util.automata;version="${osgi.version.number}",scala.util.grammar;version="${osgi.version.number}",scala.util.logging;version="${osgi.version.number}",scala.util.parsing;version="${osgi.version.number}",scala.util.regexp;version="${osgi.version.number}",scala.xml;version="${osgi.version.number}",scala.xml.dtd;version="${osgi.version.number}",scala.xml.factory;version="${osgi.version.number}",scala.xml.parsing;version="${osgi.version.number}",scala.xml.path;version="${osgi.version.number}",scala.xml.pull;version="${osgi.version.number}",scala.xml.transform;version="${osgi.version.number}""/> + <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="${osgi.version.number}",scala.dbc.datatype;version="${osgi.version.number}",scala.dbc.exception;version="${osgi.version.number}",scala.dbc.result;version="${osgi.version.number}",scala.dbc.statement;version="${osgi.version.number}",scala.dbc.statement.expression;version="${osgi.version.number}",scala.dbc.syntax;version="${osgi.version.number}",scala.dbc.value;version="${osgi.version.number}",scala.dbc.vendor;version="${osgi.version.number}""/> + <attribute name="Import-Package" value="scala;version="${osgi.version.number}",scala.compat;version="${osgi.version.number}""/> + <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="${osgi.version.number}",scala.tools.partest.utils;version="${osgi.version.number}""/> + <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> |