summaryrefslogblamecommitdiff
path: root/build.xml
blob: 622a54de5570324e92b438a64eb744a8cf61b56e (plain) (tree)
1
2
3
4
5
6
7
8
9
10

                                      
 


                                           
                                                                                


                                                                               
                                            
 


                                                                                


                                   
                                                         

                            
                                                                            













                                                      
                                                              

                                             
                                             
                                                                   
                                        



                                                                         



                                                             

                                                            
                                                                       
                                                



                                                           




                                                                 

                                                               
                                            

                                                                            
                                                         

                                                    
                                                        
                                                        






                                                                           
                          


                                                        
 


                                                                                
 
                                          














                                                                 
                                                     























                                                                        

















                                                                    

                                                     
                                                    

                  
























                                                               
                                                
                                        
                                                   

                                         
                                                




                                                               



                                                              












                                                  
















                                                                         
                                                                 


                                                
                                    





                                                               

                                                 
                                                            
                                                                 

                                                                  
                                             

           
                                                            



                                                              
           
                          
                                               
                                              


                                                  

           
                                                    



                                                             
           
                         
                                               
                                             


                                                  


                                                    
           



                                                                                
  
















                                                   





























                                                                           
 


                                                                                

                                                                   
  
                                                                    
                                               



                                             
                          






                                                   
                           






                                                        
                                       











                                                                
                          






                                                    
                                        








                                                                
                                                                           
                                              
                                            
                                   






                                                                               
                                                                                                                                          
                                                              
                                              



                                                                    
                                                       
           



                                                                                
  
                                              



                                             
                          






                                                  
                          
                                    
                                              






                                                        
                                     
                                    
                                              











                                                                
                          






                                                   
                                      
                                    
                                              








                                                                
                                                                           
                                             
                                           
                                   






                                                                              
                                                                                                                                          
                                                              
                                              



                                                                   








                                                                          
           
  
                                            

                                                    
 


                                                                                
  

                                                                   
                                                   




                                             
                          






                                                  
                          
                                     






                                                        
                                     
                                     











                                                                
                          






                                                   
                                      
                                     








                                                                
                                                                           
                                             
                                           
                                   

                                                                       




                                                                             
                                                                                                                                         
                                                             
                                             



                                                                   








                                                                         


                                                      

                                          



                                             
               
                                         


                                                                      



                                             
               
                                         








                                                                      



                                                    
 


                                                                                




                                           


                                                                                
 
                                     


                                                            

                                     
                                                                       
                                                              
                                                                   
                                                              
   

                 
                                                           
                                    


                                                                       
          


                                                              

                                          
                                                                 






                                                                        
                                              



                                                             










                                                                    






                                               
          

              


                                                                        

                                                                        
                        
                                 

                                                                                  
                                                                                
                                                                      


                


                                                                       




                                                                                
                                                                           
                                                                               
                                                                     


                


                                                                               

                                                                               
                                                                                 
                










                                                                                  
           



                                                                                




                           


                                    



                       
                                


                           













                                               
           

          
<?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-2006 LAMP/EPFL"/>
  <!-- NSC configuration properties -->
  <property name="nsc.logging" value="none"/>
  <property name="nsc.log-files" value="no"/>
  <property name="nsc.excludes" value="${basedir}/build.excludes"/>
  <property name="nsc.params" value=""/>
  <!-- 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.name" value="fjbg.jar"/>
  <property name="fjbg.jar" value="${lib.dir}/${fjbg.name}"/>
  <property name="msil.name" value="msil.jar"/>
  <property name="msil.jar" value="${lib.dir}/${msil.name}"/>
  <property name="scala.dll" value="${lib.dir}/scala.dll"/>
  <property name="ant.jar" value="${ant.home}/lib/ant.jar"/>
  <property name="ant-contrib.jar" value="${lib.dir}/ant-contrib.jar"/>
  <!-- Location of build products properties -->
  <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"/>
  <!-- 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="dist.dir" value="${basedir}/dists"/>
  <property name="dist.latest.dir" value="${dist.dir}/latest"/>
  <property name="dist.name" value="scala"/>
  <property name="lib.jar.name" value="${dist.name}-${lib.dir.name}.jar"/>
  <property name="comp.jar.name" value="${dist.name}-${comp.dir.name}.jar"/>
  <property name="scala.exec.name" value="${dist.name}"/>
  <property name="scalai.exec.name" value="scalai"/>
  <property name="scalac.exec.name" value="scalac"/>
  <property name="scalaint.exec.name" value="scalaint"/>
  <property name="scalatok.exec.name" value="scalatok"/>
  <!-- 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}"/>
  <!-- sbaz properties -->
  <property name="scala.sbaz.name" value="scala"/>
  <property name="scalac.sbaz.name" value="scalac"/>
  <property name="scalaint.sbaz.name" value="scalaint"/>

