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

                                      
 


                                           
                                                                                

                                                                               
 
                                                                          
 


                                                                                
 
                               



                                                      
                                        



                                                     

                                                                        
                                       
                                          
                                                  
                                                                          
                                                        
                                                                
                                              
                                             
                                                                        
                                        



                                                                         
                                                         
                                                            
                                                           
                                                                       
 
                                         



                                                           

                                                                   
                                                               
                                                               
                                                       
                                                       
                                                     
                                                           
                                                      


                                                             
                                                               

                                                                  
                                                                  
                                                                    
                                                  
                                                    
                                                        
                                              
                                                               
                                                             
                                                             

                                                                                    
                                                                                
                  
                                                                                
 
                          

                                                                                                             
                           


                                             
                                       
                                              

                              


                                                    

                                                                                                        
                                                          

                              

           



                                                                                
                                                             






                                                                                                                          



                                                                    





                                                                           
















                                                                   
                                     
                                                            
                                        
                                                               

                                         
                                                            
               
                                                                          
         
                                               
                                 

                                                          
                                   




                                                       
                  

                                                          
                        
                                             

                                                                               
                                                                           
                      
                                                                              
                      
                                                         
                      
                                         
           
 



                                                                                
                                      






                                                 
                                            
           
                                    


                                        
                                      


                                           

                                       







                                                             

                                                                            
                                         

             

                                                                      


                                                
                                    
                                     
             
                           
                                                                                              


                                                                                      
           
 
                                                            



                                                          
                                           
           


                                        
                                       
           
 
                                                    



                                                         
                                           
           
            

                                                     
            

                                                              
            
                                                          
                                      
           



                                                                                
 


                                 

                                             

                                     

                                    

                  

                                              

                                     

                                    



                  
 


                                 
                                                                        


                                                                       


                                                                     

                    








                                                                        








                                                                         

                 
 


                                                                                
 
                          
                                          
                                                            
 
                                                                    
                                               
                                    
                        






                                                                       
                                                          
                
                                            
          




                                                 
          

                                         


                                       

                                           
          

                                         
                               
                                       
                                            

                                          
                                    
                                       
                                                                     
            









                                                                     

                                             
          
                                  
                                          
                               
                                        
                 

                                                            
                                             
                                             
                                            
                                              

                                  
                                                                     
            









                                                                     
                           
                                                   
                                                                         
                                              
                                            
                                 


                                           

                                       
               
                                                 
                                 


                                               
                                 
               
                                                  


                                  
                                     
                                 
               
                                                    

                                  
                       
                                 
                                     
                                 
               




                                               
                                 






                                                      
                                                 



                                
                                                  
                                                       
           



                                                                                
 

                                                                      
                                   

                                           
          




                                                 
           

                                        

                               
                                       
                                        

                                          
           

                                        

                                       
                                        
                                           

                                          
                                    
                                       
                                                                     
             









                                                                     

                                       
           

                                    

                                       
                                         
                 

                                                          

                                            
                                                                     
             

                                          





                                                 


                                       

                                       







                                                                     

                                            
           

                                         

                                       
                                         
                 

                                                           
                                             
                                             
                                            
                                              

                                  
                                                                     
             









                                                                     












                                                           









                                                                     
                           
                                                  
                                                                         
                                             
                                           
                                 


                                           

                                      
              
                                                
                                 
                                     

                                               
                                 
              
                                                 


                                  
                                     
                                 
              
                                                   

                                  
                       
                                 
                                     
                                 
              
                                              
                                


                                           






                                                     
                                                



                               
           
 
                                            
                      
                                                      
           
 
                                                                                

                                                                                

                                                                 
                                                                 


































                                                                               
                                          
                                                                   

                              
                                       
                         




                                     
                                                







                                                    
                                       





                                        
                                                







                                             
                                       




                                        
                                                




















                                                                     
















                                                                                


                                                       

















                                                                                         


                                                                                










                                                                                
                                                         










                                               
                                                                    
                                                                 

                                                                









                                                  
                                          


                                                
                                                             
            






















                                                                      

           
                                               


                                   
                             






                                                               










                                                               
                        
                                                























                                                       
                                                                                

                                                                                
 

                                                          
 
                                    
                                                   
                                   

                                           
          




                                                 
          

                                        

                                               

                                          
          

                                        

                                       
                                           

                                          
                                    
                                       
                                                                     
            









                                                                     

                                       
          

                                    

                                        
                 

                                                          

                                            
                                                                     
            

                                          

                                
                                       
                                                 
                                         
                                         










                                                                     

                                            
          


                                         
                 

                                                           
                                             
                                             
                                            
                                              

                                  
                                                                     
            









                                                                     

                                           
          








                                                           
            









                                                                     
                           
                                                  
                                                                         
                                             
                                           
                                 


                                           

                                      
              
                                                
                                 
                                     

                                               
                                 
              
                                                 


                                  
                                     
                                 
              
                                                   

                                  
                       
                                 
                                     
                                 
              
                                              
                                


                                           






                                                     
                                                



                               
           
 
                                        
                                                      






                                                                             
                                        


                                      
                
               
                                         
                                                       

                                        


                                      
                
               
                                         
                                                       
             
                                                          



                                                         
                                                                     
                
           
 
                                                  
                                                                       
           
 
                                                                                
             
                                                                                
 


                                                        
             
                         
                              
                   
                                       
                                               
                                                                                           
                                                                                   
                                      
                                         

                                                                     
               
           
 


                                                         
             

                                  
                   
                                                
                                                                                            
                 

                                                           
                                             
                                             
                                            
                                              

                                  
                                                                     

               
 












                                                           
                         



                              
                            






























                                                                     


                                                                                
 

                                           
                                   
                                                                                
                              
           
 
                                           
                                        


                                                                       
                                   
                                                                                   
                              
           
 
                                           
                                        


                                                                       
                                     
                                   
                                                                                   
                              
           
 
                     
                                           
                                                                                            
 



                                                             
                         
                                
                                                      
                                     
                                                           






                                                                      
                                                         
                
                                      
                                      
                                          







                                                                                
                                                             
                                                
                                     
                                     
                
                                                                       
                                                         
                                                                   









                                                                              








                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

                 
                                                            
                                               
                                              

                                                                       
                                                         
                                                                    








                                                                              



                                                                            
                                                                         
                                                                

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                
                 
          
                                                            
                                           

                                                                       










                                                                              








                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          

                 


























                                                                                                                                                                                  
 

                              



                                                            





                                                           




                                                           



                                                            

                                  
                                          





                                                                               
                                                                          
















                                                                     
                                            
                                                        

                                                

                                                            

                                                    
           

                                                         
           
                                               
                                                        
           
                                                      
                                     




                                   
           

                                                 
 
                                   
                                                         
                                                                                         

                                           
              


                                                                 
                                 
                                                                                         
                                                                  

                                                                                              
                
                                              
              


                                                               
                                 
                                                                                                                                                                           

                                                                


                                                                         
                                                                            
                                                           
                
                                                   
              


                                                         
                                 
                                                                                         


                                                           
              


                                                              

                                                                             

                                                               
                                                                              

                             
                                                                                                                                                                                                                  
                











                                                                                    









                                                                                            
           
 

                                                    
                                                        



                                                                          
             
                                                    
                          

                             
        

                                                          
             
                                                    
                          
                      











                                                                

           


                                                                                
 


                           






                                                                     
                                                                                

                 
 
                                                                                                    
                                
                                
                              

           
                                               
                                             
                                
           
 
                                                                                             


                               



                                                                                             
                                             
                                                               


                                
 
                                               
                                                                        
                                
           

          
