blob: e570ccd1cc4a5525ead1b60bebc1fa0ddc005553 (
plain) (
tree)
|
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id$ -->
<project name="scala-core" default="build">
<description>
I am Sabbus for Scala-core, the build system for the Scala compiler and core
library. Please check the 'docs/README' file for more information about me.
</description>
<echo>Running Sabbus for Scala-core</echo>
<!--
##############################################################################
PROPERTIES
##############################################################################
-->
<property environment="env"/>
<condition property="memory.set">
<contains string="${env.ANT_OPTS}" substring="-Xmx"/>
</condition>
<fail unless="memory.set">
Sabbus requires additional memory. Please set the 'ANT_OPTS' environment
property to '-Xmx256M' or more.
</fail>
<!-- Prevents system classpath from being used -->
<property name="build.sysclasspath" value="ignore"/>
<!-- Base properties -->
<property name="docs.dir" value="${basedir}/docs"/>
<property name="lib.dir" value="${basedir}/lib"/>
<property name="src.dir" value="${basedir}/src"/>
<property name="test.dir" value="${basedir}/test"/>
<!-- User properties -->
<property file="${basedir}/build.properties"/>
<!-- General properties -->
<property name="copyright" value="(c) 2002-05 LAMP/EPFL"/>
<!-- NSC configuration properties -->
<property name="nsc.logging" value="none"/>
<property name="nsc.debug-info" value="true"/>
<property name="nsc.excludes" value="build.excludes"/>
<!-- Location of pre-compiled libraries properties -->
<property name="starr.lib.jar" value="${lib.dir}/scala-library.jar"/>
<property name="starr.comp.jar" value="${lib.dir}/scala-compiler.jar"/>
<property name="jaco.jar" value="${lib.dir}/jaco.jar"/>
<property name="fjbg.jar" value="${lib.dir}/fjbg.jar"/>
<property name="msil.jar" value="${lib.dir}/msil.jar"/>
<property name="scala.dll" value="${lib.dir}/scala.dll"/>
<property name="ant.jar" value="${ant.home}/lib/ant.jar"/>
<!-- Location of build products properties -->
<property name="locker.dir" value="${basedir}/build/locker"/>
<property name="quick.dir" value="${basedir}/build/quick"/>
<property name="strap.dir" value="${basedir}/build/strap"/>
<!-- Location of source and build elements names properties -->
<property name="lib.dir.name" value="library"/>
<property name="comp.dir.name" value="compiler"/>
<property name="exec.dir.name" value="exec"/>
<!-- Location of structure of the distribution properties -->
<property name="distrib.unix.dir" value="${basedir}/distribs/unix"/>
<property name="distrib.win.dir" value="${basedir}/distribs/windows"/>
<property name="distrib.latest.dir" value="${basedir}/distribs/latest"/>
<property name="distrib.name" value="scala"/>
<property name="lib.jar.name" value="${distrib.name}-${lib.dir.name}.jar"/>
<property name="comp.jar.name" value="${distrib.name}-${comp.dir.name}.jar"/>
<property name="scala.exec.name" value="${distrib.name}"/>
<property name="scalai.exec.name" value="${distrib.name}i"/>
<property name="scalac.exec.name" value="${distrib.name}c"/>
<property name="scalatok.exec.name" value="${distrib.name}tok"/>
<property name="wrapper.exec.name" value=".${distrib.name}-wrapper"/>
<!-- Shorcut names -->
<property name="locker.lib.dir" value="${locker.dir}/${lib.dir.name}"/>
<property name="locker.comp.dir" value="${locker.dir}/${comp.dir.name}"/>
<property name="quick.lib.dir" value="${quick.dir}/${lib.dir.name}"/>
<property name="quick.comp.dir" value="${quick.dir}/${comp.dir.name}"/>
<property name="strap.lib.dir" value="${strap.dir}/${lib.dir.name}"/>
<property name="strap.comp.dir" value="${strap.dir}/${comp.dir.name}"/>
<!--
##############################################################################
INITIALISATION
##############################################################################
-->
<target name="init">
<!-- Testing if everything is in place -->
<echo level="verbose">starr.lib.jar=${starr.lib.jar}</echo>
<fail message="STARR library in 'lib/' is not available">
<condition><not><and>
<available classname="scala.Predef"
classpath="${starr.lib.jar}"/>
<available classname="scala.List"
classpath="${starr.lib.jar}"/>
<available classname="scala.runtime.ObjectRef"
classpath="${starr.lib.jar}"/>
</and></not></condition>
</fail>
<echo level="verbose">starr.comp.jar=${starr.comp.jar}</echo>
<fail message="STARR compiler in 'lib/' is not available">
<condition><not>
<available classname="scala.tools.nsc.ant.NSC"
classpath="${starr.comp.jar}:${starr.lib.jar}"/>
</not></condition>
</fail>
<echo level="verbose">fjbg.jar=${fjbg.jar}</echo>
<fail message="FJBG library in 'lib/' is not available">
<condition><not>
<available classname="ch.epfl.lamp.fjbg.JCode"
classpath="${fjbg.jar}"/>
</not></condition>
</fail>
<echo level="verbose">msil.jar=${msil.jar}</echo>
<fail message="MSIL library in 'lib/' is not available">
<condition><not>
<available classname="ch.epfl.lamp.compiler.msil.Assembly"
classpath="${msil.jar}"/>
</not></condition>
</fail>
<echo level="verbose">jaco.jar=${jaco.jar}</echo>
<fail message="JaCo compiler in 'lib/' is not available">
<condition><not>
<available classname="jaco.pizza.Main" classpath="${jaco.jar}"/>
</not></condition>
</fail>
<echo level="verbose">ant.jar=${ant.jar}</echo>
<!-- Finding out what is available -->
<available property="excludes.avail" file="${nsc.excludes}"/>
<condition property="locker.avail">
<and>
<available classname="scala.Predef" classpath="${locker.lib.dir}"/>
<available classname="scala.List" classpath="${locker.lib.dir}"/>
<available classname="scala.runtime.ObjectRef"
classpath="${locker.lib.dir}"/>
<available classname="scala.tools.nsc.ant.NSC"
classpath="${locker.comp.dir}:${locker.lib.dir}"/>
<available file="${locker.dir}/${exec.dir.name}/${scalac.exec.name}"/>
</and>
</condition>
<!-- Creating class-pathes -->
<path id="common.classpath">
<pathelement location="${fjbg.jar}"/>
<pathelement location="${msil.jar}"/>
</path>
<path id="starr.classpath">
<pathelement location="${starr.lib.jar}"/>
<pathelement location="${starr.comp.jar}"/>
<path refid="common.classpath"/>
</path>
<!-- Defining version number -->
<tstamp prefix="start"/>
<property name="version" value="${start.DSTAMP}-${start.TSTAMP}"/>
<!-- Creating boot-level tasks -->
<taskdef name="starr"
classname="scala.tools.nsc.ant.NSC"
classpathref="starr.classpath"/>
<taskdef name="pico"
classname="jaco.pizza.ant.Pico"
classpath="${jaco.jar}"/>
</target>
<target name="init.locker" depends="init, build.locker">
<path id="locker.classpath">
<pathelement location="${locker.dir}/${lib.dir.name}"/>
<pathelement location="${locker.dir}/${comp.dir.name}"/>
<path refid="common.classpath"/>
</path>
<taskdef name="locker"
classname="scala.tools.nsc.ant.NSC"
classpathref="locker.classpath"/>
</target>
<target name="init.quick" depends="init, build">
<path id="quick.classpath">
<pathelement location="${quick.dir}/${lib.dir.name}"/>
<pathelement location="${quick.dir}/${comp.dir.name}"/>
<path refid="common.classpath"/>
</path>
<taskdef name="quick"
classname="scala.tools.nsc.ant.NSC"
classpathref="quick.classpath"/>
</target>
<!--
##############################################################################
BUILD SUPPORT MACROS
##############################################################################
-->
<macrodef name="build.exec">
<attribute name="lib.dir"/>
<attribute name="comp.dir"/>
<attribute name="exec.dir"/>
<sequential>
<mkdir dir="@{exec.dir}"/>
<copy file="${src.dir}/${exec.dir.name}/nscala.unix.tmpl"
tofile="@{exec.dir}/${wrapper.exec.name}">
<filterset>
<filter token="version" value="${version}"/>
<filter token="copyright" value="${copyright}"/>
<filter token="lib.path" value="@{lib.dir}"/>
<filter token="comp.path" value="@{comp.dir}"/>
<filter token="fjbg.jar" value="${fjbg.jar}"/>
<filter token="msil.jar" value="${msil.jar}"/>
<filter token="scala.exec.name" value="${scala.exec.name}"/>
<filter token="scalac.exec.name" value="${scalac.exec.name}"/>
<filter token="scalai.exec.name" value="${scalai.exec.name}"/>
<filter token="scalatok.exec.name" value="${scalatok.exec.name}"/>
</filterset>
</copy>
<chmod file="@{exec.dir}/${wrapper.exec.name}" perm="ugo+rx"/>
<symlink resource="${wrapper.exec.name}" overwrite="yes"
link="@{exec.dir}/${scala.exec.name}"/>
<symlink resource="${wrapper.exec.name}" overwrite="yes"
link="@{exec.dir}/${scalac.exec.name}"/>
<symlink resource="${wrapper.exec.name}" overwrite="yes"
link="@{exec.dir}/${scalai.exec.name}"/>
<symlink resource="${wrapper.exec.name}" overwrite="yes"
link="@{exec.dir}/${scalatok.exec.name}"/>
</sequential>
</macrodef>
<!--
##############################################################################
BUILD LOCAL REFERENCE (LOCKER) LAYER
##############################################################################
-->
<target name="build.locker" depends="init" unless="locker.avail">
<!-- Build library -->
<mkdir dir="${locker.lib.dir}"/>
<pico srcdir="${src.dir}/${lib.dir.name}"
destdir="${locker.lib.dir}"
scalahack="true">
<classpath>
<pathelement location="${locker.lib.dir}"/>
</classpath>
<include name="**/*.java"/>
</pico>
<starr srcdir="${src.dir}/${lib.dir.name}"
destdir="${locker.lib.dir}"
usepredefs="false"
debuginfo="${nsc.debug-info}">
<classpath>
<pathelement location="${locker.lib.dir}"/>
</classpath>
<include name="scala/Predef.scala"/>
<include name="scala/runtime/ScalaRunTime.scala"/>
</starr>
<starr srcdir="${src.dir}/${lib.dir.name}"
destdir="${locker.lib.dir}"
debuginfo="${nsc.debug-info}">
<classpath>
<pathelement location="${locker.lib.dir}"/>
</classpath>
<include name="**/*.scala"/>
<exclude name="scala/Predef.scala"/>
<exclude name="scala/runtime/ScalaRunTime.scala"/>
<excludesfile name="${nsc.excludes}" if="excludes.avail"/>
</starr>
<!-- Build compiler -->
<mkdir dir="${locker.comp.dir}"/>
<pico srcdir="${src.dir}/${comp.dir.name}"
destdir="${locker.comp.dir}"
scalahack="true">
<classpath>
<pathelement location="${locker.lib.dir}"/>
<pathelement location="${locker.comp.dir}"/>
</classpath>
<include name="**/*.java"/>
</pico>
<starr srcdir="${src.dir}/${comp.dir.name}"
destdir="${locker.comp.dir}"
debuginfo="${nsc.debug-info}">
<classpath>
<pathelement location="${locker.lib.dir}"/>
<pathelement location="${locker.comp.dir}"/>
<path refid="starr.classpath"/>
<pathelement location="${ant.jar}"/>
</classpath>
<include name="**/*.scala"/>
<excludesfile name="${nsc.excludes}" if="excludes.avail"/>
</starr>
<!-- Build executable files -->
<build.exec lib.dir="${locker.lib.dir}"
comp.dir="${locker.comp.dir}"
exec.dir="${locker.dir}/${exec.dir.name}"/>
</target>
<!--
##############################################################################
BUILD QUICK-TEST LAYER
##############################################################################
-->
<target name="build" depends="init.locker">
<!-- Build library -->
<mkdir dir="${quick.lib.dir}"/>
<pico srcdir="${src.dir}/${lib.dir.name}"
destdir="${quick.lib.dir}"
scalahack="true">
<classpath>
<pathelement location="${quick.lib.dir}"/>
</classpath>
<include name="**/*.java"/>
</pico>
<locker srcdir="${src.dir}/${lib.dir.name}"
destdir="${quick.lib.dir}"
usepredefs="false"
debuginfo="${nsc.debug-info}">
<classpath>
<pathelement location="${quick.lib.dir}"/>
</classpath>
<include name="scala/Predef.scala"/>
<include name="scala/runtime/ScalaRunTime.scala"/>
</locker>
<locker srcdir="${src.dir}/${lib.dir.name}"
destdir="${quick.lib.dir}"
debuginfo="${nsc.debug-info}">
<classpath>
<pathelement location="${quick.lib.dir}"/>
</classpath>
<include name="**/*.scala"/>
<exclude name="scala/Predef.scala"/>
<exclude name="scala/runtime/ScalaRunTime.scala"/>
<excludesfile name="${nsc.excludes}" if="excludes.avail"/>
</locker>
<!-- Build compiler -->
<mkdir dir="${quick.comp.dir}"/>
<pico srcdir="${src.dir}/${comp.dir.name}"
destdir="${quick.comp.dir}"
scalahack="true">
<classpath>
<pathelement location="${quick.lib.dir}"/>
<pathelement location="${quick.comp.dir}"/>
</classpath>
<include name="**/*.java"/>
</pico>
<locker srcdir="${src.dir}/${comp.dir.name}"
destdir="${quick.comp.dir}"
debuginfo="${nsc.debug-info}">
<classpath>
<pathelement location="${quick.lib.dir}"/>
<pathelement location="${quick.comp.dir}"/>
<path refid="locker.classpath"/>
<pathelement location="${ant.jar}"/>
</classpath>
<include name="**/*.scala"/>
<excludesfile name="${nsc.excludes}" if="excludes.avail"/>
</locker>
<!-- Build executable files -->
<build.exec lib.dir="${quick.lib.dir}"
comp.dir="${quick.comp.dir}"
exec.dir="${quick.dir}/${exec.dir.name}"/>
</target>
<!--
##############################################################################
TEST
##############################################################################
-->
<target name="test" depends="init.quick">
<!-- Build the bootstrap layer -->
<!-- Build library -->
<mkdir dir="${strap.lib.dir}"/>
<pico srcdir="${src.dir}/${lib.dir.name}"
destdir="${strap.lib.dir}"
scalahack="true">
<classpath>
<pathelement location="${strap.lib.dir}"/>
</classpath>
<include name="**/*.java"/>
</pico>
<quick srcdir="${src.dir}/${lib.dir.name}"
destdir="${strap.lib.dir}"
usepredefs="false"
debuginfo="${nsc.debug-info}">
<classpath>
<pathelement location="${strap.lib.dir}"/>
</classpath>
<include name="scala/Predef.scala"/>
<include name="scala/runtime/ScalaRunTime.scala"/>
</quick>
<quick srcdir="${src.dir}/${lib.dir.name}"
destdir="${strap.lib.dir}"
debuginfo="${nsc.debug-info}">
<classpath>
<pathelement location="${strap.lib.dir}"/>
</classpath>
<include name="**/*.scala"/>
<exclude name="scala/Predef.scala"/>
<exclude name="scala/runtime/ScalaRunTime.scala"/>
<excludesfile name="${nsc.excludes}" if="excludes.avail"/>
</quick>
<!-- Build compiler -->
<mkdir dir="${strap.comp.dir}"/>
<pico srcdir="${src.dir}/${comp.dir.name}"
destdir="${strap.comp.dir}"
scalahack="true">
<classpath>
<pathelement location="${strap.lib.dir}"/>
<pathelement location="${strap.comp.dir}"/>
</classpath>
<include name="**/*.java"/>
</pico>
<quick srcdir="${src.dir}/${comp.dir.name}"
destdir="${strap.comp.dir}"
debuginfo="${nsc.debug-info}">
<classpath>
<pathelement location="${strap.lib.dir}"/>
<pathelement location="${strap.comp.dir}"/>
<path refid="quick.classpath"/>
<pathelement location="${ant.jar}"/>
</classpath>
<include name="**/*.scala"/>
<excludesfile name="${nsc.excludes}" if="excludes.avail"/>
</quick>
<!-- Build executable files -->
<build.exec lib.dir="${strap.lib.dir}"
comp.dir="${strap.comp.dir}"
exec.dir="${strap.dir}/${exec.dir.name}"/>
<!-- Compares quick and test level -->
<checksum totalproperty="quick.md5">
<fileset dir="${quick.dir}"/>
</checksum>
<delete quiet="true" failonerror="false">
<fileset dir="${quick.dir}"><include name="**/*.MD5"/></fileset>
</delete>
<checksum totalproperty="strap.md5">
<fileset dir="${strap.dir}"/>
</checksum>
<delete quiet="true" failonerror="false">
<fileset dir="${strap.dir}"><include name="**/*.MD5"/></fileset>
</delete>
<fail message="Build is not stable">
<condition><not>
<equals arg1="${quick.md5}" arg2="${strap.md5}"/>
</not></condition>
</fail>
<echo>Build is stable</echo>
</target>
<!--
##############################################################################
DOCUMENT
##############################################################################
-->
<target name="docs">
<echo>Docs is not available yet.</echo>
</target>
<!--
##############################################################################
GENERATES A DISTRIBUTION
##############################################################################
-->
<target name="dist">
<echo>Dist is not available yet.</echo>
</target>
<!--
##############################################################################
CLEAN
##############################################################################
-->
<macrodef name="remove">
<attribute name="dir"/>
<sequential>
<delete dir="@{dir}"
includeemptydirs="true"
quiet="true"
failonerror="false"/>
</sequential>
</macrodef>
<target name="clean">
<remove dir="${quick.dir}"/>
<remove dir="${strap.dir}"/>
</target>
<target name="clean.all">
<remove dir="${locker.dir}"/>
<remove dir="${quick.dir}"/>
<remove dir="${strap.dir}"/>
<remove dir="${distrib.unix.dir}"/>
<remove dir="${distrib.win.dir}"/>
<remove dir="${distrib.latest.dir}"/>
</target>
</project>
|