<!-- ===========================================================================
INITIALISATION
============================================================================ -->

  <target name="init" unless="init.avail">
    <!-- 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.ant.Scalac"
                   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>
    <echo level="verbose">ant-contrib.jar=${ant-contrib.jar}</echo>
    <fail message="Additional Ant tasks in 'lib/' is not available">
      <condition><not>
        <available classname="net.sf.antcontrib.AntContribVersion"
                   classpath="${ant-contrib.jar}"/>
      </not></condition>
    </fail>
    <!-- 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>
    <!-- Creating boot-level tasks -->
    <taskdef resource="net/sf/antcontrib/antlib.xml">
      <classpath>
        <pathelement location="${ant-contrib.jar}"/>
      </classpath>
    </taskdef>
    <!-- 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><echo>OS type:  Cygwin</echo></then>
      <elseif><isset property="os.win"/>
        <then><echo>OS type:  Windows</echo></then>
      </elseif>
      <elseif><isset property="os.unix"/>
        <then><echo>OS type:  UNIX</echo></then>
      </elseif>
      <else>
        <fail>System environment could not be determined</fail>
      </else>
    </if>
    <echo>OS name:  ${os.name} ${os.arch} ${os.version}</echo>
    <echo>Java:     ${java.version} ('${java.home}')</echo>
    <echo>Java VM:  ${java.vm.name} ${java.vm.version}</echo>
    <echo>Ant:      ${ant.version}</echo>
  </target>
  
  <target name="setup" depends="init">
    <!-- Creating boot-level tasks -->
    <taskdef name="starr"
             classname="scala.tools.ant.Scalac"
             classpathref="starr.classpath"/>
    <taskdef name="starrtool"
             classname="scala.tools.ant.ScalaTool"
             classpathref="starr.classpath"/>
    <taskdef name="pico"
             classname="jaco.pizza.ant.Pico"
             classpath="${jaco.jar}"/>
    <!-- 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>
          STARR has been updated. LOCKER is obsolete and will be rebuilt.
        </echo>
        <runtarget target="clean"/>
      </then>
    </if>
    <!-- Finding out what is available -->
    <available property="excludes.avail" file="${nsc.excludes}"/>
    <echo level="verbose">excludes.avail=${excludes.avail}</echo>
    <condition property="locker.avail">
      <available file="${locker.dir}/complete"/>
    </condition>
    <!-- Defining version number -->
    <exec executable="svnversion" outputproperty="svn.version">
      <arg line="${basedir}"/>
    </exec>
    <echo level="verbose">svn.version=${svn.version}</echo>
    <propertyregex property="version"
                   input="${svn.version}"
                   regexp="([0-9]*:)?([0-9]*)\.*"
                   select="\2"/>
    <property name="version.number" value="2.0.${version}"/>
    <echo level="verbose">version.number=${version.number}</echo>
    <property name="dist.current.dir"
              value="${dist.dir}/${dist.name}-${version.number}"/>
    <property name="init.avail" value="yes"/>
  </target>
  
  <target name="setup.locker" depends="setup, 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.ant.Scalac"
             classpathref="locker.classpath"/>
    <taskdef name="lockertool"
             classname="scala.tools.ant.ScalaTool"
             classpathref="locker.classpath"/>
  </target>
  
  <target name="setup.quick" depends="setup, 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.ant.Scalac"
             classpathref="quick.classpath"/>
    <taskdef name="quicktool"
             classname="scala.tools.ant.ScalaTool"
             classpathref="quick.classpath"/>
    <taskdef name="quicksbaz"
             classname="scala.tools.ant.ScalaBazaar"
             classpathref="quick.classpath"/>
  </target>