<?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 level="info" message="Running SABBUS for ${ant.project.name}..."/>

<!-- ===========================================================================
PROPERTIES
============================================================================ -->

  <property environment="env"/>

  <!-- Prevents system classpath from being used -->
  <property name="build.sysclasspath" value="ignore"/>

  <!-- Defines the repository layout -->
  <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"/>
  <!-- Loads custom properties definitions -->
  <property name="properties.file" value="${basedir}/build.properties"/>
  <property file="${properties.file}"/>
  <!-- Defines the product being built -->
  <property name="vendor.name" value="LAMP/EPFL"/>
  <property name="copyright.string" value="(c) 2002-2007 ${vendor.name}"/>
  <property name="java.flags" value="-Xmx256M -Xms16M"/>
  <property name="number.file" value="${basedir}/build.number"/>
  <!-- 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=""/>
  <!-- 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="ant.jar" value="${ant.home}/lib/ant.jar"/>
  <property name="jline.jar" value="${lib.dir}/jline.jar"/>
  <property name="ant-contrib.jar" value="${lib.dir}/ant-contrib.jar"/>

  <!-- 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="api-lib.dir" value="${build.dir}/api-library"/>
  <property name="api-comp.dir" value="${build.dir}/api-compiler"/>
  <property name="tooldocs.dir" value="${build.dir}/tooldocs"/>
  <property name="examples.dir" value="${build.dir}/examples"/>
  <property name="cldc.dir" value="${build.dir}/cldc"/>
  <property name="msil.dir" value="${build.dir}/msil"/>
  <property name="mono.dir" value="${src.dir}/mono"/>
  <!--  Sets location and structure of the distribution -->
  <property name="dist.dir" value="${basedir}/dists"/>
  <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">
  <!-- 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="${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>
  </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="yyyyMMdd-HHmmss"/>
    </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>
  <!-- Setting flag for Java versions 1.4.x -->
    <condition property="java14">
      <contains string="${java.version}" substring="1.4"/>
    </condition>
  <!-- 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>