<!-- ===========================================================================
BUILD SUPPORT MACROS
============================================================================ -->
  
  <macrodef name="build.support">
    <attribute name="build.dir"/>
    <sequential>
      <copy todir="@{build.dir}/${lib.dir.name}">
        <fileset dir="${src.dir}/${lib.dir.name}">
          <include name="**/*.tmpl"/>
          <include name="**/*.xml"/>
        </fileset>
      </copy>
      <copy todir="@{build.dir}/${comp.dir.name}">
        <fileset dir="${src.dir}/${comp.dir.name}">
          <include name="**/*.tmpl"/>
          <include name="**/*.xml"/>
        </fileset>
      </copy>
    </sequential>
  </macrodef>
  
  <macrodef name="build.links">
    <attribute name="build.dir"/>
    <sequential>
      <if>
        <not><and>
          <available file="@{build.dir}/${fjbg.name}"/>
          <available file="@{build.dir}/${msil.name}"/>
        </and></not>
        <then>
          <if><isset property="os.unix"/>
            <then>
              <symlink link="@{build.dir}/${fjbg.name}"
                       resource="${fjbg.jar}"
                       overwrite="yes"
                       failonerror="no"/>
              <symlink link="@{build.dir}/${msil.name}"
                       resource="${msil.jar}"
                       overwrite="yes"
                       failonerror="no"/>
            </then>
            <else>
              <copy file="${fjbg.jar}" tofile="@{build.dir}/${fjbg.name}"/>
              <copy file="${msil.jar}" tofile="@{build.dir}/${msil.name}"/>
            </else>
          </if>
        </then>
      </if>
    </sequential>
  </macrodef>

<!-- ===========================================================================
BUILD LOCAL REFERENCE (LOCKER) LAYER
============================================================================ -->

  <target name="newlocker" depends="clean.unfreeze, build.locker"/>
  
  <target name="build.locker" depends="setup" unless="locker.avail">
    <property name="built.locker" value="yes"/>
    <!-- Build library -->
    <mkdir dir="${locker.lib.dir}"/>
    <pico srcdir="${src.dir}/${lib.dir.name}"
          destdir="${locker.lib.dir}"
          scalahack="yes">
      <classpath>
        <pathelement location="${locker.lib.dir}"/>
      </classpath>
      <include name="**/*.java"/>
    </pico>
    <starr srcdir="${src.dir}/${lib.dir.name}"
           destdir="${locker.lib.dir}"
           usepredefs="no">
      <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}">
      <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="yes">
      <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}">
      <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>
    <!-- Copy support files to build folder and links external libraries-->
    <build.support build.dir="${locker.dir}"/>
    <build.links build.dir="${locker.dir}"/>
    <!-- Build executable files -->
    <mkdir dir="${locker.dir}/${exec.dir.name}"/>
    <starrtool file="${locker.dir}/${exec.dir.name}/${scalac.exec.name}"
                genericFile="${locker.dir}/${exec.dir.name}/${scala.exec.name}"
                name="Scala compiler"
                class="scala.tools.nsc.Main"
                version="${version.number}"
                copyright="${copyright}"
                classpath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${comp.dir.name}:#SCALA_HOME#/${fjbg.name}:#SCALA_HOME#/${msil.name}"
                properties="scala.boot.class.path=#CLASSPATH#"
                javaFlags="-Xmx256M -Xms16M"/>
    <chmod file="${locker.dir}/${exec.dir.name}/${scalac.exec.name}"
           perm="ugo+rx"/>
    <chmod file="${locker.dir}/${exec.dir.name}/${scala.exec.name}"
           perm="ugo+rx"/>
    <touch file="${locker.dir}/complete" verbose="no"/>
  </target>

<!-- ===========================================================================
BUILD QUICK-TEST LAYER
============================================================================ -->
  
  <target name="build" depends="setup.locker">
    <!-- Build library -->
    <mkdir dir="${quick.lib.dir}"/>
    <pico srcdir="${src.dir}/${lib.dir.name}"
          destdir="${quick.lib.dir}"
          scalahack="yes">
      <classpath>
        <pathelement location="${quick.lib.dir}"/>
      </classpath>
      <include name="**/*.java"/>
    </pico>
    <locker srcdir="${src.dir}/${lib.dir.name}"
           destdir="${quick.lib.dir}"
           usepredefs="no"
           addparams="${nsc.params}"
           scalacdebugging="${nsc.log-files}">
      <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}"
           addparams="${nsc.params}"
           scalacdebugging="${nsc.log-files}">
      <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="yes">
      <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}"
           addparams="${nsc.params}"
           scalacdebugging="${nsc.log-files}">
      <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>
    <!-- Copy support files to build folder and links external libraries-->
    <build.support build.dir="${quick.dir}"/>
    <build.links build.dir="${quick.dir}"/>
    <!-- Build executable files -->
    <mkdir dir="${quick.dir}/${exec.dir.name}"/>
    <lockertool file="${quick.dir}/${exec.dir.name}/${scalac.exec.name}"
                genericFile="${quick.dir}/${exec.dir.name}/${scala.exec.name}"
                name="Scala compiler"
                class="scala.tools.nsc.Main"
                version="${version.number}"
                copyright="${copyright}"
                classpath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${comp.dir.name}:#SCALA_HOME#/${fjbg.name}:#SCALA_HOME#/${msil.name}"
                properties="scala.boot.class.path=#CLASSPATH#"
                javaFlags="-Xmx256M -Xms16M"/>
    <chmod file="${quick.dir}/${exec.dir.name}/${scalac.exec.name}"
           perm="ugo+rx"/>
    <chmod file="${quick.dir}/${exec.dir.name}/${scala.exec.name}"
           perm="ugo+rx"/>
    <lockertool file="${quick.dir}/${exec.dir.name}/${scalaint.exec.name}"
                name="Scala interpreter"
                class="scala.tools.nsc.MainInterpreter"
                version="${version.number}"
                copyright="${copyright}"
                classpath=""
                javaFlags="-Xmx256M -Xms16M"/>
    <chmod file="${quick.dir}/${exec.dir.name}/${scalaint.exec.name}"
           perm="ugo+rx"/>
  </target>
  
  <target name="test.quick" depends="build">
    <echo>Ant test bench is not available yet</echo>
  </target>