<!-- ===========================================================================
SETUP
============================================================================ -->

  <target name="setup" depends="init">
  <!-- Creating class-pathes -->
    <path id="starr.classpath">
      <pathelement location="${lib.starr.jar}"/>
      <pathelement location="${comp.starr.jar}"/>
      <pathelement location="${fjbg.jar}"/>
      <pathelement location="${msil.jar}"/>
      <pathelement location="${ant.jar}"/>
      <pathelement location="${jline.jar}"/>
    </path>
  <!-- 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" />
  <!-- 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}.${svn.number}.${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>

  <target name="setup.locker" depends="setup, build.locker">
    <path id="locker.classpath">
      <pathelement location="${locker.dir}/lib/library"/>
      <pathelement location="${locker.dir}/lib/compiler"/>
      <pathelement location="${fjbg.jar}"/>
      <pathelement location="${msil.jar}"/>
    </path>
    <taskdef
      name="locker"
      classname="scala.tools.ant.Scalac"
      classpathref="locker.classpath"/>
  </target>

  <target name="setup.quick" depends="setup, build">
    <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"/>
    <taskdef
      name="quicksbaz" classname="scala.tools.ant.ScalaBazaar"
      classpathref="quick.classpath"/>
    <taskdef
      name="quickdoc" classname="scala.tools.ant.Scaladoc"
      classpathref="quick.classpath"/>
  </target>

<!-- ===========================================================================
BUILD SUPPORT MACROS
============================================================================ -->

  <macrodef name="build.support">
    <attribute name="build.dir"/>
    <sequential>
      <copy todir="@{build.dir}/lib/library">
        <fileset dir="${src.dir}/library">
          <include name="**/*.tmpl"/>
          <include name="**/*.xml"/>
          <include name="**/*.js"/>
          <include name="**/*.css"/>
        </fileset>
      </copy>
      <copy todir="@{build.dir}/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="build.links">
    <attribute name="build.dir"/>
    <sequential>
      <if><not><available file="@{build.dir}/lib/fjbg.jar"/></not><then>
        <if><isset property="os.win"/><then>
          <copy file="${fjbg.jar}" tofile="@{build.dir}/lib/fjbg.jar"/>
        </then><else>
          <symlink
            link="@{build.dir}/lib/fjbg.jar"
            resource="${fjbg.jar}" overwrite="yes" failonerror="no"/>
        </else></if>
      </then></if>
      <if><not><available file="@{build.dir}/lib/msil.jar"/></not><then>
        <if><isset property="os.win"/><then>
          <copy file="${msil.jar}" tofile="@{build.dir}/lib/msil.jar"/>
        </then><else>
          <symlink
            link="@{build.dir}/lib/msil.jar"
            resource="${msil.jar}" overwrite="yes" failonerror="no"/>
        </else></if>
      </then></if>
      <if><not><available file="@{build.dir}/lib/jline.jar"/></not><then>
        <if><isset property="os.win"/><then>
          <copy file="${jline.jar}" tofile="@{build.dir}/lib/jline.jar"/>
        </then><else>
          <symlink
            link="@{build.dir}/lib/jline.jar"
            resource="${jline.jar}" overwrite="yes" failonerror="no"/>
        </else></if>
      </then></if>
    </sequential>
  </macrodef>

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

  <target name="newlocker"
    depends="clean.unfreeze, build.locker"
    description="Rebuilds LOCKER from the current sources"/>

  <target name="build.locker" depends="setup" unless="locker.avail">
    <property name="built.locker" value="yes"/>
    <stopwatch name="timer.locker"/>
  <!-- Build library -->
    <if><and>
      <isset property="os.unix"/>
      <isset property="build.resource"/></and>
    <then>
      <symlink
        link="${build.dir}"
        resource="${build.resource}" overwrite="yes" failonerror="no"/>
      <touch file="${build.dir}/is_symlink" verbose="no"/>
    </then></if>
    <mkdir dir="${locker.dir}/lib/library"/>
    <javac
      srcdir="${src.dir}/library"
      destdir="${locker.dir}/lib/library"
      source="1.4" target="1.4" deprecation="yes"
      classpath="${locker.dir}/lib/library"
      includes="**/*.java"/>
    <starr
      srcdir="${src.dir}/library"
      destdir="${locker.dir}/lib/library"
      usepredefs="no"
      addparams="${nsc.params}"
      deprecation="yes" unchecked="yes"
      classpath="${locker.dir}/lib/library"
      includes="scala/Predef.scala"/>
    <starr
      srcdir="${src.dir}/library"
      destdir="${locker.dir}/lib/library"
      addparams="${nsc.params}"
      deprecation="yes" unchecked="yes"
      classpath="${locker.dir}/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"/>
    </starr>
    <echo
      file="${locker.dir}/lib/library/${lib.prop.name}"
      message="version.number=${version.number}${line.separator}"
      append="false"
    />
    <echo
      file="${locker.dir}/lib/library/${lib.prop.name}"
      message="copyright.string=${copyright.string}${line.separator}"
      append="true"
    />
  <!-- Build compiler -->
    <mkdir dir="${locker.dir}/lib/compiler"/>
    <starr
      srcdir="${src.dir}/compiler"
      destdir="${locker.dir}/lib/compiler"
      addparams="${nsc.params}"
      deprecation="yes" unchecked="yes">
      <classpath>
        <pathelement location="${locker.dir}/lib/library"/>
        <pathelement location="${locker.dir}/lib/compiler"/>
        <pathelement location="${fjbg.jar}"/>
        <pathelement location="${msil.jar}"/>
        <pathelement location="${ant.jar}"/>
        <pathelement location="${jline.jar}"/>
      </classpath>
      <include name="**/*.scala"/>
      <excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
    </starr>
    <echo
      file="${locker.dir}/lib/compiler/${comp.prop.name}"
      message="version.number=${version.number}${line.separator}"
      append="false"
    />
    <echo
      file="${locker.dir}/lib/compiler/${comp.prop.name}"
      message="copyright.string=${copyright.string}${line.separator}"
      append="true"
    />
  <!-- Timing the build -->
    <stopwatch name="timer.locker" action="total"/>
  <!-- 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 -->
    <taskdef
      name="lockertool"
      classname="scala.tools.ant.ScalaTool"
      classpathref="locker.classpath"/>
    <mkdir dir="${locker.dir}/bin"/>
    <lockertool
      file="${locker.dir}/bin/${scala.exec.name}"
      version="${version.number}"
      copyright="${copyright.string}"
      name="Scala code runner"
      class="scala.tools.nsc.MainGenericRunner"
      javaFlags="${java.flags}"/>
    <lockertool
      file="${locker.dir}/bin/${scalac.exec.name}"
      name="Scala compiler"
      class="scala.tools.nsc.Main"
      version="${version.number}"
      copyright="${copyright.string}"
      javaFlags="${java.flags}"/>
    <lockertool
      file="${locker.dir}/bin/${scaladoc.exec.name}"
      name="Scala doc generator"
      class="scala.tools.nsc.Main"
      toolflags="-Ydoc"
      version="${version.number}"
      copyright="${copyright.string}"
      javaFlags="${java.flags}"/>
    <lockertool
      file="${locker.dir}/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="${locker.dir}/bin/${scalac.exec.name}"/>
    <chmod perm="ugo+rx"
      file="${locker.dir}/bin/${scala.exec.name}"/>
    <chmod perm="ugo+rx"
      file="${locker.dir}/bin/${scaladoc.exec.name}"/>
    <chmod perm="ugo+rx"
      file="${locker.dir}/bin/${fsc.exec.name}"/>
    <fixcrlf
      srcdir="${locker.dir}/bin"
      eol="dos"
      includes="**/*.bat"/>
    <!-- Mark LOCKER as being completely built -->
    <touch file="${locker.dir}/complete" verbose="no"/>
  </target>

<!-- ===========================================================================
BUILD QUICK-TEST LAYER
============================================================================ -->

  <target name="build" depends="setup.locker"
    description="Builds a quick-test (QUICK) version of the compiler">
    <stopwatch name="timer.quick"/>
  <!-- Build library -->
    <mkdir dir="${quick.dir}/lib/library"/>
    <javac
      srcdir="${src.dir}/library"
      destdir="${quick.dir}/lib/library"
      source="1.4" target="1.4" deprecation="yes"
      classpath="${quick.dir}/lib/library"
      includes="**/*.java"/>
    <locker
      srcdir="${src.dir}/library"
      destdir="${quick.dir}/lib/library"
      usepredefs="no"
      addparams="${nsc.params}"
      deprecation="yes" unchecked="yes"
      scalacdebugging="${nsc.log-files}"
      classpath="${quick.dir}/lib/library"
      includes="scala/Predef.scala"/>
    <locker
      srcdir="${src.dir}/library"
      destdir="${quick.dir}/lib/library"
      addparams="${nsc.params}"
      deprecation="yes" unchecked="yes"
      scalacdebugging="${nsc.log-files}"
      classpath="${quick.dir}/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"/>
    </locker>
    <echo
      file="${quick.dir}/lib/library/${lib.prop.name}"
      message="version.number=${version.number}${line.separator}"
      append="false"
    />
    <echo
      file="${quick.dir}/lib/library/${lib.prop.name}"
      message="copyright.string=${copyright.string}${line.separator}"
      append="true"
    />
  <!-- Build DBC -->
    <mkdir dir="${quick.dir}/lib/dbc"/>
    <locker
      srcdir="${src.dir}/dbc"
      destdir="${quick.dir}/lib/dbc"
      addparams="${nsc.params}"
      deprecation="yes" unchecked="yes"
      scalacdebugging="${nsc.log-files}">
      <classpath>
        <pathelement location="${quick.dir}/lib/library"/>
        <pathelement location="${quick.dir}/lib/dbc"/>
      </classpath>
      <include name="scala/dbc/**/*.scala"/>
      <excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
    </locker>
  <!-- Build actors library -->
    <mkdir dir="${quick.dir}/lib/actors"/>
    <javac
      srcdir="${src.dir}/actors"
      destdir="${quick.dir}/lib/actors"
      source="1.4" target="1.4" deprecation="yes"
      classpath="${quick.dir}/lib/actors"
      includes="scala/actors/**/*.java"/>
    <locker
      srcdir="${src.dir}/actors"
      destdir="${quick.dir}/lib/actors"
      addparams="${nsc.params}"
      deprecation="yes" unchecked="yes"
      scalacdebugging="${nsc.log-files}">
      <classpath>
        <pathelement location="${quick.dir}/lib/library"/>
        <pathelement location="${quick.dir}/lib/actors"/>
      </classpath>
      <include name="scala/actors/**/*.scala"/>
      <excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
    </locker>
  <!-- Build compiler -->
    <mkdir dir="${quick.dir}/lib/compiler"/>
    <locker
      srcdir="${src.dir}/compiler"
      destdir="${quick.dir}/lib/compiler"
      addparams="${nsc.params}"
      deprecation="yes" unchecked="yes"
      scalacdebugging="${nsc.log-files}">
      <classpath>
        <pathelement location="${quick.dir}/lib/library"/>
        <pathelement location="${quick.dir}/lib/compiler"/>
        <pathelement location="${fjbg.jar}"/>
        <pathelement location="${msil.jar}"/>
        <pathelement location="${ant.jar}"/>
        <pathelement location="${jline.jar}"/>
      </classpath>
      <include name="**/*.scala"/>
      <excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
    </locker>
    <echo
      file="${quick.dir}/lib/compiler/${comp.prop.name}"
      message="version.number=${version.number}${line.separator}"
      append="false"
    />
    <echo
      file="${quick.dir}/lib/compiler/${comp.prop.name}"
      message="copyright.string=${copyright.string}${line.separator}"
      append="true"
    />
  <!-- Build partest -->
    <mkdir dir="${quick.dir}/lib/partest"/>
    <starr
      srcdir="${src.dir}/partest"
      destdir="${quick.dir}/lib/partest"
      addparams="${nsc.params}"
      deprecation="yes" unchecked="yes">
      <classpath>
        <pathelement location="${quick.dir}/lib/library"/>
        <pathelement location="${quick.dir}/lib/compiler"/>
        <pathelement location="${quick.dir}/lib/actors"/>
      </classpath>
    </starr>
    <echo
      file="${quick.dir}/lib/partest/${par.prop.name}"
      message="version.number=${version.number}${line.separator}"
      append="false"
    />
    <echo
      file="${quick.dir}/lib/partest/${par.prop.name}"
      message="copyright.string=${copyright.string}${line.separator}"
      append="true"
    />
  <!-- Timing the build -->
    <stopwatch name="timer.quick" action="total"/>
  <!-- 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 -->
    <taskdef
      name="quicktool"
      classname="scala.tools.ant.ScalaTool"
      classpathref="quick.classpath"/>
    <mkdir dir="${quick.dir}/bin"/>
    <quicktool
      file="${quick.dir}/bin/${scala.exec.name}"
      version="${version.number}"
      copyright="${copyright.string}"
      name="Scala code runner"
      class="scala.tools.nsc.MainGenericRunner"
      javaFlags="${java.flags}"/>
    <quicktool
      file="${quick.dir}/bin/${scalac.exec.name}"
      name="Scala compiler"
      class="scala.tools.nsc.Main"
      version="${version.number}"
      copyright="${copyright.string}"
      javaFlags="${java.flags}"/>
    <quicktool
      file="${quick.dir}/bin/${scaladoc.exec.name}"
      name="Scala doc generator"
      class="scala.tools.nsc.Main"
      toolflags="-Ydoc"
      version="${version.number}"
      copyright="${copyright.string}"
      javaFlags="${java.flags}"/>
    <quicktool
      file="${quick.dir}/bin/${fsc.exec.name}"
      name="Fast Scala compiler"
      class="scala.tools.nsc.CompileClient"
      version="${version.number}"
      copyright="${copyright.string}"/>
    <chmod perm="ugo+rx"
      file="${quick.dir}/bin/${scalac.exec.name}"/>
    <chmod perm="ugo+rx"
      file="${quick.dir}/bin/${scala.exec.name}"/>
    <chmod perm="ugo+rx"
      file="${quick.dir}/bin/${scaladoc.exec.name}"/>
    <chmod perm="ugo+rx"
      file="${quick.dir}/bin/${fsc.exec.name}"/>
    <fixcrlf
      srcdir="${quick.dir}/bin"
      eol="dos"
      includes="**/*.bat"/>
  </target>

  <target name="test.quick" depends="build">
    <echo level="info"
      message="Ant test bench is not available yet."/>
  </target>

<!-- ===========================================================================
CLDC
============================================================================ -->

  <property name="cldcapi.jar" value="${lib.dir}/cldcapi10.jar"/>
  <property name="midpapi.jar" value="${lib.dir}/midpapi10.jar"/>

  <target name="cldc.sources"
          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="cldclib"
    depends="setup.quick, cldc.sources"
    description="Builds the Scala library for J2ME (CLDC)"
  >
    <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>

    <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/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" 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/scala-cldc-library.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/scala-cldc-api.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>

<!-- ===========================================================================
MSIL
============================================================================ -->

  <target name="msil.sources">
    <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="setup.quick, msil.sources">
    <quick srcdir="${msil.dir}/src" usepredefs="no" target="msil"
           assemname="${msil.dir}/predef" assemrefs="${lib.dir}"
           failonerror="false">
      <include name="scala/Predef.scala"/>
      <include name="scala/Console.scala"/>
      <include name="scala/Application.scala"/>
      <include name="scala/ByNameFunction.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/runtime/*.scala"/>
      <exclude name="scala/runtime/RichStringBuilder.scala"/>
    </quick>
    <property name="ilasm.infile" value="${msil.dir}/predef.msil"/>
    <property name="ilasm.outfile" value="${msil.dir}/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>
    <exec
      executable="ilasm" vmlauncher="no">
      <!--
      errorproperty="ilasm.err" outputproperty="ilasm.out">
      -->
      <arg line="${ilasm.args}"/>
    </exec>
  </target>

  <target name="msil" depends="msil.libraries">
    <copy todir="${quick.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="${quick.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="${quick.dir}/bin" includes="*-net*"/>
    <if><isset property="os.win"/>
      <then>
        <copy todir="${quick.dir}/lib">
          <fileset dir="${msil.dir}" includes="*.dll"/>
          <fileset dir="${lib.dir}" includes="*.dll"/>
        </copy>
      </then>
      <else>
        <symlink
          link="${quick.dir}/lib/predef.dll"
          resource="${msil.dir}/predef.dll"
          overwrite="yes" failonerror="no"/>
        <symlink
          link="${quick.dir}/lib/scalaruntime.dll"
          resource="${lib.dir}/scalaruntime.dll"
          overwrite="yes" failonerror="no"/>
        <symlink
          link="${quick.dir}/lib/mscorlib.dll"
          resource="${lib.dir}/mscorlib.dll"
          overwrite="yes" failonerror="no"/>
      </else>
    </if>
  </target>
  
<!-- ===========================================================================
TEST
============================================================================ -->

  <target name="test" depends="test.stability, test.strap"
    description="Tests the build for stability"/>

  <!-- Build the bootstrap layer -->
  <target name="build.strap" depends="setup.quick">
    <stopwatch name="timer.strap"/>
  <!-- Build library -->
    <mkdir dir="${strap.dir}/lib/library"/>
    <javac
      srcdir="${src.dir}/library"
      destdir="${strap.dir}/lib/library"
      source="1.4" target="1.4" deprecation="yes"
      classpath="${strap.dir}/lib/library"
      includes="**/*.java"/>
    <quick
      srcdir="${src.dir}/library"
      destdir="${strap.dir}/lib/library"
      usepredefs="no" addparams="${nsc.params}"
      deprecation="yes" unchecked="yes"
      classpath="${strap.dir}/lib/library"
      includes="scala/Predef.scala"/>
    <quick
      srcdir="${src.dir}/library"
      destdir="${strap.dir}/lib/library"
      addparams="${nsc.params}"
      deprecation="yes" unchecked="yes"
      classpath="${strap.dir}/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"/>
    </quick>
    <echo
      file="${strap.dir}/lib/library/${lib.prop.name}"
      message="version.number=${version.number}${line.separator}"
      append="false"
    />
    <echo
      file="${strap.dir}/lib/library/${lib.prop.name}"
      message="copyright.string=${copyright.string}${line.separator}"
      append="true"
    />
  <!-- Build DBC -->
    <mkdir dir="${strap.dir}/lib/dbc"/>
    <quick
      srcdir="${src.dir}/dbc"
      destdir="${strap.dir}/lib/dbc"
      addparams="${nsc.params}"
      deprecation="yes" unchecked="yes">
      <classpath>
        <pathelement location="${strap.dir}/lib/library"/>
        <pathelement location="${strap.dir}/lib/dbc"/>
      </classpath>
      <include name="scala/dbc/**/*.scala"/>
      <excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
    </quick>
  <!-- Build actors library -->
    <mkdir dir="${strap.dir}/lib/actors"/>
    <javac
      srcdir="${src.dir}/actors"
      destdir="${strap.dir}/lib/actors"
      source="1.4" target="1.4" deprecation="yes"
      classpath="${strap.dir}/lib/actors"
      includes="scala/actors/**/*.java"/>
    <quick
      srcdir="${src.dir}/actors"
      destdir="${strap.dir}/lib/actors"
      addparams="${nsc.params}">
      <classpath>
        <pathelement location="${strap.dir}/lib/library"/>
        <pathelement location="${strap.dir}/lib/actors"/>
      </classpath>
      <include name="scala/actors/**/*.scala"/>
      <excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
    </quick>
  <!-- Build compiler -->
    <mkdir dir="${strap.dir}/lib/compiler"/>
    <quick
      srcdir="${src.dir}/compiler"
      destdir="${strap.dir}/lib/compiler"
      addparams="${nsc.params}">
      <classpath>
        <pathelement location="${strap.dir}/lib/library"/>
        <pathelement location="${strap.dir}/lib/compiler"/>
        <pathelement location="${fjbg.jar}"/>
        <pathelement location="${msil.jar}"/>
        <pathelement location="${ant.jar}"/>
        <pathelement location="${jline.jar}"/>
      </classpath>
      <include name="**/*.scala"/>
      <excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
    </quick>
    <echo
      file="${strap.dir}/lib/compiler/${comp.prop.name}"
      message="version.number=${version.number}${line.separator}"
      append="false"
    />
    <echo
      file="${strap.dir}/lib/compiler/${comp.prop.name}"
      message="copyright.string=${copyright.string}${line.separator}"
      append="true"
    />
  <!-- Build partest -->
    <mkdir dir="${strap.dir}/lib/partest"/>
    <quick
      srcdir="${src.dir}/partest"
      destdir="${strap.dir}/lib/partest"
      addparams="${nsc.params}"
      deprecation="yes" unchecked="yes">
      <classpath>
        <pathelement location="${strap.dir}/lib/library"/>
        <pathelement location="${strap.dir}/lib/compiler"/>
        <pathelement location="${strap.dir}/lib/actors"/>
      </classpath>
    </quick>
    <echo
      file="${strap.dir}/lib/partest/${par.prop.name}"
      message="version.number=${version.number}${line.separator}"
      append="false"
    />
    <echo
      file="${strap.dir}/lib/partest/${par.prop.name}"
      message="copyright.string=${copyright.string}${line.separator}"
      append="true"
    />
  <!-- Timing the build -->
    <stopwatch name="timer.strap" action="total"/>
  <!-- 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 -->
    <taskdef
      name="straptool"
      classname="scala.tools.ant.ScalaTool"
      classpathref="quick.classpath"/>
    <mkdir dir="${strap.dir}/bin"/>
    <straptool
      file="${strap.dir}/bin/${scala.exec.name}"
      version="${version.number}"
      copyright="${copyright.string}"
      name="Scala code runner"
      class="scala.tools.nsc.MainGenericRunner"
      javaFlags="${java.flags}"/>
    <straptool
      file="${strap.dir}/bin/${scalac.exec.name}"
      name="Scala compiler"
      class="scala.tools.nsc.Main"
      version="${version.number}"
      copyright="${copyright.string}"
      javaFlags="${java.flags}"/>
    <straptool
      file="${strap.dir}/bin/${scaladoc.exec.name}"
      name="Scala doc generator"
      class="scala.tools.nsc.Main"
      toolflags="-Ydoc"
      version="${version.number}"
      copyright="${copyright.string}"
      javaFlags="${java.flags}"/>
    <straptool
      file="${strap.dir}/bin/${fsc.exec.name}"
      name="Fast Scala compiler"
      class="scala.tools.nsc.CompileClient"
      version="${version.number}"
      copyright="${copyright.string}"/>
    <chmod perm="ugo+rx"
      file="${strap.dir}/bin/${scalac.exec.name}"/>
    <chmod perm="ugo+rx"
      file="${strap.dir}/bin/${scala.exec.name}"/>
    <chmod perm="ugo+rx"
      file="${strap.dir}/bin/${scaladoc.exec.name}"/>
    <chmod perm="ugo+rx"
      file="${strap.dir}/bin/${fsc.exec.name}"/>
    <fixcrlf
      srcdir="${strap.dir}/bin"
      eol="dos"
      includes="**/*.bat"/>
  </target>

  <!-- 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>

  <target name="test.strap" depends="build.strap">
    <echo level="info" message="Ant test bench is not available yet."/>
  </target>

<!-- ===========================================================================
DOCUMENTATION
============================================================================ -->

  <target name="docs" depends="setup.quick"
    description="Generated the API for library sources">
    <mkdir dir="${api-lib.dir}"/>
    <quickdoc
      srcdir="${src.dir}"
      destdir="${api-lib.dir}"
      sourcepath=""
      deprecation="yes" unchecked="yes"
      windowtitle="Scala Library Documentation"
      doctitle="&lt;div&gt;Scala ${version.number}&lt;br/&gt;API Specification&lt;/div&gt;"
      classpath="${quick.dir}/lib/library${path.separator}${quick.dir}/lib/actors">
      <include name="dbc/**/*.scala"/>
      <include name="actors/**/*.scala"/>
      <include name="library/**/*.scala"/>
      <excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
    </quickdoc>
  </target>

  <target name="docs.compiler" depends="setup.quick"
    description="Generated the API for compiler sources">
    <mkdir dir="${api-comp.dir}"/>
    <quickdoc
      srcdir="${src.dir}/compiler"
      destdir="${api-comp.dir}"
      sourcepath=""
      windowtitle="Scala Compiler Documentation"
      doctitle="&lt;div&gt;Scala ${version.number}&lt;br/&gt;API Specification&lt;/div&gt;">
      <classpath>
        <pathelement location="${quick.dir}/lib/library"/>
        <pathelement location="${quick.dir}/lib/compiler"/>
        <pathelement location="${fjbg.jar}"/>
        <pathelement location="${msil.jar}"/>
        <pathelement location="${ant.jar}"/>
        <pathelement location="${jline.jar}"/>
      </classpath>
      <include name="**/*.scala"/>
      <excludesfile name="${nsc.excludes.file}" if="excludes.avail"/>
    </quickdoc>
  </target>

  <target name="docs.manual" depends="setup.quick"
    description="Generated the manual for the Scala tools">
    <mkdir dir="${tooldocs.dir}/classes"/>
    <path id="manual.classpath">
      <pathelement location="${quick.dir}/lib/library"/>
      <pathelement location="${tooldocs.dir}/classes"/>
    </path>
    <quick
      srcdir="${src.dir}/manual"
      destdir="${tooldocs.dir}/classes"
      classpathref="manual.classpath">
      <include name="**/*.scala"/>
    </quick>
    <emit command="fsc"/>
    <emit command="sbaz"/>
    <emit command="scala"/>
    <emit command="scalac"/>
    <emit command="scaladoc"/>
    <emit command="scalap"/>
    <fixcrlf srcdir="${tooldocs.dir}" eol="unix" includes="**/*.1"/>
    <copy todir="${tooldocs.dir}">
      <fileset dir="${src.dir}/manual/scala/tools/docutil/resources">
        <include name="**/*.html"/>
        <include name="**/*.css"/>
        <include name="**/*.gif"/>
        <include name="**/*.png"/>
      </fileset>
    </copy>
  </target>

  <macrodef name="emit">
    <attribute name="command"/>
    <sequential>
      <java classname="scala.tools.docutil.EmitHtml"
        output="${tooldocs.dir}/@{command}.html"
        classpathref="manual.classpath"
        fork="true" logError="yes"
      >
        <arg value="scala.man1.@{command}"/>
      </java>
      <java classname="scala.tools.docutil.EmitManPage"
        output="${tooldocs.dir}/@{command}.1"
        classpathref="manual.classpath"
        fork="true" logError="yes"
      >
        <arg value="scala.man1.@{command}"/>
      </java>
    </sequential>
  </macrodef>

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

  <target name="dist.devel" depends="init">
    <property file="${number.file}"/>
    <property name="version.number"
      value="${version.major}.${version.minor}.${version.patch}.${svn.number}"/>
    <runtarget target="pack"/>
  </target>

  <target name="dist.patch" depends="init">
    <propertyfile file="${number.file}">
      <entry key="version.patch" type="int" default="0" operation="+"/>
    </propertyfile>
    <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">
    <propertyfile file="${number.file}">
      <entry key="version.minor" type="int" default="0" operation="+"/>
      <entry key="version.patch" type="int" value="0"/>
    </propertyfile>
    <property file="${number.file}"/>
    <property name="version.number"
      value="${version.major}.${version.minor}.${version.patch}${version.suffix}"/>
    <runtarget target="pack"/>
  </target>

  <target name="dist"
    depends="clean.build, test, build.dist"
    description="Creates a (stability-)tested, complete Scala distribution *from scratch*"/>

  <target name="pack"
    depends="build.archive, build.sbaz"
    description="Packs a distribution for SBaz and ZIP/TAR"/>

  <target name="binaries"
    depends="setup, build.strap"
    description="Creates a binary Scala distribution">
    <property name="dist.current.dir"
              value="${dist.dir}/scala-${version.number}"/>
    <if><and>
      <isset property="os.unix"/>
      <isset property="dist.resource"/></and>
    <then>
      <symlink
        link="${dist.dir}"
        resource="${dist.resource}" overwrite="yes" failonerror="no"/>
      <touch file="${dist.dir}/is_symlink" verbose="no"/>
    </then></if>
    <mkdir dir="${dist.current.dir}"/>
  <!-- Copy all requires libraries -->
    <mkdir dir="${dist.current.dir}/lib"/>
    <property name="ant.version.number" value="[1.6"/>
    <!-- version ::= major('.'minor('.'micro('.'qualifier)?)?)?              -->
    <!-- see http://www2.osgi.org/javadoc/r4/org/osgi/framework/Version.html -->
    <propertyregex
      property="osgi.version.number" input="${version.number}"
      regexp="([^-]*)(-.*)?" select="\1"
    />
    <echo level="verbose" message="OSGi version: ${osgi.version.number}"/>
    <jar destfile="${dist.current.dir}/lib/${comp.jar.name}">
      <fileset dir="${strap.dir}/lib/compiler"/>
      <zipfileset src="${fjbg.jar}"/>
      <zipfileset src="${msil.jar}"/>
      <manifest>
        <attribute name="Signature-Version" value="${version.number}"/>
        <attribute name="Built-By" value="${user.name}"/>
        <attribute name="Main-Class" value="scala.tools.nsc.Main"/>
        <attribute name="Class-Path" value="${lib.jar.name}"/>
        <section name="scala/tools/nsc">
          <attribute name="Extension-Name" value="scala.tools.nsc"/>
          <attribute name="Specification-Title" value="Scala Compiler"/>
          <attribute name="Specification-Version" value="${version.number}"/>
          <attribute name="Specification-Vendor" value="${vendor.name}"/>
          <attribute name="Implementation-Title" value="scala.tools.nsc"/>
          <attribute name="Implementation-Version" value="${version.number}"/>
          <attribute name="Implementation-Vendor" value="${vendor.name}"/>
        </section>
        <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
        <attribute name="Bundle-ManifestVersion" value="2"/>
        <attribute name="Bundle-Name" value="Scala Compiler Bundle"/>
        <attribute name="Bundle-SymbolicName" value="scala_compiler"/>
        <attribute name="Bundle-Version" value="${osgi.version.number}"/>
        <attribute name="Bundle-Vendor" value="${vendor.name}"/>
        <attribute name="Export-Package" value="scala.tools.ant;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.ast;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.ast.parser;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.backend;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.doc;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.io;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.matching;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.models;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.symtab;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.symtab.classfile;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.symtab.clr;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.transform;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.typechecker;version=&#34;${osgi.version.number}&#34;,scala.tools.nsc.util;version=&#34;${osgi.version.number}&#34;,scala.tools.util;version=&#34;${osgi.version.number}&#34;"/>
        <attribute name="Import-Package" value="org.apachge.ant.tools;version=&#34;${ant.version.number}&#34;,org.apachge.ant.tools.taskdefs;version=&#34;${ant.version.number}&#34;,org.apachge.ant.types;version=&#34;${ant.version.number}&#34;,org.apachge.ant.tools.util;version=&#34;${ant.version.number}&#34;,org.xml.sax"/>
        <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
      </manifest>
    </jar>
    <jar destfile="${dist.current.dir}/lib/${lib.jar.name}">
      <fileset dir="${strap.dir}/lib/library"/>
      <fileset dir="${strap.dir}/lib/actors"/>
      <manifest>
        <attribute name="Signature-Version" value="${version.number}"/>
        <attribute name="Built-By" value="${user.name}"/>
        <attribute name="Main-Class" value="scala.util.Properties"/>
        <section name="scala">
          <attribute name="Extension-Name" value="scala"/>
          <attribute name="Specification-Title" value="Scala Library"/>
          <attribute name="Specification-Version" value="${version.number}"/>
          <attribute name="Specification-Vendor" value="${vendor.name}"/>
          <attribute name="Implementation-Title" value="scala"/>
          <attribute name="Implementation-Version" value="${version.number}"/>
          <attribute name="Implementation-Vendor" value="${vendor.name}"/>
        </section>
        <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
        <attribute name="Bundle-ManifestVersion" value="2"/>
        <attribute name="Bundle-Name" value="Scala Library Bundle"/>
        <attribute name="Bundle-SymbolicName" value="scala_library"/>
        <attribute name="Bundle-Version" value="${osgi.version.number}"/>
        <attribute name="Bundle-Vendor" value="${vendor.name}"/>
        <attribute name="Export-Package" value="scala;version=&#34;${osgi.version.number}&#34;,scala.actors;version=&#34;${osgi.version.number}&#34;,scala.actors.remote;version=&#34;${osgi.version.number}&#34;,scala.collection;version=&#34;${osgi.version.number}&#34;,scala.collection.immutable;version=&#34;${osgi.version.number}&#34;,scala.collection.jcl;version=&#34;${osgi.version.number}&#34;,scala.collection.mutable;version=&#34;${osgi.version.number}&#34;,scala.compat;version=&#34;${osgi.version.number}&#34;,scala.concurrent;version=&#34;${osgi.version.number}&#34;,scala.io;version=&#34;${osgi.version.number}&#34;,scala.mobile;version=&#34;${osgi.version.number}&#34;,scala.ref;version=&#34;${osgi.version.number}&#34;,scala.reflect;version=&#34;${osgi.version.number}&#34;,scala.runtime;version=&#34;${osgi.version.number}&#34;,scala.testing;version=&#34;${osgi.version.number}&#34;,scala.text;version=&#34;${osgi.version.number}&#34;,scala.util;version=&#34;${osgi.version.number}&#34;,scala.util.automata;version=&#34;${osgi.version.number}&#34;,scala.util.grammar;version=&#34;${osgi.version.number}&#34;,scala.util.logging;version=&#34;${osgi.version.number}&#34;,scala.util.parsing;version=&#34;${osgi.version.number}&#34;,scala.util.regexp;version=&#34;${osgi.version.number}&#34;,scala.xml;version=&#34;${osgi.version.number}&#34;,scala.xml.dtd;version=&#34;${osgi.version.number}&#34;,scala.xml.factory;version=&#34;${osgi.version.number}&#34;,scala.xml.parsing;version=&#34;${osgi.version.number}&#34;,scala.xml.path;version=&#34;${osgi.version.number}&#34;,scala.xml.pull;version=&#34;${osgi.version.number}&#34;,scala.xml.transform;version=&#34;${osgi.version.number}&#34;"/>
        <attribute name="Import-Package" value="javax.xml.parsers,org.xml.sax,org.xml.sax.helpers"/>
        <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
      </manifest>
    </jar>
    <jar destfile="${dist.current.dir}/lib/${dbc.jar.name}">
      <fileset dir="${strap.dir}/lib/dbc"/>
      <manifest>
        <attribute name="Signature-Version" value="${version.number}"/>
        <attribute name="Built-By" value="${user.name}"/>
        <attribute name="Class-Path" value="${lib.jar.name}"/>
        <section name="scala/dbc">
          <attribute name="Extension-Name" value="scala.dbc"/>
          <attribute name="Specification-Title" value="Scala DBC Library"/>
          <attribute name="Specification-Version" value="${version.number}"/>
          <attribute name="Specification-Vendor" value="${vendor.name}"/>
          <attribute name="Implementation-Title" value="scala.dbc"/>
          <attribute name="Implementation-Version" value="${version.number}"/>
          <attribute name="Implementation-Vendor" value="${vendor.name}"/>
        </section>
        <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
        <attribute name="Bundle-ManifestVersion" value="2"/>
        <attribute name="Bundle-Name" value="Scala DBC Library Bundle"/>
        <attribute name="Bundle-SymbolicName" value="scala_dbc_library"/>
        <attribute name="Bundle-Version" value="${osgi.version.number}"/>
        <attribute name="Bundle-Vendor" value="${vendor.name}"/>
        <attribute name="Export-Package" value="scala.dbc;version=&#34;${osgi.version.number}&#34;,scala.dbc.datatype;version=&#34;${osgi.version.number}&#34;,scala.dbc.exception;version=&#34;${osgi.version.number}&#34;,scala.dbc.result;version=&#34;${osgi.version.number}&#34;,scala.dbc.statement;version=&#34;${osgi.version.number}&#34;,scala.dbc.statement.expression;version=&#34;${osgi.version.number}&#34;,scala.dbc.syntax;version=&#34;${osgi.version.number}&#34;,scala.dbc.value;version=&#34;${osgi.version.number}&#34;,scala.dbc.vendor;version=&#34;${osgi.version.number}&#34;"/>
        <attribute name="Import-Package" value="scala;version=&#34;${osgi.version.number}&#34;,scala.compat;version=&#34;${osgi.version.number}&#34;"/>
        <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
      </manifest>
    </jar>
    <jar destfile="${dist.current.dir}/lib/${partest.jar.name}">
      <fileset dir="${strap.dir}/lib/partest"/>
      <manifest>
        <attribute name="Signature-Version" value="${version.number}"/>
        <attribute name="Built-By" value="${user.name}"/>
        <attribute name="Main-Class" value="scala.tools.partest.TestRunner"/>
        <attribute name="Class-Path" value="${lib.jar.name}"/>
        <section name="scala/tools/partest">
          <attribute name="Extension-Name" value="scala.tools.partest"/>
          <attribute name="Specification-Title" value="Scala Test Utility"/>
          <attribute name="Specification-Version" value="${version.number}"/>
          <attribute name="Specification-Vendor" value="${vendor.name}"/>
          <attribute name="Implementation-Title" value="scala.tools.partest"/>
          <attribute name="Implementation-Version" value="${version.number}"/>
          <attribute name="Implementation-Vendor" value="${vendor.name}"/>
        </section>
        <attribute name="Bundle-DocURL" value="http://www.scala-lang.org/"/>
        <attribute name="Bundle-ManifestVersion" value="2"/>
        <attribute name="Bundle-Name" value="Scala Test Bundle"/>
        <attribute name="Bundle-SymbolicName" value="scala_compiler"/>
        <attribute name="Bundle-Version" value="${osgi.version.number}"/>
        <attribute name="Bundle-Vendor" value="${vendor.name}"/>
        <attribute name="Export-Package" value="scala.tools.partest;version=&#34;${osgi.version.number}&#34;,scala.tools.partest.utils;version=&#34;${osgi.version.number}&#34;"/>
        <attribute name="Import-Package" value="javax.swing"/>
        <attribute name="Bundle-RequiredExecutionEnvironment" value="J2SE-1.4"/>
      </manifest>
    </jar>

    <!-- build source jars -->
    <jar
      destfile="${dist.current.dir}/lib/${libsrc.jar.name}">
      <fileset dir="${src.dir}/library"/>
      <fileset dir="${src.dir}/actors"/>
    </jar>
    <jar
      destfile="${dist.current.dir}/lib/${dbcsrc.jar.name}"
      basedir="${src.dir}/dbc"
      includes="**/*.scala"
      />
    <jar
      destfile="${dist.current.dir}/lib/${parsrc.jar.name}"
      basedir="${src.dir}/partest"
      includes="**/*.scala"
      />
    <jar
      destfile="${dist.current.dir}/lib/${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>

  <target name="build.dist"
    depends="binaries,docs,docs.manual,msil"
    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>

  <!-- Create the SBaz packages -->
  <target name="build.sbaz" depends="build.dist,cldclib">
    <property name="sbaz.universe" value="http://www.scala-lang.org/downloads/packages"/>
    <mkdir dir="${dist.dir}"/>
  <!-- Create the Scala library package -->
    <quicksbaz
      file="${dist.dir}/scala-library-${version.number}.sbp"
      adfile="${dist.dir}/scala-library-${version.number}.advert"
      name="scala-library"
      version="${version.number}"
      desc="The Scala library. This is the minimal requirement to run any Scala program."
      link="${sbaz.universe}/scala-library-${version.number}.sbp">
      <libset dir="${dist.current.dir}/lib" includes="${lib.jar.name},${dbc.jar.name}"/>
      <srcset dir="${dist.current.dir}/lib" includes="${libsrc.jar.name},${dbcsrc.jar.name}"/>
    </quicksbaz>
  <!-- Create the Scala developper package -->
    <quicksbaz
      file="${dist.dir}/scala-devel-${version.number}.sbp"
      adfile="${dist.dir}/scala-devel-${version.number}.advert"
      name="scala-devel"
      version="${version.number}"
      desc="The Scala developper tools. This contains everything that is required to write, test and document new Scala programs, as well as all developper documentation."
      depends="scala-library"
      link="${sbaz.universe}/scala-devel-${version.number}.sbp">
      <binset dir="${dist.current.dir}/bin" includes="**"/>
      <docset dir="${dist.current.dir}/doc" includes="**"/>
      <libset dir="${dist.current.dir}/lib" includes="${comp.jar.name}"/>
      <srcset dir="${dist.current.dir}/lib" includes="${compsrc.jar.name}"/>
      <manset dir="${dist.current.dir}/man" includes="**"/>
    </quicksbaz>
  <!-- Creates the empty umbrella Scala package -->
    <quicksbaz
      file="${dist.dir}/scala-${version.number}.sbp"
      adfile="${dist.dir}/scala-${version.number}.advert"
      name="scala"
      version="${version.number}"
      desc="The base Scala package that contains everything needed to start using Scala."
      depends="scala-library,scala-devel"
      link="${sbaz.universe}/scala-${version.number}.sbp"/>
  <!-- Creates the Scala test package -->
    <quicksbaz
      file="${dist.dir}/scala-test-${version.number}.sbp"
      adfile="${dist.dir}/scala-test-${version.number}.advert"
      name="scala-test"
      version="${version.number}"
      desc="The Scala test package contains everything needed to test Scala."
      link="${sbaz.universe}/scala-test-${version.number}.sbp">
      <binset dir="${basedir}/test"
        includes="clitest,diff/diff.*,diff/lib*.dll,scalatest,scalatest.bat"/>
      <miscset
        dir="${basedir}/test"
        includes="files/**/*.args,files/**/*.check,files/**/*.jar,files/**/*.java,files/**/*.scala,files/cli/**/*.check.*,files/jvm/*.so,files/shootout/*.javaopts,files/shootout/*.runner,files/shootout/*.txt"/>
    </quicksbaz>
  <!-- Creates the MSIL package -->
    <quicksbaz
      file="${dist.dir}/scala-msil-${version.number}.sbp"
      adfile="${dist.dir}/scala-msil-${version.number}.advert"
      name="scala-msil"
      version="${version.number}"
      desc="The Scala MSIL package contains everything needed to use Scala on .NET."
      depends="scala-library,scala-devel"
      link="${sbaz.universe}/scala-msil-${version.number}.sbp">
      <binset dir="${quick.dir}/bin" includes="scala*net*"/>
      <libset dir="${quick.dir}/lib" includes="*.dll"/>
    </quicksbaz>
  <!-- Creates the CLDC package -->
    <quicksbaz
      file="${dist.dir}/scala-cldc-${version.number}.sbp"
      adfile="${dist.dir}/scala-cldc-${version.number}.advert"
      name="scala-cldc"
      version="${version.number}"
      desc="The Scala CLDC package contains everything needed to use Scala on CLDC devices."
      link="${sbaz.universe}/scala-cldc-${version.number}.sbp">
      <libset dir="${cldc.dir}/lib" includes="*.jar"/>
    </quicksbaz>
  </target>

  <target name="build.archive" depends="build.dist">
    <tar
      destfile="${dist.dir}/scala-${version.number}.tgz"
      compression="gzip">
      <tarfileset dir="${dist.current.dir}" includes="bin/**" mode="755"/>
      <tarfileset dir="${dist.current.dir}" excludes="bin/**"/>
    </tar>
    <checksum
      file="${dist.dir}/scala-${version.number}.tgz"
      forceOverwrite="yes"
      fileext=".md5"/>
  <!-- Create zip archive -->
    <zip
      basedir="${dist.current.dir}"
      destfile="${dist.dir}/scala-${version.number}.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>

<!-- ===========================================================================
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.msil" depends="ant-init" description="Removes all MSIL build products">
    <remove dir="${msil.dir}"/>
  </target>

  <target name="clean.cldc" depends="ant-init" description="Removes all CLDC build products">
    <remove dir="${cldc.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>

</project>