<!-- ===========================================================================
TEST
============================================================================ -->
  
  <target name="test" depends="clean, test.stability, test.strap"/>
  
  <target name="build.strap" depends="setup.quick">
    <!-- Build the bootstrap layer -->
    <!-- Build library -->
    <mkdir dir="${strap.lib.dir}"/>
    <pico srcdir="${src.dir}/${lib.dir.name}"
          destdir="${strap.lib.dir}"
          scalahack="yes">
      <classpath>
        <pathelement location="${strap.lib.dir}"/>
      </classpath>
      <include name="**/*.java"/>
    </pico>
    <quick srcdir="${src.dir}/${lib.dir.name}"
           destdir="${strap.lib.dir}"
           usepredefs="no"
           addparams="${nsc.params}">
      <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}"
           addparams="${nsc.params}">
      <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="yes">
      <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}"
           addparams="${nsc.params}">
      <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>
    <!-- Copy support files to build folder and links external libraries-->
    <build.support build.dir="${strap.dir}"/>
    <build.links build.dir="${strap.dir}"/>
    <!-- Build executable files -->
    <mkdir dir="${strap.dir}/${exec.dir.name}"/>
    <quicktool file="${strap.dir}/${exec.dir.name}/${scalac.exec.name}"
               genericFile="${strap.dir}/${exec.dir.name}/${scala.exec.name}"
               name="Scala compiler"
               class="scala.tools.nsc.Main"
               version="${version.number}"
               copyright="${copyright}"
               classpath="#SCALA_HOME#/${lib.dir.name}:#SCALA_HOME#/${comp.dir.name}:#SCALA_HOME#/${fjbg.name}:#SCALA_HOME#/${msil.name}"
               properties="scala.boot.class.path=#CLASSPATH#"
               javaFlags="-Xmx256M -Xms16M"/>
    <chmod file="${strap.dir}/${exec.dir.name}/${scalac.exec.name}"
           perm="ugo+rx"/>
    <chmod file="${strap.dir}/${exec.dir.name}/${scala.exec.name}"
           perm="ugo+rx"/>
    <quicktool file="${strap.dir}/${exec.dir.name}/${scalaint.exec.name}"
               name="Scala interpreter"
               class="scala.tools.nsc.MainInterpreter"
               version="${version.number}"
               copyright="${copyright}"
               classpath=""
               javaFlags="-Xmx256M -Xms16M"/>
    <chmod file="${strap.dir}/${exec.dir.name}/${scalaint.exec.name}"
           perm="ugo+rx"/>
  </target>
  
  <target name="test.stability" depends="build.strap">
    <!-- Compares quick and test level -->
    <checksum totalproperty="quick.md5">
      <fileset dir="${quick.dir}">
        <include name="${lib.dir.name}/**"/>
        <include name="${comp.dir.name}/**"/>
      </fileset>
    </checksum>
    <delete quiet="yes" failonerror="no">
      <fileset dir="${quick.dir}"><include name="**/*.MD5"/></fileset>
    </delete>
    <checksum totalproperty="strap.md5">
      <fileset dir="${strap.dir}">
        <include name="${lib.dir.name}/**"/>
        <include name="${comp.dir.name}/**"/>
      </fileset>
    </checksum>
    <delete quiet="yes" failonerror="no">
      <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>
  
  <target name="test.strap" depends="build.strap">
    <echo>Ant test bench is not available yet</echo>
  </target>

<!-- ===========================================================================
DOCUMENT
============================================================================ -->
  
  <target name="docs">
    <echo>Docs is not available yet.</echo>
  </target>

<!-- ===========================================================================
GENERATES A DISTRIBUTION
============================================================================ -->

  <target name="dist" depends="test">
    <mkdir dir="${dist.current.dir}"/>
    <mkdir dir="${dist.current.dir}/lib"/>
    <jar destfile="${dist.current.dir}/lib/${comp.jar.name}"
         basedir="${strap.comp.dir}">
      <manifest>
        <attribute name="Signature-Version" value="${version.number}"/>
<!-- For a sbaz package, the Main-Class should not be included
        <attribute name="Main-Class" value="scala.tools.nsc.Main"/>
        <attribute name="Class-Path" value="${lib.jar.name}"/>
-->
      </manifest>
    </jar>
    <jar destfile="${dist.current.dir}/lib/${lib.jar.name}"
         basedir="${strap.lib.dir}">
      <manifest>
        <attribute name="Signature-Version" value="${version.number}"/>
      </manifest>
    </jar>
    <copy file="${fjbg.jar}" todir="${dist.current.dir}/lib"/>
    <copy file="${msil.jar}" todir="${dist.current.dir}/lib"/>
    <mkdir dir="${dist.current.dir}/bin"/>
    <!-- Build executable files -->
    <mkdir dir="${dist.current.dir}/bin"/>
    <quicktool file="${dist.current.dir}/bin/${scalac.exec.name}"
                genericFile="${dist.current.dir}/bin/${scala.exec.name}"
                name="Scala compiler"
                class="scala.tools.nsc.Main"
                version="${version.number}"
                copyright="${copyright}"
                classpath=""
                properties="scala.boot.class.path=#CLASSPATH#"
                javaFlags="-Xmx256M -Xms16M"/>
    <chmod file="${dist.current.dir}/bin/${scalac.exec.name}"
           perm="ugo+rx"/>
    <chmod file="${dist.current.dir}/bin/${scala.exec.name}"
           perm="ugo+rx"/>
    <lockertool file="${dist.current.dir}/bin/${scalaint.exec.name}"
                name="Scala interpreter"
                class="scala.tools.nsc.MainInterpreter"
                version="${version.number}"
                copyright="${copyright}"
                classpath=""
                javaFlags="-Xmx256M -Xms16M"/>
    <chmod file="${dist.current.dir}/bin/${scalaint.exec.name}"
           perm="ugo+rx"/>


    <if><isset property="os.unix"/>
      <then>
        <symlink link="${dist.latest.dir}"
                 resource="${dist.current.dir}"
                 overwrite="yes"
                 failonerror="no"/>
      </then>
    </if> 

    <quicksbaz
       file="${dist.dir}/${scalac.sbaz.name}-${version.number}.sbp"
       adfile="${dist.dir}/${scalac.sbaz.name}-${version.number}.advert"
       name="${scalac.sbaz.name}"
       version="${version.number}"
       desc="The Scala compiler.  This is used to compile Scala programs
into Java .class files."
       depends="scalac2-support">
      <libset dir="${dist.current.dir}/lib" includes="${dist.name}-compiler.jar"/>
      <binset dir="${dist.current.dir}/bin" includes="${scalac.exec.name}"/>
      <binset dir="${dist.current.dir}/bin" includes="${scalac.exec.name}.bat"/>
      <manset dir="${docs.dir}/man" includes="${scalac.exec.name}.1"/>
    </quicksbaz>

    <quicksbaz
       file="${dist.dir}/${scala.sbaz.name}-${version.number}.sbp"
       adfile="${dist.dir}/${scala.sbaz.name}-${version.number}.advert"
       name="${scala.sbaz.name}"
       version="${version.number}"
       desc="The Scala command runner.  It is a wrapper around the Java VM that,
by default, sets up a large CLASSPATH including the Scala library
as well as all jars installed in the lib directory of the sbaz-
managed directory.">
      <binset dir="${dist.current.dir}/bin" includes="${scala.exec.name}"/>
      <binset dir="${dist.current.dir}/bin" includes="${scala.exec.name}.bat"/>
      <manset dir="${docs.dir}/man" includes="${scala.exec.name}.1"/>
    </quicksbaz>

    <quicksbaz
       file="${dist.dir}/${scala.sbaz.name}-library-${version.number}.sbp"
       adfile="${dist.dir}/${scala.sbaz.name}-library-${version.number}.advert"
       name="${scala.sbaz.name}-library"
       version="${version.number}"
       desc="The base Scala library, required for running all Scala programs.">
      <libset dir="${dist.current.dir}/lib" includes="${dist.name}-library.jar"/>
    </quicksbaz>

    <quicksbaz
      file="${dist.dir}/${scalaint.sbaz.name}-${version.number}.sbp"
      adfile="${dist.dir}/${scalaint.sbaz.name}-${version.number}.advert"
      name="${scalaint.sbaz.name}"
      version="${version.number}"
      depends="${scalac.sbaz.name}"
      desc="A command-line interpreter for Scala.">
      <binset dir="${dist.current.dir}/bin" includes="${scalaint.exec.name}"/>
      <binset dir="${dist.current.dir}/bin" includes="${scalaint.exec.name}.bat"/>
    </quicksbaz>
  </target>

<!-- ===========================================================================
CLEAN
============================================================================ -->
  
  <macrodef name="remove">
    <attribute name="dir"/>
    <sequential>
      <delete dir="@{dir}"
              includeemptydirs="yes"
              quiet="yes"
              failonerror="no"/>
    </sequential>
  </macrodef>
  
  <target name="clean">
    <remove dir="${build.dir}"/>
  </target>
  
  <target name="clean.all">
    <remove dir="${build.dir}"/>
    <remove dir="${dist.dir}"/>
  </target>
  
  <target name="clean.unfreeze" depends="init">
    <delete file="${locker.dir}/complete"
            quiet="yes"
            failonerror="no"/>
    <if>
      <not><isset property="unsafe"/></not>
      <then>
        <remove dir="${quick.dir}"/>
      </then>
    </if>
  </target>

</project>